Compare commits

...

438 Commits
0.95 ... 1.20

Author SHA1 Message Date
Paul Kulchenko
653d9b52ca Updated documentation for 1.20. 2015-10-08 15:24:01 -07:00
Paul Kulchenko
d74711580b Upgraded Lua 5.3 interpreter to 5.3.1 on Linux (x86 and x64). 2015-10-07 20:10:59 -07:00
Paul Kulchenko
2a164bee4e Upgraded Lua 5.3 interpreter to 5.3.1 on OSX. 2015-10-07 19:42:06 -07:00
Paul Kulchenko
70f51b7ba7 Updated CHANGELOG with translation updates. 2015-10-06 22:14:06 -07:00
Paul Kulchenko
74a37fb2c1 Updated Russian translation (#70). 2015-10-05 10:02:33 -07:00
Paul Kulchenko
f6f4797483 Merge branch 'italian-translation' (#70, closes #536). 2015-10-05 08:24:51 -07:00
Leo Bartoloni
4ace576eb2 fixed translations 2015-10-05 08:23:26 -07:00
Leo Bartoloni
0b3084964c Added italian translations 2015-10-05 08:23:26 -07:00
Leo Bartoloni
d3b6ab00a3 Added Italian translations 2015-10-05 08:23:26 -07:00
Paul Kulchenko
f4527705aa Upgraded Lua 5.3 interpreter to 5.3.1 on Windows (closes #453, closes #460).
This also fixes seek/tell functions on large (>2GB) files on Windows.
2015-10-04 09:11:14 -07:00
riidom
ae4c4a1f02 Update de.lua
completed
2015-10-03 14:10:12 +02:00
riidom
b5fa3955dd Update de.lua
2 nils missing, see respective issue pls.
2015-10-03 12:49:00 +02:00
Paul Kulchenko
f7e3b71b94 Updated CHANGELOG with recent changes. 2015-10-02 19:44:56 -07:00
Yonaba
ebd5557620 Updated french translation as of commit 84c2846033 (#70) 2015-10-03 01:13:58 +00:00
Paul Kulchenko
84c2846033 Updated translation files for new messages (#70). 2015-09-30 20:44:20 -07:00
Paul Kulchenko
29e8fbfda8 Updated a message to match one of the existing ones (#70). 2015-09-30 20:32:21 -07:00
Paul Kulchenko
9dc00aa39b Updated translation logic to accept empty tables for pluralization values (#70). 2015-09-30 20:21:46 -07:00
Paul Kulchenko
cd7692cdc1 Added handling of translation messages that require pluralization (#70). 2015-09-30 20:21:04 -07:00
Paul Kulchenko
0d604bfd1d Fixed text search and fuzzy symbol search in symlinks (#458, #530). 2015-09-26 21:49:56 -07:00
Paul Kulchenko
10257c5034 Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2. 2015-09-25 14:56:33 -07:00
Paul Kulchenko
1b3cd9a11b Added check for non-zero file size before reporting load progress (#530). 2015-09-24 11:57:50 -07:00
Paul Kulchenko
125850f150 Added switching interpreters by clicking on the interpreter label in the status bar. 2015-09-23 10:08:04 -07:00
Paul Kulchenko
e6ab186571 Added handling of editor commands (Copy/Paste/SelectAll/Undo/Redo) in search panel controls. 2015-09-22 18:19:26 -07:00
Paul Kulchenko
c5e6c9608c Fixed an error when scope field is updated in the search dialog (side effect of 8dc07e22). 2015-09-21 22:00:48 -07:00
Paul Kulchenko
576da864fb Added position to the end-of-file lexer token (closes #529). 2015-09-21 10:18:58 -07:00
Paul Kulchenko
7606d014e2 Updated OSX launcher to keep DYLD_LIBRARY_PATH if already set. 2015-09-20 14:19:19 -07:00
Paul Kulchenko
0f37b84027 Added reporting when a file can't be removed from a project tree. 2015-09-18 09:09:19 -07:00
Paul Kulchenko
845f5863f9 Fixed opening only one tab for external debugging of dynamic code on Linux (closes #526). 2015-09-17 13:59:58 -07:00
Paul Kulchenko
fe6b57811c Merge branch 'master' of https://github.com/marmalade/ZeroBraneStudio 2015-09-17 09:27:32 -07:00
Nick
a583431a03 Fix live picking up debug vs release binaries
Was previously picking up the switch from Marmalade Hub only at the
point where ZB is opened from the Hub. This change makes it work "live"
- picks up the last hub setting whenever you run the project in ZB.
2015-09-17 16:39:10 +01:00
Nick
c4ad99c913 Update marmalade API definition to 7.9
Updated API definition to match 7.9 APIs (Valid back to 7.8 as no new
APIs since then)
2015-09-17 16:39:10 +01:00
Nick
8e06c1de5c Integrate ZeroBrane with Marmalade's Hub GUI
Output from Marmalade simulator now goes to ZB console instead of
external window.
Marmalade interpreter now reads config info from Hub project and uses
these loader binaries: "release sim" for release configuration, and
"console" for debug.
Save project settings immediately.
NB: Requires Marmalade > 7.9.0 for interpreter to be set automatically.
Older versions will work but user has to set interpreter.
2015-09-17 16:36:40 +01:00
Paul Kulchenko
45c38ab3ec Fixed running Run/Debug commands on unnamed files; regression from 5e4e1962. 2015-09-17 08:24:14 -07:00
Paul Kulchenko
9005b25723 Added explicit initialization for editor.autoactivate default setting. 2015-09-16 22:44:39 -07:00
Paul Kulchenko
aece6108aa Added allowing editor.saveallonrun with infervalue static analyzer (closes #524). 2015-09-16 22:43:05 -07:00
Paul Kulchenko
d2e7a8908a Updated static analyzer (luainspect) to take globals in 'required' files into account (#520).
This change is in effect only when `staticanalyzer.infervalue` is set to `true`.
2015-09-15 15:52:08 -07:00
Paul Kulchenko
9287326291 Updated static analyzer to refresh cache of 'required' modules (#520). 2015-09-15 15:50:28 -07:00
Paul Kulchenko
a4ef4f64b3 Added support for include command in config files. 2015-09-14 12:09:57 -07:00
Paul Kulchenko
c6bf32b0d2 Updated 'auto-completing...' message to hide after a brief delay. 2015-09-12 22:48:48 -07:00
Paul Kulchenko
578fcb1518 Disabled unhiding one of wxwidgets windows that is only used for message passing (Windows). 2015-09-11 17:01:53 -07:00
Paul Kulchenko
8a455a0077 Added document Close method (#166). 2015-09-11 17:00:44 -07:00
Paul Kulchenko
e2331637af Added descriptions for new Lua 5.3 math.* and coroutine.* functions. 2015-09-10 13:10:50 -07:00
Paul Kulchenko
2de0f88d10 Added functions new to Lua 5.3 to the list of keywords. 2015-09-10 12:55:58 -07:00
Paul Kulchenko
a1e7d262fd Added reporting of deserialization failures for saved package data. 2015-09-09 22:18:50 -07:00
Paul Kulchenko
75056fa9c2 Simplified reporting of error messages from the main script. 2015-09-09 22:18:15 -07:00
Paul Kulchenko
e5d7341e43 Fixed highlighting for those specs that don't have information on where functions end (#515). 2015-09-08 22:16:36 -07:00
Paul Kulchenko
a8cede0052 Merge branch 'master' of http://git.code.sf.net/p/estrelaeditor/code 2015-09-08 22:12:37 -07:00
Paul Kulchenko
036cf0b745 Updated C/cpp spec to skip if(...) from the list of functions. 2015-09-08 15:15:47 -07:00
Paul Kulchenko
41964c458e Updated C/cpp spec to properly handle functions at the beginning of a file. 2015-09-08 15:15:04 -07:00
Paul Kulchenko
a7ae8713d8 Added collapsing white spaces from names shown in the Outline. 2015-09-08 14:57:22 -07:00
Paul Kulchenko
e80118de1e Updated package data serialization to use simpler dumper for faster processing. 2015-09-07 21:20:15 -07:00
Paul Kulchenko
aa32586f94 Updated saving symbol index to be called less frequently (#499). 2015-09-07 21:16:47 -07:00
Paul Kulchenko
c3dafa0af8 Updated list of fields to skip from saved symbol index (#499). 2015-09-07 21:15:59 -07:00
Paul Kulchenko
2078608012 Fixed highlighting the current function when anonymous functions are hidden (#515). 2015-09-05 10:42:52 -07:00
Paul Kulchenko
5e4e1962bd Updated Run/Debug to not force saving new tabs when Start file is set. 2015-09-04 11:56:38 -07:00
Christoph Kubisch
95ecc1876d glslc tool: add menu option for pre-process mode 2015-09-04 19:28:17 +02:00
Paul Kulchenko
8dc07e2282 Added workaround for a memory leak in wxlua after a search panel is opened.
The leak happens when a non-existing property is checked on a wxlua object
inside `pcall`. wxlua throws `wxLua: Unable to call an unknown method '...' on
a '...' type.`, which is handled correctly, but leaks about 0.5Kb per call.
2015-09-03 11:21:23 -07:00
Paul Kulchenko
b9ac6ce4c4 Updated default interpreter not set in the previous commit (#518). 2015-09-02 22:22:55 -07:00
Paul Kulchenko
7541b830ea Updated interpreter handling to allow setting of default value in the config (closes #518). 2015-09-02 20:55:06 -07:00
Paul Kulchenko
1f83927462 Updated highlighting of the current function in the Outline to select one item (#515). 2015-09-02 08:54:29 -07:00
Paul Kulchenko
14d55bdfe3 Added jumping to the current function in the outline (#515). 2015-08-31 15:20:48 -07:00
Paul Kulchenko
26f0a6bd4c Added highlighting current functions for better visibility (#515). 2015-08-30 16:01:05 -07:00
Paul Kulchenko
5a1b42330f Added skipping unneded fields from the symbol index to reduce memory usage (#515). 2015-08-30 16:00:37 -07:00
Paul Kulchenko
413a6b611f Disabled initial highlight when showing current function disabled in the outline (#515). 2015-08-30 15:32:26 -07:00
Paul Kulchenko
34276cf9ff Added showing position of the current function in the Outline (closes #515). 2015-08-29 14:51:36 -07:00
Paul Kulchenko
45a4924686 Added explicit editor destroy during find and replace to conserve memory. 2015-08-28 09:21:26 -07:00
Paul Kulchenko
cc085d4fb4 Added explicit editor destroy during symbol indexing to conserve memory. 2015-08-28 09:20:39 -07:00
Paul Kulchenko
dbf6098e84 Added turning jitting on when running under LuaJIT. 2015-08-23 15:39:06 -07:00
Paul Kulchenko
752b30166c Added Run to Cursor to the popup menu in the editor (#413). 2015-08-22 22:06:20 -07:00
Paul Kulchenko
443903b528 Fixed styling of comments that include markup inside markup (fixes #514). 2015-08-18 22:41:13 -07:00
Paul Kulchenko
fc408c794c Added showing memory usage stats in the status bar configured by showmemoryusage. 2015-08-13 22:27:41 -07:00
Paul Kulchenko
ddd5e41659 Disabled dragging out search results tab to avoid unexpected results (#416). 2015-08-12 15:45:44 -07:00
Paul Kulchenko
f63b140c14 Updated auto-complete to close when one of the options matches the current input. 2015-08-11 23:09:09 -07:00
Paul Kulchenko
f84424da44 Updated applying limit to the commandbar results to allow them to be resorted. 2015-08-10 15:50:32 -07:00
Paul Kulchenko
21a4e9862a Fixed updating symbols in new files that haven't been indexed yet (#499). 2015-08-10 15:50:00 -07:00
Paul Kulchenko
fc9bc61d9c Fixed opening empty files (fixes #510). 2015-08-09 22:32:59 -07:00
Paul Kulchenko
90fd18f8a0 Added skipping opening a file from symbol search when nothing is matched. 2015-08-09 22:27:26 -07:00
Paul Kulchenko
49335e62cf Merge branch 'project-symbol-search' 2015-08-09 20:10:29 -07:00
Paul Kulchenko
fd31261ec4 Fixed autocomplete for words that may include underscores in suggestions. 2015-08-09 19:59:58 -07:00
Paul Kulchenko
8c00238409 Added skipping directories during directory traversal (#499). 2015-08-09 19:55:28 -07:00
Paul Kulchenko
52389e9897 Updated status messages for better visibility on OSX during index refresh (#499). 2015-08-09 19:53:49 -07:00
Paul Kulchenko
23322f4e47 Added SetStatusFor package method to set temporary status (#166). 2015-08-09 19:51:06 -07:00
Paul Kulchenko
f22918b494 Added forcing immediate refresh of symbol index when requested from the menu (#499). 2015-08-08 17:49:08 -07:00
Paul Kulchenko
3ff35270fc Fixed crash on OSX during symbol indexing when filetree menu is open (#499). 2015-08-07 20:15:41 -07:00
Paul Kulchenko
45bb80e92e Updated tracking of editor updates to skip unneeded notifications on OSX (#499). 2015-08-07 16:48:03 -07:00
Paul Kulchenko
582c63b042 Fixed crash on Linux during symbol indexing when filetree menu is open (fixes #507). 2015-08-07 15:19:40 -07:00
Paul Kulchenko
53e2bfa06a Improved auto-complete suggestions for case-sensitive matches. 2015-08-06 22:14:00 -07:00
Paul Kulchenko
46e103dea3 Fixed duplicates between variables and dynamic words in auto-complete. 2015-08-06 21:58:46 -07:00
Paul Kulchenko
fb06395bf9 Fixed uncommenting of the last line in the selection to keep un/comment reversible (fixes #509). 2015-08-05 10:18:14 -07:00
Paul Kulchenko
110264beb8 Added onMenuOutput event (#166). 2015-08-03 13:52:22 -07:00
Paul Kulchenko
579005ae2e Added onMenuWatch event (#166). 2015-08-02 20:45:24 -07:00
Paul Kulchenko
bd208273bc Added disabling symbol indexing for directories/projects (#499). 2015-08-01 11:19:12 -07:00
Paul Kulchenko
a587857b2c Added refreshing of symbol index to the project menu (#499). 2015-07-31 10:22:36 -07:00
Paul Kulchenko
6b94ce24de Added reporting of the number of files queued for indexing (#499). 2015-07-30 10:29:49 -07:00
Paul Kulchenko
bbb7f6a423 Added reporting when indexing is completed (#499). 2015-07-30 10:29:22 -07:00
Paul Kulchenko
cc83b80022 Updated symbol refresh to do processing as soon as the path is known (#499). 2015-07-30 10:28:38 -07:00
Paul Kulchenko
069e9def30 Refactored file and editor symbol handling (#499). 2015-07-30 09:35:35 -07:00
Paul Kulchenko
6790cc4190 Added GetOutline package method (#166, #499). 2015-07-29 23:20:27 -07:00
Paul Kulchenko
5171a20852 Added exclusion to not report arg as global in static analysis (closes #503). 2015-07-28 14:15:25 -07:00
Paul Kulchenko
153a2d162b Added commandbar.width to set the width of command bar. 2015-07-27 22:17:26 -07:00
Paul Kulchenko
cc35ca76ff Added skipping symbol index queue when symbol inactivity is not set (#499). 2015-07-26 19:57:47 -07:00
Paul Kulchenko
7f7aa6383e Updated symbol index to skip unused elements in serialization (#499). 2015-07-25 23:41:10 -07:00
Paul Kulchenko
54ffda99c5 Upgraded Mobdebug (0.628) to include keyignore serializer option. 2015-07-25 23:39:35 -07:00
Paul Kulchenko
d0a1e792d6 Added setting different types of indentation guides. 2015-07-22 15:34:27 -07:00
Paul Kulchenko
cdc464b6cf Updated prefiltering to limit prefix to avoid penalty for long s.*s.*s... (#31). 2015-07-22 15:32:55 -07:00
Paul Kulchenko
62118654f7 Added optimization with prefiltering for short patterns (#31, #499). 2015-07-21 23:13:01 -07:00
Paul Kulchenko
a17080bde7 Updated package SetSettings method to allow passing of additional parameters (#166). 2015-07-20 14:51:52 -07:00
Paul Kulchenko
85e186bdd5 Added status message during index update (#499). 2015-07-19 09:20:47 -07:00
Paul Kulchenko
e6495beec7 Improved compactness of saved package settings (#166, #499). 2015-07-18 16:19:20 -07:00
Paul Kulchenko
69c4415452 Improved performance of saving symbol index data (#499). 2015-07-17 15:31:32 -07:00
Paul Kulchenko
076d08afc8 Optimized saving package settings (#166, #499). 2015-07-17 15:26:56 -07:00
Paul Kulchenko
785af96859 Added purging of outdated cache for symbol indexing (#499). 2015-07-16 17:07:18 -07:00
Paul Kulchenko
46b02faac7 Updated status of files indexing for symbol search (#499). 2015-07-16 16:32:17 -07:00
Paul Kulchenko
da8aed3f25 Added symbol processing of tabs that are not saved yet (#499). 2015-07-16 14:40:24 -07:00
Paul Kulchenko
fa79f3b501 Added indexing of project files (#499). 2015-07-16 13:54:44 -07:00
Paul Kulchenko
008c040171 Added commandbar.maxitems configuration setting (#499). 2015-07-16 10:37:24 -07:00
Paul Kulchenko
eb73e209b4 Updated DoWhenIdle handling to gracefully handle a long queue. 2015-07-16 10:36:25 -07:00
Paul Kulchenko
1ecb99420c Added caching of symbols for open files (#499). 2015-07-16 10:12:31 -07:00
Paul Kulchenko
ef82d423b6 Updated Go To Symbol to refresh files loaded in the preview (#499, #385). 2015-07-15 22:13:39 -07:00
Paul Kulchenko
69e9807990 Updated symbol search to only refresh outline when it's not populated (#385). 2015-07-15 16:33:32 -07:00
Paul Kulchenko
abd6560faf Added support for file.lua@symbol fuzzy search (#385). 2015-07-14 12:37:54 -07:00
Paul Kulchenko
74eecb999e Added symbol search in all open files (#385). 2015-07-14 12:37:53 -07:00
Paul Kulchenko
789078f86e Optimized UTF8 validation (thanks to Joergen von Bargen). 2015-07-14 10:13:46 -07:00
Paul Kulchenko
09f7a56fdd Added check to avoid loops in type assignment during auto-complete (#498). 2015-07-12 16:03:10 -07:00
Paul Kulchenko
3ffc6d1354 Fixed assignment parsing when the type value is re-assigned (#498). 2015-07-12 15:13:20 -07:00
Paul Kulchenko
69d2788bfd Added primitive handling of require in type assignments for known APIs (fixes #498). 2015-07-12 15:12:45 -07:00
Paul Kulchenko
b4656ca0f6 Updated search logic to avoid showing search results in recent files (#416). 2015-07-10 21:48:29 -07:00
Paul Kulchenko
813c8de968 Updated line number handling to adjust for large files (#491). 2015-07-09 12:42:48 -07:00
Paul Kulchenko
f5077b89a2 Fixed mouse selection in auto-complete on OSX (fixes #496). 2015-07-08 18:06:41 -07:00
Paul Kulchenko
aa40d7f7c3 Updated busted interpreter to check for proper extension on Windows (closes #495). 2015-07-07 10:54:02 -07:00
Paul Kulchenko
97e4d11dd2 Updated handling of binary and utf8 validness checks for large files (#491). 2015-07-07 10:52:56 -07:00
Paul Kulchenko
3816be8336 Fixed fuzzy file search to not double open already opened files (#31). 2015-07-06 16:26:38 -07:00
Paul Kulchenko
353c99a182 Upgraded Mobdebug (0.627) to improve debugging of code with overloaded string methods.
The upgrade also eliminated a need to overwrite `os.exit` in the controller.
2015-07-06 15:23:51 -07:00
Paul Kulchenko
b8ab9968f8 Improved memory usage when closing large files (#491). 2015-07-06 15:09:00 -07:00
Paul Kulchenko
1d8663942e Added support for aborting file reading callback (#491). 2015-07-05 19:20:49 -07:00
Paul Kulchenko
1b8dd87843 Added progress display when loading large files (#491). 2015-07-05 10:03:17 -07:00
Paul Kulchenko
0ce1700dfc Improved handling of large files (#491). 2015-07-04 22:42:58 -07:00
Paul Kulchenko
8167c67f35 Added status methods: GetStatus, PushStatus, and PopStatus (#166). 2015-07-04 22:18:06 -07:00
Paul Kulchenko
6e0a168230 Updated build scripts for Lua 5.3 to use 5.3.1. 2015-07-03 13:58:47 -07:00
Paul Kulchenko
91fcca962d Added onMenuOutline callback (#166, #337). 2015-07-02 15:10:53 -07:00
Paul Kulchenko
3e0d507a2a Added ability to toggle outline sorting from the local menu (#337, #494). 2015-07-02 15:09:25 -07:00
Paul Kulchenko
a864d5c889 Added activating Output panel after compilation errors. 2015-07-01 15:00:13 -07:00
Paul Kulchenko
dc0064ad70 Updated toolbar to show large icons by default on large screens. 2015-06-29 21:37:07 -07:00
Paul Kulchenko
8e893e3b9e Fixed indentation of lines that end with partial long strings with opening brackets (#324). 2015-06-28 14:14:52 -07:00
Paul Kulchenko
d7def66cf3 Fixed indentation of lines with long strings that include opening brackets (#324). 2015-06-28 14:14:14 -07:00
Paul Kulchenko
5adc17d7bb Refactored status updates to use SetStatus method. 2015-06-26 13:58:08 -07:00
Paul Kulchenko
bf82fd23e2 Replaced references to internal variables with method calls (#166). 2015-06-26 12:09:24 -07:00
Paul Kulchenko
41d29c3bc0 Updated package methods to use self reference as needed (#166). 2015-06-26 12:07:38 -07:00
Paul Kulchenko
1bd10f98c8 Added package SetStatus method (#166). 2015-06-26 11:53:40 -07:00
Paul Kulchenko
d302c35221 Updated message to reference package methods instead of obsolete ones. 2015-06-26 09:14:11 -07:00
Paul Kulchenko
d460b380c1 Added Ctrl/Cmd-Enter/Ctrl/Cmd-Shift-Enter to add line after/before the current one (#334). 2015-06-26 09:12:45 -07:00
Paul Kulchenko
9a2d98f7ca Added ignoring current selection in auto-complete with Shift-Enter (closes #494). 2015-06-26 09:11:13 -07:00
Paul Kulchenko
e5fa2afe3c Added hiding auto-complete after typing one of the offered options (#494). 2015-06-25 12:12:38 -07:00
Paul Kulchenko
5144e92e89 Added activating Output notebook to show search results if it's hidden (#416). 2015-06-23 16:14:47 -07:00
Paul Kulchenko
234f9b4aaa Added reporting of errors when unable to open file for static analysis. 2015-06-23 12:07:03 -07:00
Paul Kulchenko
6b06d0a190 Updated outline to only retrieve entry text when there are tokens to process (#337). 2015-06-22 11:50:57 -07:00
Paul Kulchenko
04d2ef8127 Added collapsing whitespaces in function parameters in the outline (#337). 2015-06-21 21:28:50 -07:00
Paul Kulchenko
3829792e68 Updated getting text length without requesting editor content. 2015-06-21 21:21:12 -07:00
Paul Kulchenko
3eeebd274b Added emphasis for the preference type in the config file template. 2015-06-21 21:01:07 -07:00
Paul Kulchenko
1f2b5d0bf2 Fixed indicators on table fields after variables that look like multiple assignments (#492). 2015-06-20 10:30:46 -07:00
Paul Kulchenko
d53463f14e Fixed indicators on table fields after variables (fixes #492). 2015-06-19 20:38:44 -07:00
Paul Kulchenko
edfab46685 Aded FileSize method as the default one returns non-zero result for non-existing files. 2015-06-17 21:33:20 -07:00
Paul Kulchenko
0050c7fedd Fixed variable usage based on static analysis. 2015-06-16 18:35:41 -07:00
Paul Kulchenko
eff9150f24 Added reporting of FileWrite failing to write the entire content. 2015-06-15 15:22:35 -07:00
Paul Kulchenko
807ad0f957 Switched to the bottom location for the search results by default (#416). 2015-06-14 20:52:20 -07:00
Paul Kulchenko
6142843f4b Fixed initial select-and-find search. 2015-06-14 20:48:49 -07:00
Paul Kulchenko
b4d1019e71 Updated showing function indicator handling to allow for easier enabling. 2015-06-14 20:38:36 -07:00
Paul Kulchenko
cc1f36af2f Updated indicator processing to use new API. 2015-06-13 16:34:32 -07:00
Paul Kulchenko
790493b6d1 Added package methods AddIndicator, GetIndicator, and RemoveIndicator (#166). 2015-06-13 16:30:56 -07:00
Paul Kulchenko
38c6cd28fa Fixed returning focus to the editor after find-in-files followed by page search (#416). 2015-06-11 20:59:03 -07:00
Paul Kulchenko
18d471be2c Updated ID references in toolbar to use the new access method. 2015-06-10 16:42:32 -07:00
Paul Kulchenko
feb7f53e2c Added missing Detach Process id to keymap (pkulchenko/MobDebug#19). 2015-06-10 09:13:24 -07:00
Paul Kulchenko
b7cd8aa30f Updated ID references in keymap to use the new access method. 2015-06-10 09:12:09 -07:00
Paul Kulchenko
1d02e3131d Updated Detach Process to allow access to it while the process is running.
Closes pkulchenko/MobDebug#19.
2015-06-10 09:08:27 -07:00
Paul Kulchenko
adcdb71894 Upgraded Mobdebug (0.624) to make DONE async and to add __tostring protection (closes #446). 2015-06-09 19:57:22 -07:00
Christoph Kubisch
2ee84a0c47 glslc, bugfix working dir must use full path 2015-06-07 22:23:50 +02:00
Paul Kulchenko
44219f008e Added a check for ini setting pointing to a path with a writeable directory (#483). 2015-06-06 09:37:20 -07:00
Paul Kulchenko
0ef9c297cb Added a check for ini setting pointing to a directory (#483). 2015-06-06 09:36:36 -07:00
Paul Kulchenko
b256912dee Added processing of ini setting relative to the IDE location (closes #483). 2015-06-05 16:31:30 -07:00
Paul Kulchenko
47c9f0a88f Fixed performance of initial fuzzy search for line numbers (closes #476). 2015-06-05 14:35:31 -07:00
Paul Kulchenko
164341bedf Added Watch view refresh after switching focus when needed. 2015-06-04 22:46:19 -07:00
Paul Kulchenko
dcf9ed7d26 Added Stack view refresh after switching focus when needed. 2015-06-04 22:33:27 -07:00
Paul Kulchenko
fa248c5be1 Updated metalua/static analyzer to accept long integer and imaginary numbers (closes #482). 2015-06-04 15:03:43 -07:00
Paul Kulchenko
fe5b1d8bf6 Updated internal parser to accept long integer, imaginary, and floating point hex numbers (#482). 2015-06-04 15:01:59 -07:00
Paul Kulchenko
e6ed7d7cc4 Updated internal parser to accept numbers that start with a period (#482). 2015-06-04 15:00:40 -07:00
Paul Kulchenko
c839beac25 Updated compilation and static analysis to keep output when running/debugging (#479). 2015-06-04 09:15:21 -07:00
Paul Kulchenko
67af8bb65f Enabled compilation during running/debugging (closes #479). 2015-06-03 22:03:06 -07:00
Paul Kulchenko
8350d3c609 Enabled static analysis during running/debugging (#479). 2015-06-03 22:02:44 -07:00
Paul Kulchenko
a8c6f3a0dc Optimized handling of multi-line changes in the editor (closes #477). 2015-06-03 21:59:39 -07:00
Paul Kulchenko
ead5a9d46a Added forced Refresh/Update to improve redrawing of commandbar on Windows 8. 2015-05-29 23:31:44 -07:00
Paul Kulchenko
0eadfdab00 Added a check for a window to be shown to avoid callback recursion on OSX (fixes #473). 2015-05-28 22:45:27 -07:00
Paul Kulchenko
b2deb54012 Added package IsWindowShown method (#166). 2015-05-28 22:40:06 -07:00
Paul Kulchenko
6bf310daae Added package onEditorPreClose event (#166, closes #461). 2015-05-28 14:18:16 -07:00
Paul Kulchenko
267fd50f24 Merge branch 'autocomplete' of https://github.com/IonoclastBrigham/ZeroBraneStudio into autocomplete-better-order 2015-05-28 09:29:47 -07:00
Brigham Toskin
d3c668f046 Revised: auto-complete results (amends #469, w/@pkulchenko patch) 2015-05-27 23:07:52 -07:00
Paul Kulchenko
5a149166f8 Updated build script on Windows to support compiling luasec for different versions. 2015-05-27 21:44:00 -07:00
Paul Kulchenko
6fe0f3a32c Updated build script on Windows to support compiling winapi for different versions. 2015-05-27 21:43:59 -07:00
Paul Kulchenko
33a129a416 Updated build script on Windows to use dot-versioned directories for dependencies. 2015-05-27 21:43:50 -07:00
Paul Kulchenko
bbaab90515 Fixed Output tab name when debugging aborted after run-time error. 2015-05-27 11:41:44 -07:00
Paul Kulchenko
c172289354 Removed forced garbage collection as it led to crashes on Linux (#425, closes #464).
The forced collection didn't have the expected effect and also caused
sporadic crashes on some Linux versions.
2015-05-27 10:41:15 -07:00
Paul Kulchenko
418631ee69 Updated Windows launcher to add dpi awareness for high dpi monitors. 2015-05-26 18:10:33 -07:00
Paul Kulchenko
7aa89ed23b Improved the order of results in auto-complete (closes #469). 2015-05-25 12:51:19 -07:00
Paul Kulchenko
87c4f5f89a Fixed issue with moving files in the tree caused by a61c9e26 (fixes #468). 2015-05-23 23:31:58 -07:00
Paul Kulchenko
48e8d33c1f Fixed recursive file traversal to skip directories when mask is specified. 2015-05-21 18:22:30 -07:00
Paul Kulchenko
fd3f86a54b Added deleting the rest of the word on auto-complete (acandtip.droprest). 2015-05-21 12:41:55 -07:00
Paul Kulchenko
7de970fd69 Added closing editor tab when renaming to an open file from the project tree. 2015-05-20 17:45:13 -07:00
Paul Kulchenko
e5d4045860 Added refresh of the target file after renaming from the project tree. 2015-05-20 17:43:46 -07:00
Paul Kulchenko
bcc81716ca Added a check for object with a focus (occasionally triggered on Linux). 2015-05-20 17:42:35 -07:00
Paul Kulchenko
a61c9e26be Added workaround to fix crash on Linux from the project tree (#425, #464).
This could happen when a new file is created in the project tree with the
same name as the existing file and then the application loses focus.

This cancels editing of the filename (END_LABEL_EDIT), which shows a dialog
to confirm overwriting of the existing file. When the dialog is shown,
another event that cancels editing is generated (but in wxwidgets 2.9.5?),
which causes two dialogs to be displayed, which leads to a crash after the
second one is closed.

The workaround moves the overwrite confirmation to the IDLE event.
2015-05-20 17:41:14 -07:00
Paul Kulchenko
346a5326a6 Added DoWhenIdle package method (#166). 2015-05-20 11:14:36 -07:00
Paul Kulchenko
b136a79bf3 Fixed crash in collectgarbage from the filetree on Linux (#425, #464).
This appears to be a wxwidgets (2.9.5) issue and can be reproduced
by doing the following:

- Start editing a new item in the file tree;
- Right click on the text control (while editing);
- This opens a context menu and triggers ACTIVATE_APP event;
- `collectgarbage` call from that event causes a crash.

Switching garbage collection to ACTIVATE_APP event when the app becomes
active eliminates the crash.
2015-05-19 22:44:40 -07:00
Paul Kulchenko
7a8027e827 Updated indentation after strings with brackets and escaped quotes (#324). 2015-05-17 19:59:45 -07:00
Paul Kulchenko
5c63257572 Updated AnalyzeString to add filename parameter (closes #463).
This can be used to provide a filename that would then load proper spec
for the file (to take known API descriptions into account).
2015-05-16 12:01:49 -07:00
Paul Kulchenko
2969ef4e5b Updated documentation for 1.10. 2015-05-13 20:55:02 -07:00
Paul Kulchenko
2d711fb2a5 Updated copyright year. 2015-05-13 20:54:41 -07:00
Paul Kulchenko
7fdeeaab0a Updated translations for several search panel messages (#416). 2015-05-13 20:32:10 -07:00
Paul Kulchenko
39df53117e Added reporting mismatch on invalid line numbers in replace preview (#416). 2015-05-13 10:39:06 -07:00
Paul Kulchenko
04c66f735d Fixed replace in preview to only replaced matched text (#416). 2015-05-13 09:29:39 -07:00
Paul Kulchenko
38068bfa54 Fixed restoring editor focus after closing search preview on OSX/Linux (#416). 2015-05-12 21:57:04 -07:00
Paul Kulchenko
66367489f0 Fixed replace-in-files from search results preview (#416). 2015-05-12 21:56:26 -07:00
Paul Kulchenko
42f7a2647b Fixed keeping editor cursor position after closing search panel (#416). 2015-05-12 20:08:46 -07:00
Paul Kulchenko
6658f7e68e Updated command bar to handle losing focus and not restore position (#31). 2015-05-12 19:04:26 -07:00
Paul Kulchenko
9def534470 Added folds in the search results even when disabled in the editor (#416). 2015-05-12 13:42:47 -07:00
Paul Kulchenko
a06f865151 Updated the order of search preview margin changes to hide line numbers (#416). 2015-05-12 13:12:11 -07:00
Paul Kulchenko
aafa56c074 Updated Linux .desktop to limit associations to Lua files. 2015-05-12 10:21:00 -07:00
Paul Kulchenko
d94f2b6c06 Added expanding folded/hidden lines when updating search results (#416).
This avoid the issue when the last line stays hidden after folding all
lines in the search result tab and refreshing the results.
2015-05-11 23:16:04 -07:00
Paul Kulchenko
5a626ed1cd Added check for valid editor when closing search panel (#416). 2015-05-11 22:53:09 -07:00
Paul Kulchenko
f277d12854 Switched to using wxFileSize instead of Length (fixes #458).
`wx.wxFile(...):Length()` reports 0 as the length for those files that
have 0 blocks allocated. Some file systems (for example, GPFS) may use
0 blocks, which causes the files not being read as `Length()` method
returns incorrect file length. `wxFileSize` reads the size from the file
system, which is what is needed in this case.
2015-05-11 12:03:48 -07:00
Paul Kulchenko
06783b77ce Added closing search results with Close Page for consistency (#416).
Search results can be closed with a shortcut when shown as an editor tab,
but not when shown in the Output notebook. Added closing them there as well
for consistency.
2015-05-10 21:51:08 -07:00
Paul Kulchenko
66233e04e7 Updated search results tab name (#416). 2015-05-10 21:50:36 -07:00
Paul Kulchenko
9391253fe7 Updated showing new search results if the searched text is different (#416). 2015-05-10 17:41:32 -07:00
Paul Kulchenko
a7938bb06c Added setting focus back to the editor after hiding search panel (#416). 2015-05-10 17:28:48 -07:00
Paul Kulchenko
d3c6a5c832 Added option to show search results in multipe tabs (#416). 2015-05-10 17:13:24 -07:00
Paul Kulchenko
4c571e5c75 Added package IsValidCtrl method (#166). 2015-05-09 15:24:31 -07:00
Paul Kulchenko
e56af247a3 Updated event documentation. 2015-05-08 21:50:23 -07:00
Paul Kulchenko
7894b9200c Allowed for larger default size of docked panels (#424). 2015-05-05 10:57:07 -07:00
Paul Kulchenko
d0e693e35b Added skipping binary files in commandbar (#31, #455). 2015-05-04 17:20:12 -07:00
Paul Kulchenko
4c7a09e531 Added handling of ** in exclusion masks (#455). 2015-05-04 17:18:14 -07:00
Paul Kulchenko
ba61f9106c Added excludelist/binarylist to exclude files and folders (closes #455). 2015-05-04 17:09:46 -07:00
Paul Kulchenko
0184accc29 Added search.autohide option to hide search panel after search (#416). 2015-05-04 13:07:32 -07:00
Paul Kulchenko
7c5a3204f9 Updated setting focus on the editor after cancelled search (#416). 2015-05-04 13:06:28 -07:00
Paul Kulchenko
a313071f90 Added setting cursor at the end of the search results preview (#416). 2015-05-04 13:02:44 -07:00
Paul Kulchenko
3d4823f595 Upgraded Mobdebug (0.62) to add vararg processing. 2015-05-03 21:51:50 -07:00
Paul Kulchenko
3363bac1e7 Removed option to request attention from breakpoint activation (#449, closes #454). 2015-05-01 17:45:07 -07:00
Paul Kulchenko
2fe197ea13 Updated build files to use release version of Lua 5.3 (#453). 2015-04-30 21:23:40 -07:00
Paul Kulchenko
57f3631687 Added debugger.requestattention to configure focus switch (closes #449). 2015-04-28 10:35:30 -07:00
Paul Kulchenko
eb2288bdd4 Added closing search panel on Escape in the editor (closes #450, #416).
This also fixes an issue with `Escape` in full-screen mode disabling full
screen instead of closing a tooltip or an auto-complete popup first.
2015-04-28 10:28:38 -07:00
Paul Kulchenko
140fdcb101 Fixed crash on Windows by disabling events in Outline refresh (fixes #442). 2015-04-27 10:34:38 -07:00
Paul Kulchenko
0a5f3f2ed8 Updated search to keep focus when preview shown at the bottom (#416). 2015-04-25 22:00:00 -07:00
Paul Kulchenko
ca47551edb Added search.zoom setting to zoom search results (#416). 2015-04-25 21:59:59 -07:00
Paul Kulchenko
119c53f3b2 Updated constant values for consistency. 2015-04-25 21:59:58 -07:00
Paul Kulchenko
646db05c55 Added folding in the preview when shown at the bottom (#416). 2015-04-25 21:59:57 -07:00
Paul Kulchenko
931006ffa3 Reorganized folding to allow more editor-like components to be foldable. 2015-04-25 21:59:55 -07:00
Paul Kulchenko
f2f99fe90d Allowed saving search preview when shown at the bottom of the screen (#416). 2015-04-25 21:59:38 -07:00
Paul Kulchenko
4621b1a295 Refactored getting editor with focus to remove hardcoded components (#416). 2015-04-25 15:23:12 -07:00
Paul Kulchenko
9cb8d2ef4d Added option to show search results at the bottom of the screen (#416). 2015-04-25 12:12:32 -07:00
Paul Kulchenko
5f7f6e3c1a Moved cancelling auto-complete popup to idle event (fixed #447).
This looks like wxwidgets/Scintilla issue as cancelling auto-complete from
MODIFIED event after pasting and deleting text caused a crash.
2015-04-25 00:13:49 -07:00
Paul Kulchenko
535b597104 Fixed file traversing not to match foo.bar! for `*.bar' mask (#416). 2015-04-24 12:58:19 -07:00
Paul Kulchenko
6228089962 Fixed Find Previous using obsolete method call (fixes #445, #416). 2015-04-24 09:31:55 -07:00
Paul Kulchenko
ee35d4bf8a Added status message when search is cancelled by closing results tab (#416). 2015-04-23 09:50:49 -07:00
Paul Kulchenko
354951203d Reorganized recent scopes menu and added Clear Items (#416). 2015-04-23 09:37:27 -07:00
Paul Kulchenko
6fe7b317bd Updated binary check to keep track of extensions in file search (#416). 2015-04-22 21:59:46 -07:00
Paul Kulchenko
63cdef5285 Refactored binary check for file search and commandbar. 2015-04-22 21:52:35 -07:00
Paul Kulchenko
bb6c8cfd67 Fixed binary check in file search for files without extension (#416). 2015-04-22 21:43:23 -07:00
Paul Kulchenko
e0807829c3 Disabled refresh when outlineinactivity=nil and showonefile=true (#337). 2015-04-21 23:01:02 -07:00
Paul Kulchenko
68b7272403 Updated Corona interpreter to allow debugging on Linux using Wine. 2015-04-20 21:36:53 -07:00
Paul Kulchenko
382da09901 Added warning when interpreter can't be loaded and the default one is used. 2015-04-20 21:36:42 -07:00
Paul Kulchenko
b9722459c1 Optimized Go To File file traversal in commandbar (#31). 2015-04-19 21:46:38 -07:00
Paul Kulchenko
fe8d54ec2d Refactored traversal in file search to return matches when found (#416). 2015-04-18 15:30:00 -07:00
Paul Kulchenko
e24ee26ed3 Updated folder traversing logic to limit number of open folders (fixes #441). 2015-04-17 13:11:31 -07:00
Paul Kulchenko
6c20164125 Fixed showing of not translated messages that require pluralization. 2015-04-16 21:29:56 -07:00
Paul Kulchenko
6596d3ad61 Updated variables based on static analysis. 2015-04-15 20:52:41 -07:00
Paul Kulchenko
06d63407e5 Fixed watch update and error reporting broken by 460fb617. 2015-04-15 19:25:14 -07:00
Paul Kulchenko
da29d5ccf8 Fixed enabling hidden extensions broken by 01ef6648. 2015-04-15 19:07:47 -07:00
Paul Kulchenko
fd0b2c1f11 Added setting read-only status on find-in-files results (#416). 2015-04-14 15:09:29 -07:00
Paul Kulchenko
a28ce0f536 Fixed ReplaceAll button on find-in-files toolbar (#416). 2015-04-14 12:06:35 -07:00
Paul Kulchenko
accd8565af Fixed switching focus when toolbar is used in find-in-files (#416). 2015-04-14 10:55:30 -07:00
Paul Kulchenko
330b02c955 Fixed pluralization for Replaced N instances. (#416). 2015-04-14 10:16:56 -07:00
Paul Kulchenko
da5a8d41bf Added error reporting after failure to open a file in find-in-files (#416). 2015-04-14 09:48:19 -07:00
Paul Kulchenko
52b6438159 Merge branch 'search-redesign' (closes #416, closes #438).
Conflicts:
	cfg/i18n/de.lua
2015-04-13 22:18:10 -07:00
Paul Kulchenko
cc1de06909 Fixed keeping position in find/replace after FindNext/Prev on Linux (#416). 2015-04-13 22:09:38 -07:00
Paul Kulchenko
e58a5ff4d9 Set focus back to search controls on Linux after find-in-files (#416). 2015-04-13 19:26:21 -07:00
Paul Kulchenko
c92f2dc477 Added support for wxImage used in imagemap (#436). 2015-04-12 20:35:06 -07:00
Paul Kulchenko
b8f5b935f2 Added icon tint processing (imagetint option). 2015-04-11 23:06:15 -07:00
Paul Kulchenko
eec36411ad Updated settings merge to allow adding new ones (#416). 2015-04-10 15:01:30 -07:00
Paul Kulchenko
460fb61766 Added copying of watch values to use when the value is too long to be shown. 2015-04-09 22:13:23 -07:00
Paul Kulchenko
a4b70dce82 Added package CopyToClipboard method (#166). 2015-04-09 21:37:03 -07:00
Paul Kulchenko
cc6db36420 Updated find/replace activation to always use selected fragment (#416). 2015-04-09 21:22:45 -07:00
Paul Kulchenko
a75bdfc3cb Fixed Save and SaveAll 'enabled' status for search results (#416). 2015-04-08 22:38:16 -07:00
Paul Kulchenko
fca8a760f5 Disabled replacing when search results are not modified (#416). 2015-04-07 22:33:02 -07:00
Paul Kulchenko
6bd7be2389 Added proper pluralization for search results messages (#416). 2015-04-07 22:25:48 -07:00
Paul Kulchenko
34d29a5a11 Added message when search is cancelled by the user (#416). 2015-04-07 22:13:36 -07:00
Paul Kulchenko
bcc454e2c2 Added skipping prompt to save search results when not modified (#416). 2015-04-07 21:40:55 -07:00
Paul Kulchenko
7911a949ad Removed warnings from loose parser to stop polluting stderr on Linux (#425). 2015-04-07 09:16:49 -07:00
David Feng
99cfb5d5d3 fix broken symbolic link 2015-04-07 23:30:27 +08:00
Robert Machmer
237b641a39 Update Readme.md to use correct name for the LOVE framework 2015-04-06 09:38:18 +02:00
Paul Kulchenko
d69504de05 Updated Linux build scripts to add debug option. 2015-04-05 15:10:27 -07:00
Paul Kulchenko
03a21b3bf4 Fixed an empty popup (that could lead to a crash) when dynamic words is on. 2015-04-04 20:18:42 -07:00
Robert Machmer
c8d923204d Updated love2d interpreter to use proper engine name/description (closes #433). 2015-04-02 21:39:50 -07:00
Paul Kulchenko
21845d5179 Updated german translation (#432, #70). 2015-04-02 21:20:40 -07:00
Paul Kulchenko
bd949f2522 Updated love2d APU for v0.9.2 (#247). 2015-04-02 11:55:20 -07:00
Robert Machmer
0aebf69193 Update german translation
Picked a better translation for "refresh" and fixed a small typo in the
translation of "remote console".
2015-04-02 15:39:48 +02:00
Paul Kulchenko
e843f1a3a0 Added auto-complete for the find-in-files fields (#416). 2015-04-01 21:13:47 -07:00
Paul Kulchenko
1731dbbbea Updated search tests to use GetFlags method (#416). 2015-04-01 20:34:06 -07:00
Paul Kulchenko
b608145590 Added selecting last used scope when switching projects (#416). 2015-04-01 20:25:27 -07:00
Paul Kulchenko
74de23cf5d Fixed file traversal for multiple masks broken by 4f3b8596 (#416). 2015-04-01 20:25:13 -07:00
Paul Kulchenko
49747a0e5c Added search.contextlinesbefore/search.contextlinesafter settings (#416). 2015-04-01 17:48:11 -07:00
Paul Kulchenko
268dbfc437 Added search.autocomplete setting do configure search autocomplete (#416). 2015-04-01 17:32:56 -07:00
Paul Kulchenko
b4e03627d9 Fixed commandbar positioning on Linux affected by 5b665477 (#31). 2015-04-01 16:23:00 -07:00
Paul Kulchenko
d12a050c7a Added auto-complete for find and replace fields (#416). 2015-04-01 14:20:58 -07:00
Paul Kulchenko
4da95789b5 Improved incremental processing to avoid marking table fields as variables. 2015-04-01 12:15:03 -07:00
Paul Kulchenko
9c53d95554 Fixed loose parser to handle multiple assignments (fixes #430).
The issue is partially caused by changes to improve incremental processing
(comit 7a33783a).
2015-04-01 12:06:39 -07:00
Paul Kulchenko
4c8a42c1c9 Added saving search settings between restarts (#416). 2015-03-31 22:10:24 -07:00
Paul Kulchenko
786fa303f9 Added deleting of protected text in Cut/Paste operations (closes #412). 2015-03-31 21:19:32 -07:00
Paul Kulchenko
8b69d2897a Removed hardcoded references to menu positions to simplify adding new items. 2015-03-31 21:11:04 -07:00
Paul Kulchenko
f030d16ded Added restoring cursor position after failed incremental search (#416). 2015-03-31 15:22:29 -07:00
Paul Kulchenko
edce5fa76c Added reporting of searched for text (#416). 2015-03-31 15:18:31 -07:00
Paul Kulchenko
48a04113b9 Updated Select and Find to capture selection for subsequent use (#416). 2015-03-31 14:54:37 -07:00
Derek.Bailey
229460983e Added refresh context menu item to update the contents of the tree 2015-03-31 11:35:18 -07:00
Paul Kulchenko
c383889d05 Fixed editor activation after dragging of inactive tab (fixes #427). 2015-03-30 10:24:46 -07:00
Paul Kulchenko
ade62dcdc0 Fixed indentation after comment with markdown markup (closes #428, #324). 2015-03-30 10:14:43 -07:00
Paul Kulchenko
e57eaf7f6b Updated Find Next/Prev to continue search using the current find text (#416). 2015-03-29 19:15:25 -07:00
Paul Kulchenko
cbcef4c720 Excluded breaks ('..*') from context in search results (#416). 2015-03-28 23:12:53 -07:00
Paul Kulchenko
e9104c16a0 Fixed Find Next/Prev without using search panel first (#416). 2015-03-28 22:34:21 -07:00
Paul Kulchenko
983942405c Improved Set to project directory logic in search scope (#416). 2015-03-28 21:47:34 -07:00
Paul Kulchenko
634a7af8cd Added ignoring assignment in comments for auto-complete. 2015-03-28 20:16:41 -07:00
Paul Kulchenko
993171cc92 Fixed auto-complete issue causing looping warning (#143). 2015-03-28 20:15:59 -07:00
Paul Kulchenko
5b665477fa Fix commandbar position with split editor tabs (#31). 2015-03-28 18:49:00 -07:00
Paul Kulchenko
7ce454ab5b Removed replace message when results preview is generated (#416). 2015-03-28 15:47:00 -07:00
Paul Kulchenko
1b331765a4 Added hint on how to dismiss search panel (#416). 2015-03-28 13:20:07 -07:00
Paul Kulchenko
929e77f9fd Disabled dclick in search results over the margin (#416). 2015-03-27 15:58:36 -07:00
Paul Kulchenko
ad1e4e98b9 Fixed selection after dclick in search results on Linux (#416). 2015-03-27 13:27:46 -07:00
Paul Kulchenko
b935ab305f Fixed activation in search results after dclick at the line end (#416). 2015-03-27 13:27:35 -07:00
Paul Kulchenko
74998e6057 Added updating search scope when switching projects (#416). 2015-03-26 14:23:10 -07:00
Paul Kulchenko
f655805bbb Added pre-filtering of files to improve search performance (#416). 2015-03-26 13:09:02 -07:00
Paul Kulchenko
5a96117b3d Removed scrolling during search/replace to improve performance (#416). 2015-03-26 12:48:12 -07:00
Paul Kulchenko
9b7b220a3d Improved logic to skip binary files during search (#416). 2015-03-26 12:15:16 -07:00
Paul Kulchenko
4f3b8596f2 Improved file traversal to speed up search by pre-filtering masks (#416). 2015-03-25 21:53:22 -07:00
Paul Kulchenko
e12e2653db Removed saving .bak files as it's replaced by replace-in-files preview (#416). 2015-03-24 22:19:51 -07:00
Paul Kulchenko
3660b2e40e Added auto-scrolling of the search results (#416). 2015-03-24 22:14:44 -07:00
Paul Kulchenko
109d71e4f3 Added preview screen to check changes in replace-in-files (#416). 2015-03-24 22:01:39 -07:00
Paul Kulchenko
17c33e51cc Moved winapi dll to clibs folder to avoid conflict with other winapi versions. 2015-03-24 17:57:05 -07:00
Paul Kulchenko
307ef3a66f Removed file marker in search results replaced by fold indicators (#416). 2015-03-23 22:53:44 -07:00
Paul Kulchenko
5f2c266cc1 Added folding in the search results (#416). 2015-03-23 22:48:51 -07:00
Paul Kulchenko
3f7539d31f Replaced bookmark on search results with a different marker (#416). 2015-03-23 18:02:28 -07:00
Paul Kulchenko
15f04c16de Updated editor tab for search results to use default functionality (#416). 2015-03-23 17:32:02 -07:00
Paul Kulchenko
163b738c73 Added search toolbar button to set/unset context in search results (#416). 2015-03-23 17:02:00 -07:00
Paul Kulchenko
33b55b29e4 Fixed re-indenting of selection with comments at the top of the file (#324). 2015-03-23 10:23:52 -07:00
Paul Kulchenko
25cc70bee5 Updated to use shorter function from Scintilla API (#416). 2015-03-23 10:21:26 -07:00
Paul Kulchenko
9fb7bd8750 Added reporting number of instances and files in search results (#416). 2015-03-22 23:13:27 -07:00
Paul Kulchenko
e5199a8618 Fixed one pixel defect on the search panel (#416). 2015-03-22 21:21:23 -07:00
Paul Kulchenko
cd4fe6a60e Fixed instance counter broken by showing results in a tab (#416). 2015-03-22 19:17:23 -07:00
Paul Kulchenko
091d2d7e59 Allowed closing Search Results tab while search is in progress (#416). 2015-03-22 19:05:03 -07:00
Paul Kulchenko
a2ab4bc18f Added indicator for matches in the search results (#416). 2015-03-22 18:16:19 -07:00
Paul Kulchenko
d41e3621a8 Fixed an issue with exiting while searching (#416). 2015-03-22 14:35:20 -07:00
Paul Kulchenko
155483f40f Added showing search results in an editor tab (#416). 2015-03-21 22:07:57 -07:00
Paul Kulchenko
a8168e41f7 Updated search tests (#416). 2015-03-20 17:52:03 -07:00
Paul Kulchenko
fad303be9a Improved escaping in find-in-files search mask (#416). 2015-03-20 15:51:11 -07:00
Paul Kulchenko
2f22d74e21 Fixed find-in-files results when regular expressions are used (#416). 2015-03-20 15:51:00 -07:00
Paul Kulchenko
d2ddc96a2b Updated unfolding of folded lines before delete or overwrite.
This helps to avoid a situation when a header of the collapsed fold is
deleted, which (confusingly) leaves some lines hidded. This change is an
improvement to the commit 717d46a3 that did partial unfolding.
2015-03-20 11:50:07 -07:00
Paul Kulchenko
755941098e Updated folding to collapse only when clicked on the header. 2015-03-20 11:15:24 -07:00
Paul Kulchenko
d28a6f66e0 Updated order of search component creation to reduce flicker (#416). 2015-03-19 21:01:31 -07:00
Paul Kulchenko
2406863437 Updated scope search background to match the toolbar color (#416). 2015-03-19 15:04:36 -07:00
Paul Kulchenko
ac067f2b5a Added hint for the replace field in search (#416). 2015-03-19 14:44:09 -07:00
Paul Kulchenko
31d123edbc Excluded all toolbars from color scheme processing (#416). 2015-03-19 14:43:37 -07:00
Paul Kulchenko
5eb7a78f1a Added a message on replacing in read-only text (#416). 2015-03-19 11:15:41 -07:00
Paul Kulchenko
bfbda999c0 Updated usage of self in the search logic (#416). 2015-03-19 11:07:27 -07:00
Paul Kulchenko
01ca5acb99 Added a message on wrapping around during search (#416). 2015-03-19 10:45:11 -07:00
Paul Kulchenko
b4cd30eb6b Updated search panel to search all files with empty scope (#416). 2015-03-19 10:05:32 -07:00
Paul Kulchenko
e1235cf14d Updated search panel to only set scope when the field is empty (#416). 2015-03-19 09:55:47 -07:00
Paul Kulchenko
0c9feecb21 Reorganized scope menu in the search panel to add setting directory (#416). 2015-03-19 09:37:04 -07:00
Paul Kulchenko
2b3dacfa76 Added number of instances replaced to the search status (#416). 2015-03-18 21:14:01 -07:00
Paul Kulchenko
419692b3dc Fixed flicker of the scope component in the search window (#416). 2015-03-18 21:10:24 -07:00
Paul Kulchenko
895b92b7b7 Updated translations to match messages in the search panel (#416). 2015-03-18 18:14:47 -07:00
Paul Kulchenko
6850220b9c Updated handling of translated messages to include toolbar labels (#416). 2015-03-18 17:46:23 -07:00
Paul Kulchenko
d75a7a3adb Added selection of text in search fields when tabbed into (#416). 2015-03-18 16:54:13 -07:00
Paul Kulchenko
5da7a6aeec Added copying current selection to the search panel when activated (#416). 2015-03-18 16:36:16 -07:00
Paul Kulchenko
4f00ec2aa8 Redesigned the search panel (closes #416; closes #398).
Updated for a single set of buttons in the search dialog (#416).
Updated search panel to stay docked under the editor (#416).
Removed 'search' tab from the panel (#416).
Added border for the search panel (#416).
Update search panel components to match the editor styles (#416).
Reorganized search panel to minimize redrawings (#416).
Updated search panel positioning to dock correctly (#416).
Disable shaking on failed search as it doesn't work on OSX/Linux (#416).
Moved scope dropdown to a better location (#416).
Moved status label with search results to the search toolbar (#416).
Added search in Output/Console panels (#416).
Added button to set directory for find-in-files (#416).
Reorganized toolbar creation to customize different search modes (#416).
Added taborder handling in search panel (#416).
Added `Shift-Esc` to close and move to the original position (#416).
Changed combobox to textctrl as wxComboBox doesn't handle `Tab`/`Esc` on OSX (#416).
Fixed refresh of the scope dropdown (#416).
Renamed controls for consistency with other names (#416).
Fixed scope processing to work with directory and masks (#416).
Updated find/replace borders (#416).
Replaced combobox with a text control and a dropdown (#416).
Allowed having only masks in the search scope (#416).
Added search from the scope field (#416).
Reorganized position of the scope field in the search (#416).
Disabled search when find-in-file is already in progress (#416).
2015-03-18 16:34:56 -07:00
Paul Kulchenko
b56d1096be Updated config samples to use ID.code instead of obsolete G.ID_code. 2015-03-16 21:05:19 -07:00
Paul Kulchenko
dc9d19f521 Fixed restoring pane size after hide/show operations (fixes #424). 2015-03-15 16:43:19 -07:00
Paul Kulchenko
41041733c4 Updated documentation for 1.00. 2015-03-13 18:09:48 -07:00
Paul Kulchenko
16257035ca Updated encoding in the image LICENSE file. 2015-03-11 17:48:13 -07:00
Paul Kulchenko
4fde42e919 Disabled field checks for local parameters in staic analyzer (closes #421). 2015-03-10 11:51:12 -07:00
Paul Kulchenko
d08ac51fee Updated Corona API for v2015.2576. 2015-03-10 09:23:00 -07:00
Paul Kulchenko
1116365a43 Removed unused variables. 2015-03-08 21:41:12 -07:00
Paul Kulchenko
9c05c8e31a Improved static analyzer to handle more cases with infervalue set (#414).
This fixes handling of `tostring(foo):rep(1)` and `(false or {}).bar()`.
2015-03-07 23:12:00 -08:00
Paul Kulchenko
3ce020c0e3 Added staticanalyzer.infervalue to enable deeper/slower analysis (#414). 2015-03-06 14:51:50 -08:00
Paul Kulchenko
27ea52e5bd Updated static analyzer output formatting. 2015-03-06 12:40:54 -08:00
Paul Kulchenko
cc598490fa Updated analyzer to also check value of pairs parameter (#414). 2015-03-06 12:08:50 -08:00
Paul Kulchenko
b361a0b6a5 Fixed analyzer to check value of ipairs parameter (fixes #414).
This takes the actual type into account instead of reporting an unknown
field.
2015-03-05 22:20:43 -08:00
Paul Kulchenko
2b4c5eafc8 Updated debugging suspended message to not trigger with runonstart.
This is to address the changes caused by 89751b43.
2015-03-04 21:53:14 -08:00
Paul Kulchenko
e910f945b5 Fixed OS detection on Linux that sets DYLD_LIBRARY_PATH (fixes #417). 2015-03-03 21:57:27 -08:00
Paul Kulchenko
7a838227c7 Fixed saving auto-recovery record with no editor tabs opened (fixes #418). 2015-03-03 21:29:16 -08:00
Paul Kulchenko
d86582ebc6 Added project path in the error reporting for love2d/corona interpreters. 2015-03-03 19:23:54 -08:00
Paul Kulchenko
d8d1fc6f67 Updated messages in interpreters to fix line endings. 2015-03-01 19:18:04 -08:00
Paul Kulchenko
0ee46ba55f Added an example with enabling Emacs bindings in the editor. 2015-02-26 09:47:27 -08:00
Paul Kulchenko
e179a63b8c Refactored use of image constants in the project tree. 2015-02-25 15:37:31 -08:00
Paul Kulchenko
0018964637 Disabled menu item for renaming/editing for mapped directories (#223). 2015-02-25 15:30:53 -08:00
Paul Kulchenko
7010d51bc7 Added Russian translations for new messages (#70). 2015-02-25 12:42:58 -08:00
Paul Kulchenko
7b09399ede Updated lettercase in menu items for consistency. 2015-02-24 22:05:12 -08:00
Paul Kulchenko
a36e746d45 Added a warning on class resolution taking too much time in auto-complete. 2015-02-23 22:23:21 -08:00
Paul Kulchenko
f7ec693b03 Fixed looping in auto-complete when processing recursive assignments. 2015-02-22 21:23:08 -08:00
Paul Kulchenko
056dd6dedf Added check for empty/comment lines when breakpoints are set. 2015-02-21 13:35:32 -08:00
Paul Kulchenko
1c8b0d1101 Removing .mailmap as it didn't help link pre-2011 commits on github. 2015-02-20 16:00:56 -08:00
Paul Kulchenko
bc5d2eed97 Updated CHANGELOG with recent changes. 2015-02-19 19:19:44 -08:00
Paul Kulchenko
35692e3f00 Added directory mapping to the project tree (closes #223). 2015-02-18 13:27:33 -08:00
Paul Kulchenko
bb06087881 Removed obsolete event handler. 2015-02-17 20:50:35 -08:00
Paul Kulchenko
9442292c0f Updated UpdateUI handling to fix multi-view refresh, as in DocumentMap (#352). 2015-02-16 20:18:12 -08:00
Paul Kulchenko
b1eba7ff3c Added Run to Cursor (closes #413). 2015-02-16 16:12:31 -08:00
Paul Kulchenko
d69a3724ac Fixed filename used in the recovery message. 2015-02-15 21:49:35 -08:00
Paul Kulchenko
353fa0dff5 Fixed typo in a comment. 2015-02-15 21:48:59 -08:00
Paul Kulchenko
af241fffe7 Refactored document modification tracking to remove SetDocumentModified. 2015-02-15 21:48:15 -08:00
Paul Kulchenko
227db9a10f Updated Outline to use editor tab text (instead of a file name).
This is to improve integration with packages that modify tab text,
like `uniquetabname` plugin.

Closes pkulchenko/ZeroBranePackage#11.
2015-02-14 21:36:15 -08:00
Paul Kulchenko
2cf79f22a8 Added document method GetTabText (#166). 2015-02-14 21:29:11 -08:00
Paul Kulchenko
798a31a64f Updated message on failure to start debugging to add the file name. 2015-02-13 21:30:55 -08:00
Paul Kulchenko
59a90c7030 Fixed Output/Console window to stay shown after failure to start debugging. 2015-02-13 21:29:48 -08:00
Paul Kulchenko
ee1a4a5752 Added showing love2d console when requested. 2015-02-11 11:13:17 -08:00
Paul Kulchenko
01ef664895 Added support to set/unset start file for a project (closes #411). 2015-02-09 12:21:22 -08:00
Paul Kulchenko
2f339302d1 Updated debugging suspended message to put location in quotes. 2015-02-09 11:53:13 -08:00
Paul Kulchenko
aaf7723014 Added requesting attention for debugger even when the file is not activated. 2015-02-09 11:48:09 -08:00
Paul Kulchenko
89751b430d Added reporting of location in more cases when debugging is suspended. 2015-02-09 11:46:19 -08:00
Paul Kulchenko
b9de69d4e9 Added starting debugging even when the file is not opened in the IDE. 2015-02-08 17:49:25 -08:00
Paul Kulchenko
b4c7d6deaa Fixed auto-complete for non-default acandtip.strategy values (fixed #409). 2015-02-08 16:05:10 -08:00
Paul Kulchenko
71667d2912 Fixed loading file with absolute name and line number (fixes #408).
This was broken by the change in 2ee9599 that was made to avoid delay when
relative filename with a line number looked like a network path (Windows).
2015-02-06 10:03:23 -08:00
Paul Kulchenko
fa704f5e2c Merge branch 'master' of http://git.code.sf.net/p/estrelaeditor/code 2015-02-05 18:27:53 -08:00
Paul Kulchenko
967a7fb8ad Added switching project directory from the command bar (#31). 2015-02-05 12:25:34 -08:00
Paul Kulchenko
3e7fb7f8b8 Added trimming of trailing spaces in the directory name when switching projects. 2015-02-05 12:24:25 -08:00
Paul Kulchenko
3e0abc6953 Added closing preview if the file failed to load in commandbar (#31). 2015-02-05 11:31:21 -08:00
Paul Kulchenko
216a1e5350 Refactored path normalization for project directory. 2015-02-05 11:11:30 -08:00
Paul Kulchenko
ea3c98c65f Added handling of Ctrl/Cmd-Enter in commandbar to force open file (#31). 2015-02-04 11:36:44 -08:00
Paul Kulchenko
fb1c754532 Added skipping loading files with empty and directory names. 2015-02-04 11:30:02 -08:00
Paul Kulchenko
3585de0f21 Updated tests to use current API. 2015-02-04 11:29:20 -08:00
Paul Kulchenko
3bd4fc0305 Updated line check in command bar to not trigger on Windows file names. 2015-02-04 11:08:13 -08:00
Paul Kulchenko
0e355074cd Added trimming of trailing spaces in the file name when loading a file. 2015-02-04 11:06:33 -08:00
Paul Kulchenko
7e6249ef3f Added file selection in the project tree after saving a new file. 2015-02-03 20:59:59 -08:00
Paul Kulchenko
af2a000af1 Added opening/creating file from the command bar (#31). 2015-02-03 20:31:52 -08:00
Paul Kulchenko
1a9efa6e5b Fixed an issue with search initiated from Output/Console panels (fixes #406). 2015-02-02 15:33:58 -08:00
Christoph Kubisch
dd97978d56 updated glewgl api (glew 1.12.0) 2015-02-01 18:33:20 +01:00
113 changed files with 7600 additions and 2958 deletions

View File

@@ -1,9 +0,0 @@
#
# This list is used by git-shortlog to fix a few botched name translations
# in the git archive, either because the author's full name was messed up
# and/or not always written the same way, making contributions from the
# same person appearing not to be so.
#
Christoph Kubisch <pixeljetstream@luxinia.de> <crazybutcher@d4a214e2-3791-4833-b182-d171351aa34e>
Eike Decker <zet23t@googlemail.com> <zet23t@d4a214e2-3791-4833-b182-d171351aa34e>

View File

@@ -1,5 +1,370 @@
# ZeroBrane Studio Changelog
## v1.20 (Oct 08 2015)
### Highlights
- Added symbol indexing of project files for project-wide search.
- Added support for `file@symbol` fuzzy search (#385).
- Added processing of `ini` setting relative to the IDE location (#483).
- Improved memory handling for large files.
- Improved application performance and memory usage.
- Improved auto-complete order of results and suggestions for case-sensitive matches.
- Updated Windows launcher to add dpi awareness for high dpi monitors.
- Upgraded Lua 5.3 interpreter to 5.3.1.
- Fixed a memory leak after a search panel is opened.
- Fixed an occasional crash from the filetree on Linux (#425, #464).
- Fixed recursive file traversal to skip directories when mask is specified.
### Special thanks
- To [riidom](https://github.com/riidom) for German translation update.
- To [Yonaba](https://github.com/Yonaba/) for French translation update.
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glslc updates.
- To Brigham Toskin for auto-complete improvements.
- To Joergen von Bargen for optimized UTF8 validation.
- To Nick Smith for Marmalade interpreter updates.
### Improvements
- Added handling of translation messages that require pluralization (#70).
- Added check for non-zero file size before reporting load progress (#530).
- Added switching interpreters by clicking on the interpreter label in the status bar.
- Added handling of editor commands (Copy/Paste/SelectAll/Undo/Redo) in search panel controls.
- Added position to the end-of-file lexer token (closes #529).
- Added reporting when a file can't be removed from a project tree.
- Added explicit initialization for `editor.autoactivate` default setting.
- Added allowing `editor.saveallonrun` with `infervalue` static analyzer (closes #524).
- Added support for `include` command in config files.
- Added document `Close` method (#166).
- Added descriptions for new Lua 5.3 `math.*` and `coroutine.*` functions.
- Added functions new to Lua 5.3 to the list of keywords.
- Added reporting of deserialization failures for saved package data.
- Added collapsing white spaces from names shown in the Outline.
- Added workaround for a memory leak in wxlua after a search panel is opened.
- Added jumping to the current function in the outline (#515).
- Added highlighting current functions for better visibility (#515).
- Added skipping unneded fields from the symbol index to reduce memory usage (#515).
- Added showing position of the current function in the Outline (closes #515).
- Added explicit editor destroy during find and replace to conserve memory.
- Added explicit editor destroy during symbol indexing to conserve memory.
- Added turning jitting on when running under LuaJIT.
- Added `Run to Cursor` to the popup menu in the editor (#413).
- Added showing memory usage stats in the status bar configured by `showmemoryusage`.
- Added skipping opening a file from symbol search when nothing is matched.
- Added skipping directories during directory traversal (#499).
- Added `SetStatusFor` package method to set temporary status (#166).
- Added forcing immediate refresh of symbol index when requested from the menu (#499).
- Added `onMenuOutput` event (#166).
- Added `onMenuWatch` event (#166).
- Added disabling symbol indexing for directories/projects (#499).
- Added refreshing of symbol index to the project menu (#499).
- Added reporting of the number of files queued for indexing (#499).
- Added reporting when indexing is completed (#499).
- Added `GetOutline` package method (#166, #499).
- Added exclusion to not report `arg` as global in static analysis (closes #503).
- Added `commandbar.width` to set the width of command bar.
- Added skipping symbol index queue when symbol inactivity is not set (#499).
- Added setting different types of indentation guides.
- Added optimization with prefiltering for short patterns (#31, #499).
- Added status message during index update (#499).
- Added purging of outdated cache for symbol indexing (#499).
- Added symbol processing of tabs that are not saved yet (#499).
- Added indexing of project files (#499).
- Added `commandbar.maxitems` configuration setting (#499).
- Added caching of symbols for open files (#499).
- Added support for `file.lua@symbol` fuzzy search (#385).
- Added symbol search in all open files (#385).
- Added check to avoid loops in type assignment during auto-complete (#498).
- Added primitive handling of `require` in type assignments for known APIs (fixes #498).
- Added support for aborting file reading callback (#491).
- Added progress display when loading large files (#491).
- Added status methods: `GetStatus`, `PushStatus`, and `PopStatus` (#166).
- Added `onMenuOutline` callback (#166, #337).
- Added ability to toggle outline sorting from the local menu (#337, #494).
- Added activating Output panel after compilation errors.
- Added package `SetStatus` method (#166).
- Added `Ctrl/Cmd-Enter`/`Ctrl/Cmd-Shift-Enter` to add line after/before the current one (#334).
- Added ignoring current selection in auto-complete with `Shift-Enter` (closes #494).
- Added hiding auto-complete after typing one of the offered options (#494).
- Added activating Output notebook to show search results if it's hidden (#416).
- Added reporting of errors when unable to open file for static analysis.
- Added collapsing whitespaces in function parameters in the outline (#337).
- Added emphasis for the preference type in the config file template.
- Added `FileSize` method as the default one returns non-zero result for non-existing files.
- Added reporting of `FileWrite` failing to write the entire content.
- Added package methods `AddIndicator`, `GetIndicator`, and `RemoveIndicator` (#166).
- Added missing `Detach Process` id to keymap (pkulchenko/MobDebug#19).
- Added a check for `ini` setting pointing to a path with a writeable directory (#483).
- Added a check for `ini` setting pointing to a directory (#483).
- Added processing of `ini` setting relative to the IDE location (closes #483).
- Added Watch view refresh after switching focus when needed.
- Added Stack view refresh after switching focus when needed.
- Added forced `Refresh`/`Update` to improve redrawing of commandbar on Windows 8.
- Added a check for a window to be shown to avoid callback recursion on OSX (fixes #473).
- Added package `IsWindowShown` method (#166).
- Added package `onEditorPreClose` event (#166, closes #461).
- Added deleting the rest of the word on auto-complete (`acandtip.droprest`).
- Added closing editor tab when renaming to an open file from the project tree.
- Added refresh of the target file after renaming from the project tree.
- Added a check for object with a focus (occasionally triggered on Linux).
- Added workaround to fix crash on Linux from the project tree (#425, #464).
- Added `DoWhenIdle` package method (#166).
- Disabled unhiding one of wxwidgets windows that is only used for message passing (Windows).
- Disabled initial highlight when showing current function disabled in the outline (#515).
- Disabled dragging out search results tab to avoid unexpected results (#416).
- Enabled compilation during running/debugging (closes #479).
- Enabled static analysis during running/debugging (#479).
- Integrate ZeroBrane with Marmalade's Hub GUI
- Improved auto-complete suggestions for case-sensitive matches.
- Improved compactness of saved package settings (#166, #499).
- Improved performance of saving symbol index data (#499).
- Improved memory usage when closing large files (#491).
- Improved handling of large files (#491).
- Improved the order of results in auto-complete (closes #469).
- glslc tool: add menu option for pre-process mode
- Optimized saving package settings (#166, #499).
- Optimized UTF8 validation (thanks to Joergen von Bargen).
- Optimized handling of multi-line changes in the editor (closes #477).
- Removed forced garbage collection as it led to crashes on Linux (#425, closes #464).
- Revised: auto-complete results (amends #469, w/@pkulchenko patch)
- Switched to the bottom location for the search results by default (#416).
- Updated italian translations (thanks to Leo Bartoloni)
- Updated Russian translation (#70).
- Update de.lua (thanks to riidom)
- Updated french translation as of commit (thanks to Yonaba)
- Updated translation files for new messages (#70).
- Updated translation logic to accept empty tables for pluralization values (#70).
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
- Updated OSX launcher to keep `DYLD_LIBRARY_PATH` if already set.
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
- Update marmalade API definition to 7.9
- Updated static analyzer (luainspect) to take globals in 'required' files into account (#520).
- Updated static analyzer to refresh cache of 'required' modules (#520).
- Updated C/cpp spec to skip `if(...)` from the list of functions.
- Updated C/cpp spec to properly handle functions at the beginning of a file.
- Updated package data serialization to use simpler dumper for faster processing.
- Updated saving symbol index to be called less frequently (#499).
- Updated list of fields to skip from saved symbol index (#499).
- Updated Run/Debug to not force saving new tabs when `Start` file is set.
- Updated interpreter handling to allow setting of default value in the config (closes #518).
- Updated highlighting of the current function in the Outline to select one item (#515).
- Updated auto-complete to close when one of the options matches the current input.
- Updated applying limit to the commandbar results to allow them to be resorted.
- Updated status messages for better visibility on OSX during index refresh (#499).
- Updated tracking of editor updates to skip unneeded notifications on OSX (#499).
- Updated symbol refresh to do processing as soon as the path is known (#499).
- Updated symbol index to skip unused elements in serialization (#499).
- Updated prefiltering to limit prefix to avoid penalty for long `s.*s.*s...` (#31).
- Updated package `SetSettings` method to allow passing of additional parameters (#166).
- Updated status of files indexing for symbol search (#499).
- Updated `DoWhenIdle` handling to gracefully handle a long queue.
- Updated `Go To Symbol` to refresh files loaded in the preview (#499, #385).
- Updated symbol search to only refresh outline when it's not populated (#385).
- Updated search logic to avoid showing search results in recent files (#416).
- Updated line number handling to adjust for large files (#491).
- Updated `busted` interpreter to check for proper extension on Windows (closes #495).
- Updated handling of binary and utf8 validness checks for large files (#491).
- Updated build scripts for Lua 5.3 to use 5.3.1.
- Updated toolbar to show large icons by default on large screens.
- Updated outline to only retrieve entry text when there are tokens to process (#337).
- Updated getting text length without requesting editor content.
- Updated showing function indicator handling to allow for easier enabling.
- Updated indicator processing to use new API.
- Updated ID references in toolbar to use the new access method.
- Updated ID references in keymap to use the new access method.
- Updated `Detach Process` to allow access to it while the process is running.
- Updated metalua/static analyzer to accept long integer and imaginary numbers (closes #482).
- Updated internal parser to accept long integer, imaginary, and floating point hex numbers (#482).
- Updated internal parser to accept numbers that start with a period (#482).
- Updated compilation and static analysis to keep output when running/debugging (#479).
- Updated indentation after strings with brackets and escaped quotes (#324).
- Updated `AnalyzeString` to add filename parameter (closes #463).
- Updated Windows launcher to add dpi awareness for high dpi monitors.
- Upgraded Lua 5.3 interpreter to 5.3.1 on Linux (x86 and x64).
- Upgraded Lua 5.3 interpreter to 5.3.1 on OSX.
- Upgraded Lua 5.3 interpreter to 5.3.1 on Windows (closes #453, closes #460).
- Upgraded Mobdebug (0.628) to include `keyignore` serializer option.
- Upgraded Mobdebug (0.627) to improve debugging of code with overloaded `string` methods.
- Upgraded Mobdebug (0.624) to make `DONE` async and to add `__tostring` protection (closes #446).
### Fixes
- Fixed text search and fuzzy symbol search in symlinks (#458, #530).
- Fixed opening only one tab for external debugging of dynamic code on Linux (closes #526).
- Fix live picking up debug vs release binaries (Marmalade)
- Fixed highlighting for those specs that don't have information on where functions end (#515).
- Fixed highlighting the current function when anonymous functions are hidden (#515).
- Fixed styling of comments that include markup inside markup (fixes #514).
- Fixed updating symbols in new files that haven't been indexed yet (#499).
- Fixed opening empty files (fixes #510).
- Fixed autocomplete for words that may include underscores in suggestions.
- Fixed crash on OSX during symbol indexing when filetree menu is open (#499).
- Fixed crash on Linux during symbol indexing when filetree menu is open (fixes #507).
- Fixed duplicates between variables and dynamic words in auto-complete.
- Fixed uncommenting of the last line in the selection to keep un/comment reversible (fixes #509).
- Fixed assignment parsing when the type value is re-assigned (#498).
- Fixed mouse selection in auto-complete on OSX (fixes #496).
- Fixed fuzzy file search to not double open already opened files (#31).
- Fixed indentation of lines that end with partial long strings with opening brackets (#324).
- Fixed indentation of lines with long strings that include opening brackets (#324).
- Fixed indicators on table fields after variables that look like multiple assignments (#492).
- Fixed indicators on table fields after variables (fixes #492).
- Fixed variable usage based on static analysis.
- Fixed initial select-and-find search.
- Fixed returning focus to the editor after find-in-files followed by page search (#416).
- Fixed performance of initial fuzzy search for line numbers (closes #476).
- Fixed Output tab name when debugging aborted after run-time error.
- Fixed recursive file traversal to skip directories when mask is specified.
- Fixed crash in `collectgarbage` from the filetree on Linux (#425, #464).
## v1.10 (May 13 2015)
### Highlights
- Redesigned search functionality; added incremental search and replace-in-files preview.
- Updated love2d API for v0.9.2.
- Upgraded Mobdebug (0.62) to add vararg processing.
- Added `excludelist`/`binarylist` to exclude files and folders.
- Added skipping binary files during find-in-files and fuzzy search.
### Special thanks
- To [David Feng](https://github.com/DavidFeng) for fixing a broken symbolic link.
- To [Robert Machmer](https://github.com/rm-code) for updated German translation and fixes for love2d engine name/description.
- To [Derek Bailey](https://github.com/dbaileychess) for adding context menu item to update the contents of the tree.
### Improvements
- Added closing search results with `Close Page` for consistency (#416).
- Added option to show search results in multipe tabs (#416).
- Added package `IsValidCtrl` method (#166).
- Added skipping binary files in commandbar (#31, #455).
- Added handling of `**` in exclusion masks (#455).
- Added `excludelist`/`binarylist` to exclude files and folders (closes #455).
- Added `search.autohide` option to hide search panel after search (#416).
- Added `debugger.requestattention` to configure focus switch (closes #449).
- Added closing search panel on `Escape` in the editor (closes #450, #416).
- Added `search.zoom` setting to zoom search results (#416).
- Added warning when interpreter can't be loaded and the default one is used.
- Added support for `wxImage` used in `imagemap` (#436).
- Added icon tint processing (`imagetint` option).
- Added `search.contextlinesbefore`/`search.contextlinesafter` settings (#416).
- Added `search.autocomplete` setting do configure search autocomplete (#416).
- Added auto-complete for find and replace fields (#416).
- Added saving search settings between restarts (#416).
- Added deleting of protected text in Cut/Paste operations (closes #412).
- Added refresh context menu item to update the contents of the tree (thanks to Derek Bailey).
- Added ignoring assignment in comments for auto-complete.
- Added preview screen to check changes in replace-in-files (#416).
- Added search toolbar button to set/unset context in search results (#416).
- Allowed for larger default size of docked panels (#424).
- Allowed closing `Search Results` tab while search is in progress (#416).
- Disabled refresh when `outlineinactivity=nil` and `showonefile=true` (#337).
- Improved incremental processing to avoid marking table fields as variables.
- Improved logic to skip binary files during search (#416).
- Moved cancelling auto-complete popup to idle event (fixed #447).
- Moved winapi dll to `clibs` folder to avoid conflict with other winapi versions.
- Optimized `Go To File` file traversal in commandbar (#31).
- Redesigned the search panel (closes #416; closes #398).
- Removed option to request attention from breakpoint activation (#449, closes #454).
- Removed warnings from loose parser to stop polluting stderr on Linux (#425).
- Removed hardcoded references to menu positions to simplify adding new items.
- Removed saving .bak files as it's replaced by replace-in-files preview (#416).
- Reorganized folding to allow more editor-like components to be foldable.
- Switched to using `wxFileSize` instead of `Length` (fixes #458).
- Updated event documentation.
- Upgraded Mobdebug (0.62) to add vararg processing.
- Updated build files to use release version of Lua 5.3 (#453).
- Updated Corona interpreter to allow debugging on Linux using Wine.
- Updated folder traversing logic to limit number of open folders (fixes #441).
- Update Readme.md to use correct name for the LOVE framework (thanks to Robert Machmer).
- Updated Linux build scripts to add `debug` option.
- Updated love2d interpreter to use proper engine name/description (closes #433) (thanks to Robert Machmer).
- Updated german translation (#432, #70).
- Updated love2d APU for v0.9.2 (#247).
- Update german translation (thanks to Robert Machmer).
- Updated `Select and Find` to capture selection for subsequent use (#416).
- Updated `Find Next/Prev` to continue search using the current find text (#416).
- Updated unfolding of folded lines before delete or overwrite.
- Updated folding to collapse only when clicked on the header.
- Updated config samples to use `ID.code` instead of obsolete `G.ID_code`.
### Fixes
- Fixed crash on Windows by disabling events in Outline refresh (fixes #442).
- Fixed file traversing not to match `foo.bar!` for `*.bar' mask (#416).
- Fixed showing of not translated messages that require pluralization.
- fix broken symbolic link (thanks to David Feng).
- Fixed an empty popup (that could lead to a crash) when dynamic words is on.
- Fixed commandbar positioning on Linux affected by 5b665477 (#31).
- Fixed loose parser to handle multiple assignments (fixes #430).
- Fixed editor activation after dragging of inactive tab (fixes #427).
- Fixed indentation after comment with markdown markup (closes #428, #324).
- Fixed auto-complete issue causing looping warning (#143).
- Fix commandbar position with split editor tabs (#31).
- Fixed re-indenting of selection with comments at the top of the file (#324).
- Fixed restoring pane size after hide/show operations (fixes #424).
### Incompatibilities
- Removed saving .bak files as it's replaced by replace-in-files preview.
## v1.00 (Mar 13 2015)
### Highlights
- Added directory mapping to the project tree (closes #223).
- Added `Run to Cursor` (closes #413).
- Added support to set/unset start file for a project (closes #411).
- Added opening/creating file from the command bar (#31).
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
- Updated Corona API for v2015.2576.
### Improvements
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
- Added project path in the error reporting for love2d/corona interpreters.
- Added an example with enabling Emacs bindings in the editor.
- Added Russian translations for new messages (#70).
- Added a warning on class resolution taking too much time in auto-complete.
- Added check for empty/comment lines when breakpoints are set.
- Added directory mapping to the project tree (closes #223).
- Added `Run to Cursor` (closes #413).
- Added document method `GetTabText` (#166).
- Added showing love2d console when requested.
- Added support to set/unset start file for a project (closes #411).
- Added requesting attention for debugger even when the file is not activated.
- Added reporting of location in more cases when debugging is suspended.
- Added starting debugging even when the file is not opened in the IDE.
- Added switching project directory from the command bar (#31).
- Added trimming of trailing spaces in the directory name when switching projects.
- Added closing preview if the file failed to load in commandbar (#31).
- Added handling of `Ctrl/Cmd-Enter` in commandbar to force open file (#31).
- Added skipping loading files with empty and directory names.
- Added trimming of trailing spaces in the file name when loading a file.
- Added file selection in the project tree after saving a new file.
- Added opening/creating file from the command bar (#31).
- Disabled menu item for renaming/editing for mapped directories (#223).
- Disabled field checks for local parameters in staic analyzer (closes #421).
- Improved static analyzer to handle more cases with `infervalue` set (#414).
- Refactored use of image constants in the project tree.
- Refactored document modification tracking to remove `SetDocumentModified`.
- Refactored path normalization for project directory.
- Updated Corona API for v2015.2576.
- Updated static analyzer output formatting.
- Updated analyzer to also check value of `pairs` parameter (#414).
- Updated `debugging suspended` message to not trigger with `runonstart`.
- Updated messages in interpreters to fix line endings.
- Updated lettercase in menu items for consistency.
- Updated UpdateUI handling to fix multi-view refresh, as in DocumentMap (#352).
- Updated Outline to use editor tab text (instead of a file name).
- Updated message on failure to start debugging to add the file name.
- Updated `debugging suspended` message to put location in quotes.
- Updated line check in command bar to not trigger on Windows file names.
- updated glewgl api (glew 1.12.0)
### Fixes
- Fixed analyzer to check value of `ipairs` parameter (fixes #414).
- Fixed OS detection on Linux that sets `DYLD_LIBRARY_PATH` (fixes #417).
- Fixed saving auto-recovery record with no editor tabs opened (fixes #418).
- Fixed looping in auto-complete when processing recursive assignments.
- Fixed filename used in the recovery message.
- Fixed Output/Console window to stay shown after failure to start debugging.
- Fixed an issue with search initiated from Output/Console panels (fixes #406).
- Fixed auto-complete for non-default `acandtip.strategy` values (fixed #409).
- Fixed loading file with absolute name and line number (fixes #408).
## v0.95 (Jan 30 2015)
### Highlights

View File

@@ -7,7 +7,7 @@ and debugging support for several Lua engines
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging),
[Lua 5.3](http://studio.zerobrane.com/doc-lua53-debugging),
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging),
[Löve 2D](http://notebook.kulchenko.com/zerobrane/love2d-debugging),
[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),
@@ -36,7 +36,7 @@ for [Lua 5.1](http://studio.zerobrane.com/doc-lua-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),

View File

@@ -243,6 +243,12 @@ return {
args = "(...)",
returns = "()",
},
isyieldable = {
type = "function",
description = "Returns true when the running coroutine can yield. A running coroutine is yieldable if it is not the main thread and it is not inside a non-yieldable C function.\nFUNCTION ADDED IN Lua 5.3.",
args = "()",
returns = "(boolean)",
},
},
},
@@ -617,6 +623,14 @@ return {
type = "value",
description = "The value of pi.",
},
mininteger = {
type = "value",
description = "An integer with the minimum value for an integer.\nVALUE ADDED IN Lua 5.3.",
},
maxinteger = {
type = "value",
description = "An integer with the maximum value for an integer.\nVALUE ADDED IN Lua 5.3.",
},
pow = {
type = "function",
description = "Returns x^y.\n(You can also use the expression x^y to compute this value.)",
@@ -671,6 +685,24 @@ return {
args = "(x: number)",
returns = "(number)",
},
type = {
type = "function",
description = [[Returns "integer" if x is an integer, "float" if it is a float, or nil if x is not a number.\nFUNCTION ADDED IN Lua 5.3.]],
args = "(x: number)",
returns = "(string)",
},
tointeger = {
type = "function",
description = "If the value x is convertible to an integer, returns that integer. Otherwise, returns nil.\nFUNCTION ADDED IN Lua 5.3.",
args = "(x: number)",
returns = "(number)",
},
ult = {
type = "function",
description = "Returns a boolean, true if integer m is below integer n when they are compared as unsigned integers.\nFUNCTION ADDED IN Lua 5.3.",
args = "(m: number, n: number)",
returns = "(boolean)",
},
},
},

File diff suppressed because it is too large Load Diff

View File

@@ -1082,6 +1082,8 @@ GL_COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C,
GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D,
GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E,
GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F,
GL_COPY_READ_BUFFER_BINDING = 0x8F36,
GL_COPY_WRITE_BUFFER_BINDING = 0x8F37,
GL_NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9,
GL_VERTEX_ATTRIB_ARRAY_LONG = 0x874E,
GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x8221,
@@ -1811,7 +1813,7 @@ GL_ALREADY_SIGNALED = 0x911A,
GL_TIMEOUT_EXPIRED = 0x911B,
GL_CONDITION_SATISFIED = 0x911C,
GL_WAIT_FAILED = 0x911D,
GL_TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF,
//GL_TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF,
GL_PATCHES = 0xE,
GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0,
GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1,
@@ -2119,6 +2121,8 @@ GL_HSL_HUE_KHR = 0x92AD,
GL_HSL_SATURATION_KHR = 0x92AE,
GL_HSL_COLOR_KHR = 0x92AF,
GL_HSL_LUMINOSITY_KHR = 0x92B0,
GL_CONTEXT_RELEASE_BEHAVIOR = 0x82FB,
GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC,
GL_CONTEXT_FLAG_DEBUG_BIT = 0x00000002,
//GL_STACK_OVERFLOW = 0x0503,
//GL_STACK_UNDERFLOW = 0x0504,
@@ -2276,6 +2280,10 @@ GL_MINUS_CLAMPED_NV = 0x92B3,
GL_INVERT_OVG_NV = 0x92B4,
GL_COMPUTE_PROGRAM_NV = 0x90FB,
GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV = 0x90FC,
GL_CONSERVATIVE_RASTERIZATION_NV = 0x9346,
GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV = 0x9347,
GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV = 0x9348,
GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV = 0x9349,
GL_DEPTH_STENCIL_TO_RGBA_NV = 0x886E,
GL_DEPTH_STENCIL_TO_BGRA_NV = 0x886F,
GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV = 0x90D0,
@@ -2317,6 +2325,7 @@ GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV = 0x8E58,
GL_ALL_COMPLETED_NV = 0x84F2,
GL_FENCE_STATUS_NV = 0x84F3,
GL_FENCE_CONDITION_NV = 0x84F4,
GL_FILL_RECTANGLE_NV = 0x933C,
GL_FLOAT_R_NV = 0x8880,
GL_FLOAT_RG_NV = 0x8881,
GL_FLOAT_RGB_NV = 0x8882,
@@ -2335,6 +2344,8 @@ GL_FLOAT_RGBA_MODE_NV = 0x888E,
GL_FOG_DISTANCE_MODE_NV = 0x855A,
GL_EYE_RADIAL_NV = 0x855B,
GL_EYE_PLANE_ABSOLUTE_NV = 0x855C,
GL_FRAGMENT_COVERAGE_TO_COLOR_NV = 0x92DD,
GL_FRAGMENT_COVERAGE_COLOR_NV = 0x92DE,
GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = 0x8868,
GL_FRAGMENT_PROGRAM_NV = 0x8870,
GL_FRAGMENT_PROGRAM_BINDING_NV = 0x8873,
@@ -2344,6 +2355,20 @@ GL_MAX_PROGRAM_CALL_DEPTH_NV = 0x88F5,
GL_MAX_PROGRAM_IF_DEPTH_NV = 0x88F6,
GL_MAX_PROGRAM_LOOP_DEPTH_NV = 0x88F7,
GL_MAX_PROGRAM_LOOP_COUNT_NV = 0x88F8,
//GL_COLOR_SAMPLES_NV = 0x8E20,
//GL_RASTER_MULTISAMPLE_EXT = 0x9327,
//GL_RASTER_SAMPLES_EXT = 0x9328,
//GL_MAX_RASTER_SAMPLES_EXT = 0x9329,
//GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT = 0x932A,
//GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT = 0x932B,
//GL_EFFECTIVE_RASTER_SAMPLES_EXT = 0x932C,
//GL_DEPTH_SAMPLES_NV = 0x932D,
//GL_STENCIL_SAMPLES_NV = 0x932E,
//GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV = 0x932F,
//GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV = 0x9330,
//GL_COVERAGE_MODULATION_TABLE_NV = 0x9331,
//GL_COVERAGE_MODULATION_NV = 0x9332,
//GL_COVERAGE_MODULATION_TABLE_SIZE_NV = 0x9333,
GL_RENDERBUFFER_COVERAGE_SAMPLES_NV = 0x8CAB,
GL_RENDERBUFFER_COLOR_SAMPLES_NV = 0x8E10,
GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV = 0x8E11,
@@ -2387,9 +2412,13 @@ GL_FLOAT16_NV = 0x8FF8,
GL_FLOAT16_VEC2_NV = 0x8FF9,
GL_FLOAT16_VEC3_NV = 0x8FFA,
GL_FLOAT16_VEC4_NV = 0x8FFB,
GL_MULTISAMPLES_NV = 0x9371,
GL_SUPERSAMPLE_SCALE_X_NV = 0x9372,
GL_SUPERSAMPLE_SCALE_Y_NV = 0x9373,
GL_CONFORMANT_NV = 0x9374,
GL_MAX_SHININESS_NV = 0x8504,
GL_MAX_SPOT_EXPONENT_NV = 0x8505,
GL_COLOR_SAMPLES_NV = 0x8E20,
//GL_COLOR_SAMPLES_NV = 0x8E20,
GL_MULTISAMPLE_FILTER_HINT_NV = 0x8534,
GL_PIXEL_COUNTER_BITS_NV = 0x8864,
GL_CURRENT_OCCLUSION_QUERY_ID_NV = 0x8865,
@@ -2432,19 +2461,31 @@ GL_LARGE_CCW_ARC_TO_NV = 0x16,
GL_RELATIVE_LARGE_CCW_ARC_TO_NV = 0x17,
GL_LARGE_CW_ARC_TO_NV = 0x18,
GL_RELATIVE_LARGE_CW_ARC_TO_NV = 0x19,
GL_CONIC_CURVE_TO_NV = 0x1A,
GL_RELATIVE_CONIC_CURVE_TO_NV = 0x1B,
GL_GLYPH_VERTICAL_BEARING_X_BIT_NV = 0x20,
GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV = 0x40,
GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV = 0x80,
GL_ROUNDED_RECT_NV = 0xE8,
GL_RELATIVE_ROUNDED_RECT_NV = 0xE9,
GL_ROUNDED_RECT2_NV = 0xEA,
GL_RELATIVE_ROUNDED_RECT2_NV = 0xEB,
GL_ROUNDED_RECT4_NV = 0xEC,
GL_RELATIVE_ROUNDED_RECT4_NV = 0xED,
GL_ROUNDED_RECT8_NV = 0xEE,
GL_RELATIVE_ROUNDED_RECT8_NV = 0xEF,
GL_RESTART_PATH_NV = 0xF0,
GL_DUP_FIRST_CUBIC_CURVE_TO_NV = 0xF2,
GL_DUP_LAST_CUBIC_CURVE_TO_NV = 0xF4,
GL_RECT_NV = 0xF6,
GL_RELATIVE_RECT_NV = 0xF7,
GL_CIRCULAR_CCW_ARC_TO_NV = 0xF8,
GL_CIRCULAR_CW_ARC_TO_NV = 0xFA,
GL_CIRCULAR_TANGENT_ARC_TO_NV = 0xFC,
GL_ARC_TO_NV = 0xFE,
GL_RELATIVE_ARC_TO_NV = 0xFF,
GL_GLYPH_HAS_KERNING_BIT_NV = 0x100,
GL_SECONDARY_COLOR_NV = 0x852D,
//GL_PRIMARY_COLOR = 0x8577,
GL_PATH_FORMAT_SVG_NV = 0x9070,
GL_PATH_FORMAT_PS_NV = 0x9071,
@@ -2467,6 +2508,7 @@ GL_PATH_FILL_MASK_NV = 0x9081,
GL_PATH_FILL_COVER_MODE_NV = 0x9082,
GL_PATH_STROKE_COVER_MODE_NV = 0x9083,
GL_PATH_STROKE_MASK_NV = 0x9084,
GL_PATH_STROKE_BOUND_NV = 0x9086,
GL_COUNT_UP_NV = 0x9088,
GL_COUNT_DOWN_NV = 0x9089,
GL_PATH_OBJECT_BOUNDING_BOX_NV = 0x908A,
@@ -2515,6 +2557,12 @@ GL_PATH_STENCIL_VALUE_MASK_NV = 0x90B9,
GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV = 0x90BD,
GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV = 0x90BE,
GL_PATH_COVER_DEPTH_FUNC_NV = 0x90BF,
GL_FONT_GLYPHS_AVAILABLE_NV = 0x9368,
GL_FONT_TARGET_UNAVAILABLE_NV = 0x9369,
GL_FONT_UNAVAILABLE_NV = 0x936A,
GL_FONT_UNINTELLIGIBLE_NV = 0x936B,
GL_STANDARD_FONT_FORMAT_NV = 0x936C,
GL_FRAGMENT_INPUT_NV = 0x936D,
GL_FONT_X_MIN_BOUNDS_BIT_NV = 0x00010000,
GL_FONT_Y_MIN_BOUNDS_BIT_NV = 0x00020000,
GL_FONT_X_MAX_BOUNDS_BIT_NV = 0x00040000,
@@ -2528,6 +2576,8 @@ GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV = 0x02000000,
GL_FONT_UNDERLINE_POSITION_BIT_NV = 0x04000000,
GL_FONT_UNDERLINE_THICKNESS_BIT_NV = 0x08000000,
GL_FONT_HAS_KERNING_BIT_NV = 0x10000000,
GL_FONT_NUM_GLYPH_INDICES_BIT_NV = 0x20000000,
GL_SHARED_EDGE_NV = 0xC0,
GL_WRITE_PIXEL_DATA_RANGE_NV = 0x8878,
GL_READ_PIXEL_DATA_RANGE_NV = 0x8879,
GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = 0x887A,
@@ -2551,7 +2601,7 @@ GL_VARIABLE_F_NV = 0x8528,
GL_VARIABLE_G_NV = 0x8529,
GL_CONSTANT_COLOR0_NV = 0x852A,
GL_CONSTANT_COLOR1_NV = 0x852B,
GL_SECONDARY_COLOR_NV = 0x852D,
//GL_SECONDARY_COLOR_NV = 0x852D,
GL_SPARE0_NV = 0x852E,
GL_SPARE1_NV = 0x852F,
GL_DISCARD_NV = 0x8530,
@@ -2592,6 +2642,14 @@ GL_COMBINER5_NV = 0x8555,
GL_COMBINER6_NV = 0x8556,
GL_COMBINER7_NV = 0x8557,
GL_PER_STAGE_CONSTANTS_NV = 0x8535,
GL_SAMPLE_LOCATION_NV = 0x8E50,
GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV = 0x933D,
GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV = 0x933E,
GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV = 0x933F,
GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV = 0x9340,
GL_PROGRAMMABLE_SAMPLE_LOCATION_NV = 0x9341,
GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV = 0x9342,
GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV = 0x9343,
GL_BUFFER_GPU_ADDRESS_NV = 0x8F1D,
GL_GPU_ADDRESS_NV = 0x8F34,
GL_MAX_SHADER_BUFFER_ADDRESS_NV = 0x8F35,
@@ -3517,6 +3575,7 @@ extern void glBlendEquationi(GLuint buf, GLenum mode);
extern void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
extern void glBlendFunci(GLuint buf, GLenum src, GLenum dst);
extern void glMinSampleShading(GLclampf value);
extern GLenum glGetGraphicsResetStatus(void);
extern void glDebugMessageEnableAMD(GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
extern void glBlendEquationIndexedAMD(GLuint buf, GLenum mode);
extern void glBlendEquationSeparateIndexedAMD(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
@@ -3620,6 +3679,10 @@ extern void glGetNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr s
extern void glGetNamedFramebufferAttachmentParameteriv(GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params);
extern void glGetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname, GLint* param);
extern void glGetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum pname, GLint* params);
extern void glGetQueryBufferObjecti64v(GLuint id,GLuint buffer,GLenum pname,GLintptr offset);
extern void glGetQueryBufferObjectiv(GLuint id,GLuint buffer,GLenum pname,GLintptr offset);
extern void glGetQueryBufferObjectui64v(GLuint id,GLuint buffer,GLenum pname,GLintptr offset);
extern void glGetQueryBufferObjectuiv(GLuint id,GLuint buffer,GLenum pname,GLintptr offset);
extern void glGetTextureImage(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
extern void glGetTextureLevelParameterfv(GLuint texture, GLint level, GLenum pname, GLfloat* params);
extern void glGetTextureLevelParameteriv(GLuint texture, GLint level, GLenum pname, GLint* params);
@@ -3792,7 +3855,6 @@ extern GLint glGetProgramResourceLocationIndex(GLuint program, GLenum programInt
extern void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name);
extern void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params);
extern void glProvokingVertex(GLenum mode);
extern GLenum glGetGraphicsResetStatusARB(void);
extern void glGetnColorTableARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table);
extern void glGetnCompressedTexImageARB(GLenum target, GLint lod, GLsizei bufSize, void* img);
extern void glGetnConvolutionFilterARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image);
@@ -4230,6 +4292,7 @@ extern void glUniformHandleui64NV(GLint location, GLuint64 value);
extern void glUniformHandleui64vNV(GLint location, GLsizei count, const GLuint64* value);
extern void glBlendBarrierNV(void);
extern void glBlendParameteriNV(GLenum pname, GLint value);
extern void glSubpixelPrecisionBiasNV(GLuint xbits, GLuint ybits);
extern void glClearDepthdNV(GLdouble depth);
extern void glDepthBoundsdNV(GLdouble zmin, GLdouble zmax);
extern void glDepthRangedNV(GLdouble zNear, GLdouble zFar);
@@ -4252,6 +4315,7 @@ extern void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params);
extern GLboolean glIsFenceNV(GLuint fence);
extern void glSetFenceNV(GLuint fence, GLenum condition);
extern GLboolean glTestFenceNV(GLuint fence);
extern void glFragmentCoverageColorNV(GLuint color);
extern void glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte* name, GLdouble *params);
extern void glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte* name, GLfloat *params);
extern void glProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
@@ -4352,6 +4416,7 @@ extern void glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalf* v);
extern void glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalf* v);
extern void glVertexWeighthNV(GLhalf weight);
extern void glVertexWeighthvNV(const GLhalf* weight);
extern void glGetInternalformatSampleivNV(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint* params);
extern void glBeginOcclusionQueryNV(GLuint id);
extern void glDeleteOcclusionQueriesNV(GLsizei n, const GLuint* ids);
extern void glEndOcclusionQueryNV(void);
@@ -4363,52 +4428,67 @@ extern void glProgramBufferParametersIivNV(GLenum target, GLuint buffer, GLuint
extern void glProgramBufferParametersIuivNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params);
extern void glProgramBufferParametersfvNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params);
extern void glCopyPathNV(GLuint resultPath, GLuint srcPath);
extern void glCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glCoverFillPathNV(GLuint path, GLenum coverMode);
extern void glCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glCoverStrokePathNV(GLuint name, GLenum coverMode);
extern void glCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glCoverStrokePathNV(GLuint path, GLenum coverMode);
extern void glDeletePathsNV(GLuint path, GLsizei range);
extern GLuint glGenPathsNV(GLsizei range);
extern void glGetPathColorGenfvNV(GLenum color, GLenum pname, GLfloat* value);
extern void glGetPathColorGenivNV(GLenum color, GLenum pname, GLint* value);
extern void glGetPathCommandsNV(GLuint name, GLubyte* commands);
extern void glGetPathCoordsNV(GLuint name, GLfloat* coords);
extern void glGetPathDashArrayNV(GLuint name, GLfloat* dashArray);
extern void glGetPathCommandsNV(GLuint path, GLubyte* commands);
extern void glGetPathCoordsNV(GLuint path, GLfloat* coords);
extern void glGetPathDashArrayNV(GLuint path, GLfloat* dashArray);
extern GLfloat glGetPathLengthNV(GLuint path, GLsizei startSegment, GLsizei numSegments);
extern void glGetPathMetricRangeNV(GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics);
extern void glGetPathMetricsNV(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
extern void glGetPathParameterfvNV(GLuint name, GLenum param, GLfloat* value);
extern void glGetPathParameterivNV(GLuint name, GLenum param, GLint* value);
extern void glGetPathSpacingNV(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
extern void glGetPathMetricRangeNV(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics);
extern void glGetPathMetricsNV(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
extern void glGetPathParameterfvNV(GLuint path, GLenum pname, GLfloat* value);
extern void glGetPathParameterivNV(GLuint path, GLenum pname, GLint* value);
extern void glGetPathSpacingNV(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
extern void glGetPathTexGenfvNV(GLenum texCoordSet, GLenum pname, GLfloat* value);
extern void glGetPathTexGenivNV(GLenum texCoordSet, GLenum pname, GLint* value);
extern void glGetProgramResourcefvNV(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLfloat *params);
extern void glInterpolatePathsNV(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
extern GLboolean glIsPathNV(GLuint path);
extern GLboolean glIsPointInFillPathNV(GLuint path, GLuint mask, GLfloat x, GLfloat y);
extern GLboolean glIsPointInStrokePathNV(GLuint path, GLfloat x, GLfloat y);
extern void glMatrixLoad3x2fNV(GLenum matrixMode, const GLfloat* m);
extern void glMatrixLoad3x3fNV(GLenum matrixMode, const GLfloat* m);
extern void glMatrixLoadTranspose3x3fNV(GLenum matrixMode, const GLfloat* m);
extern void glMatrixMult3x2fNV(GLenum matrixMode, const GLfloat* m);
extern void glMatrixMult3x3fNV(GLenum matrixMode, const GLfloat* m);
extern void glMatrixMultTranspose3x3fNV(GLenum matrixMode, const GLfloat* m);
extern void glPathColorGenNV(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs);
extern void glPathCommandsNV(GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const void*coords);
extern void glPathCoordsNV(GLuint path, GLsizei numCoords, GLenum coordType, const void* coords);
extern void glPathCoordsNV(GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
extern void glPathCoverDepthFuncNV(GLenum zfunc);
extern void glPathDashArrayNV(GLuint path, GLsizei dashCount, const GLfloat* dashArray);
extern void glPathFogGenNV(GLenum genMode);
extern void glPathGlyphRangeNV(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern void glPathGlyphsNV(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern GLenum glPathGlyphIndexArrayNV(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern GLenum glPathGlyphIndexRangeNV(GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
extern void glPathGlyphRangeNV(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern void glPathGlyphsNV(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern GLenum glPathMemoryGlyphIndexArrayNV(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
extern void glPathParameterfNV(GLuint path, GLenum pname, GLfloat value);
extern void glPathParameterfvNV(GLuint path, GLenum pname, const GLfloat* value);
extern void glPathParameteriNV(GLuint path, GLenum pname, GLint value);
extern void glPathParameterivNV(GLuint path, GLenum pname, const GLint* value);
extern void glPathStencilDepthOffsetNV(GLfloat factor, GLfloat units);
extern void glPathStencilFuncNV(GLenum func, GLint ref, GLuint mask);
extern void glPathStringNV(GLuint path, GLenum format, GLsizei length, const void* pathString);
extern void glPathStringNV(GLuint path, GLenum format, GLsizei length, const void *pathString);
extern void glPathSubCommandsNV(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const void*coords);
extern void glPathSubCoordsNV(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords);
extern void glPathSubCoordsNV(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
extern void glPathTexGenNV(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs);
extern GLboolean glPointAlongPathNV(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
extern void glStencilFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
extern void glProgramPathFragmentInputGenNV(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat* coeffs);
extern void glStencilFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
extern void glStencilFillPathNV(GLuint path, GLenum fillMode, GLuint mask);
extern void glStencilStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
extern void glStencilStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
extern void glStencilStrokePathNV(GLuint path, GLint reference, GLuint mask);
extern void glStencilThenCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glStencilThenCoverFillPathNV(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
extern void glStencilThenCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
extern void glStencilThenCoverStrokePathNV(GLuint path, GLint reference, GLuint mask, GLenum coverMode);
extern void glTransformPathNV(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues);
extern void glWeightPathsNV(GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]);
extern void glFlushPixelDataRangeNV(GLenum target);
@@ -4435,6 +4515,8 @@ extern void glGetFinalCombinerInputParameterfvNV(GLenum variable, GLenum pname,
extern void glGetFinalCombinerInputParameterivNV(GLenum variable, GLenum pname, GLint* params);
extern void glCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat* params);
extern void glGetCombinerStageParameterfvNV(GLenum stage, GLenum pname, GLfloat* params);
extern void glFramebufferSampleLocationsfvNV(GLenum target, GLuint start, GLsizei count, const GLfloat* v);
extern void glNamedFramebufferSampleLocationsfvNV(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v);
extern void glGetBufferParameterui64vNV(GLenum target, GLenum pname, GLuint64EXT* params);
extern void glGetIntegerui64vNV(GLenum value, GLuint64EXT* result);
extern void glGetNamedBufferParameterui64vNV(GLuint buffer, GLenum pname, GLuint64EXT* params);
@@ -4857,7 +4939,10 @@ extern GLboolean __GLEW_EXT_pixel_transform;
extern GLboolean __GLEW_EXT_pixel_transform_color_table;
extern GLboolean __GLEW_EXT_point_parameters;
extern GLboolean __GLEW_EXT_polygon_offset;
extern GLboolean __GLEW_EXT_polygon_offset_clamp;
extern GLboolean __GLEW_EXT_post_depth_coverage;
extern GLboolean __GLEW_EXT_provoking_vertex;
extern GLboolean __GLEW_EXT_raster_multisample;
extern GLboolean __GLEW_EXT_rescale_normal;
extern GLboolean __GLEW_EXT_scene_marker;
extern GLboolean __GLEW_EXT_secondary_color;
@@ -4868,6 +4953,7 @@ extern GLboolean __GLEW_EXT_shader_image_load_store;
extern GLboolean __GLEW_EXT_shader_integer_mix;
extern GLboolean __GLEW_EXT_shadow_funcs;
extern GLboolean __GLEW_EXT_shared_texture_palette;
extern GLboolean __GLEW_EXT_sparse_texture2;
extern GLboolean __GLEW_EXT_stencil_clear_tag;
extern GLboolean __GLEW_EXT_stencil_two_side;
extern GLboolean __GLEW_EXT_stencil_wrap;
@@ -4887,6 +4973,7 @@ extern GLboolean __GLEW_EXT_texture_env_add;
extern GLboolean __GLEW_EXT_texture_env_combine;
extern GLboolean __GLEW_EXT_texture_env_dot3;
extern GLboolean __GLEW_EXT_texture_filter_anisotropic;
extern GLboolean __GLEW_EXT_texture_filter_minmax;
extern GLboolean __GLEW_EXT_texture_integer;
extern GLboolean __GLEW_EXT_texture_lod_bias;
extern GLboolean __GLEW_EXT_texture_mirror_clamp;
@@ -4949,6 +5036,7 @@ extern GLboolean __GLEW_NV_blend_equation_advanced_coherent;
extern GLboolean __GLEW_NV_blend_square;
extern GLboolean __GLEW_NV_compute_program5;
extern GLboolean __GLEW_NV_conditional_render;
extern GLboolean __GLEW_NV_conservative_raster;
extern GLboolean __GLEW_NV_copy_depth_to_color;
extern GLboolean __GLEW_NV_copy_image;
extern GLboolean __GLEW_NV_deep_texture3D;
@@ -4959,21 +5047,27 @@ extern GLboolean __GLEW_NV_draw_texture;
extern GLboolean __GLEW_NV_evaluators;
extern GLboolean __GLEW_NV_explicit_multisample;
extern GLboolean __GLEW_NV_fence;
extern GLboolean __GLEW_NV_fill_rectangle;
extern GLboolean __GLEW_NV_float_buffer;
extern GLboolean __GLEW_NV_fog_distance;
extern GLboolean __GLEW_NV_fragment_coverage_to_color;
extern GLboolean __GLEW_NV_fragment_program;
extern GLboolean __GLEW_NV_fragment_program2;
extern GLboolean __GLEW_NV_fragment_program4;
extern GLboolean __GLEW_NV_fragment_program_option;
extern GLboolean __GLEW_NV_fragment_shader_interlock;
extern GLboolean __GLEW_NV_framebuffer_mixed_samples;
extern GLboolean __GLEW_NV_framebuffer_multisample_coverage;
extern GLboolean __GLEW_NV_geometry_program4;
extern GLboolean __GLEW_NV_geometry_shader4;
extern GLboolean __GLEW_NV_geometry_shader_passthrough;
extern GLboolean __GLEW_NV_gpu_program4;
extern GLboolean __GLEW_NV_gpu_program5;
extern GLboolean __GLEW_NV_gpu_program5_mem_extended;
extern GLboolean __GLEW_NV_gpu_program_fp64;
extern GLboolean __GLEW_NV_gpu_shader5;
extern GLboolean __GLEW_NV_half_float;
extern GLboolean __GLEW_NV_internalformat_sample_query;
extern GLboolean __GLEW_NV_light_max_exponent;
extern GLboolean __GLEW_NV_multisample_coverage;
extern GLboolean __GLEW_NV_multisample_filter_hint;
@@ -4982,14 +5076,18 @@ extern GLboolean __GLEW_NV_packed_depth_stencil;
extern GLboolean __GLEW_NV_parameter_buffer_object;
extern GLboolean __GLEW_NV_parameter_buffer_object2;
extern GLboolean __GLEW_NV_path_rendering;
extern GLboolean __GLEW_NV_path_rendering_shared_edge;
extern GLboolean __GLEW_NV_pixel_data_range;
extern GLboolean __GLEW_NV_point_sprite;
extern GLboolean __GLEW_NV_present_video;
extern GLboolean __GLEW_NV_primitive_restart;
extern GLboolean __GLEW_NV_register_combiners;
extern GLboolean __GLEW_NV_register_combiners2;
extern GLboolean __GLEW_NV_sample_locations;
extern GLboolean __GLEW_NV_sample_mask_override_coverage;
extern GLboolean __GLEW_NV_shader_atomic_counters;
extern GLboolean __GLEW_NV_shader_atomic_float;
extern GLboolean __GLEW_NV_shader_atomic_fp16_vector;
extern GLboolean __GLEW_NV_shader_atomic_int64;
extern GLboolean __GLEW_NV_shader_buffer_load;
extern GLboolean __GLEW_NV_shader_storage_buffer_object;
@@ -5022,6 +5120,7 @@ extern GLboolean __GLEW_NV_vertex_program2_option;
extern GLboolean __GLEW_NV_vertex_program3;
extern GLboolean __GLEW_NV_vertex_program4;
extern GLboolean __GLEW_NV_video_capture;
extern GLboolean __GLEW_NV_viewport_array2;
extern GLboolean __GLEW_OES_byte_coordinates;
extern GLboolean __GLEW_OES_compressed_paletted_texture;
extern GLboolean __GLEW_OES_read_format;
@@ -5412,7 +5511,10 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_EXT_pixel_transform_color_table"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_point_parameters"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_polygon_offset"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_polygon_offset_clamp"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_post_depth_coverage"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_provoking_vertex"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_raster_multisample"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_rescale_normal"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_scene_marker"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_secondary_color"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5423,6 +5525,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_EXT_shader_integer_mix"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_shadow_funcs"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_shared_texture_palette"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_sparse_texture2"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_stencil_clear_tag"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_stencil_two_side"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_stencil_wrap"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5442,6 +5545,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_EXT_texture_env_combine"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_env_dot3"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_filter_anisotropic"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_filter_minmax"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_integer"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_lod_bias"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_EXT_texture_mirror_clamp"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5504,6 +5608,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_NV_blend_square"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_compute_program5"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_conditional_render"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_conservative_raster"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_copy_depth_to_color"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_copy_image"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_deep_texture3D"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5514,21 +5619,27 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_NV_evaluators"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_explicit_multisample"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fence"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fill_rectangle"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_float_buffer"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fog_distance"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_coverage_to_color"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_program"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_program2"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_program4"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_program_option"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_fragment_shader_interlock"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_framebuffer_mixed_samples"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_framebuffer_multisample_coverage"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_geometry_program4"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_geometry_shader4"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_geometry_shader_passthrough"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_gpu_program4"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_gpu_program5"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_gpu_program5_mem_extended"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_gpu_program_fp64"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_gpu_shader5"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_half_float"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_internalformat_sample_query"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_light_max_exponent"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_multisample_coverage"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_multisample_filter_hint"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5537,14 +5648,18 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_NV_parameter_buffer_object"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_parameter_buffer_object2"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_path_rendering"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_path_rendering_shared_edge"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_pixel_data_range"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_point_sprite"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_present_video"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_primitive_restart"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_register_combiners"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_register_combiners2"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_sample_locations"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_sample_mask_override_coverage"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_atomic_counters"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_atomic_float"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_atomic_fp16_vector"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_atomic_int64"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_buffer_load"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_shader_storage_buffer_object"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -5577,6 +5692,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["__GLEW_NV_vertex_program3"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_vertex_program4"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_video_capture"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_NV_viewport_array2"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_OES_byte_coordinates"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_OES_compressed_paletted_texture"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
["__GLEW_OES_read_format"] = { type ='value', description = "extern GLboolean", valuetype = nil, },
@@ -6700,6 +6816,8 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM"] = { type ='value', },
["GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT"] = { type ='value', },
["GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT"] = { type ='value', },
["GL_COPY_READ_BUFFER_BINDING"] = { type ='value', },
["GL_COPY_WRITE_BUFFER_BINDING"] = { type ='value', },
["GL_NUM_SHADING_LANGUAGE_VERSIONS"] = { type ='value', },
["GL_VERTEX_ATTRIB_ARRAY_LONG"] = { type ='value', },
["GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"] = { type ='value', },
@@ -7416,7 +7534,6 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_TIMEOUT_EXPIRED"] = { type ='value', },
["GL_CONDITION_SATISFIED"] = { type ='value', },
["GL_WAIT_FAILED"] = { type ='value', },
["GL_TIMEOUT_IGNORED"] = { type ='value', },
["GL_PATCHES"] = { type ='value', },
["GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER"] = { type ='value', },
["GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER"] = { type ='value', },
@@ -7708,6 +7825,8 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_HSL_SATURATION_KHR"] = { type ='value', },
["GL_HSL_COLOR_KHR"] = { type ='value', },
["GL_HSL_LUMINOSITY_KHR"] = { type ='value', },
["GL_CONTEXT_RELEASE_BEHAVIOR"] = { type ='value', },
["GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH"] = { type ='value', },
["GL_CONTEXT_FLAG_DEBUG_BIT"] = { type ='value', },
["GL_DEBUG_OUTPUT_SYNCHRONOUS"] = { type ='value', },
["GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"] = { type ='value', },
@@ -7835,6 +7954,10 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_INVERT_OVG_NV"] = { type ='value', },
["GL_COMPUTE_PROGRAM_NV"] = { type ='value', },
["GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV"] = { type ='value', },
["GL_CONSERVATIVE_RASTERIZATION_NV"] = { type ='value', },
["GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV"] = { type ='value', },
["GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV"] = { type ='value', },
["GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV"] = { type ='value', },
["GL_DEPTH_STENCIL_TO_RGBA_NV"] = { type ='value', },
["GL_DEPTH_STENCIL_TO_BGRA_NV"] = { type ='value', },
["GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV"] = { type ='value', },
@@ -7876,6 +7999,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_ALL_COMPLETED_NV"] = { type ='value', },
["GL_FENCE_STATUS_NV"] = { type ='value', },
["GL_FENCE_CONDITION_NV"] = { type ='value', },
["GL_FILL_RECTANGLE_NV"] = { type ='value', },
["GL_FLOAT_R_NV"] = { type ='value', },
["GL_FLOAT_RG_NV"] = { type ='value', },
["GL_FLOAT_RGB_NV"] = { type ='value', },
@@ -7894,6 +8018,8 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_FOG_DISTANCE_MODE_NV"] = { type ='value', },
["GL_EYE_RADIAL_NV"] = { type ='value', },
["GL_EYE_PLANE_ABSOLUTE_NV"] = { type ='value', },
["GL_FRAGMENT_COVERAGE_TO_COLOR_NV"] = { type ='value', },
["GL_FRAGMENT_COVERAGE_COLOR_NV"] = { type ='value', },
["GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV"] = { type ='value', },
["GL_FRAGMENT_PROGRAM_NV"] = { type ='value', },
["GL_FRAGMENT_PROGRAM_BINDING_NV"] = { type ='value', },
@@ -7946,9 +8072,12 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_FLOAT16_VEC2_NV"] = { type ='value', },
["GL_FLOAT16_VEC3_NV"] = { type ='value', },
["GL_FLOAT16_VEC4_NV"] = { type ='value', },
["GL_MULTISAMPLES_NV"] = { type ='value', },
["GL_SUPERSAMPLE_SCALE_X_NV"] = { type ='value', },
["GL_SUPERSAMPLE_SCALE_Y_NV"] = { type ='value', },
["GL_CONFORMANT_NV"] = { type ='value', },
["GL_MAX_SHININESS_NV"] = { type ='value', },
["GL_MAX_SPOT_EXPONENT_NV"] = { type ='value', },
["GL_COLOR_SAMPLES_NV"] = { type ='value', },
["GL_MULTISAMPLE_FILTER_HINT_NV"] = { type ='value', },
["GL_PIXEL_COUNTER_BITS_NV"] = { type ='value', },
["GL_CURRENT_OCCLUSION_QUERY_ID_NV"] = { type ='value', },
@@ -7991,19 +8120,31 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_RELATIVE_LARGE_CCW_ARC_TO_NV"] = { type ='value', },
["GL_LARGE_CW_ARC_TO_NV"] = { type ='value', },
["GL_RELATIVE_LARGE_CW_ARC_TO_NV"] = { type ='value', },
["GL_CONIC_CURVE_TO_NV"] = { type ='value', },
["GL_RELATIVE_CONIC_CURVE_TO_NV"] = { type ='value', },
["GL_GLYPH_VERTICAL_BEARING_X_BIT_NV"] = { type ='value', },
["GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV"] = { type ='value', },
["GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV"] = { type ='value', },
["GL_ROUNDED_RECT_NV"] = { type ='value', },
["GL_RELATIVE_ROUNDED_RECT_NV"] = { type ='value', },
["GL_ROUNDED_RECT2_NV"] = { type ='value', },
["GL_RELATIVE_ROUNDED_RECT2_NV"] = { type ='value', },
["GL_ROUNDED_RECT4_NV"] = { type ='value', },
["GL_RELATIVE_ROUNDED_RECT4_NV"] = { type ='value', },
["GL_ROUNDED_RECT8_NV"] = { type ='value', },
["GL_RELATIVE_ROUNDED_RECT8_NV"] = { type ='value', },
["GL_RESTART_PATH_NV"] = { type ='value', },
["GL_DUP_FIRST_CUBIC_CURVE_TO_NV"] = { type ='value', },
["GL_DUP_LAST_CUBIC_CURVE_TO_NV"] = { type ='value', },
["GL_RECT_NV"] = { type ='value', },
["GL_RELATIVE_RECT_NV"] = { type ='value', },
["GL_CIRCULAR_CCW_ARC_TO_NV"] = { type ='value', },
["GL_CIRCULAR_CW_ARC_TO_NV"] = { type ='value', },
["GL_CIRCULAR_TANGENT_ARC_TO_NV"] = { type ='value', },
["GL_ARC_TO_NV"] = { type ='value', },
["GL_RELATIVE_ARC_TO_NV"] = { type ='value', },
["GL_GLYPH_HAS_KERNING_BIT_NV"] = { type ='value', },
["GL_SECONDARY_COLOR_NV"] = { type ='value', },
["GL_PATH_FORMAT_SVG_NV"] = { type ='value', },
["GL_PATH_FORMAT_PS_NV"] = { type ='value', },
["GL_STANDARD_FONT_NAME_NV"] = { type ='value', },
@@ -8025,6 +8166,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_PATH_FILL_COVER_MODE_NV"] = { type ='value', },
["GL_PATH_STROKE_COVER_MODE_NV"] = { type ='value', },
["GL_PATH_STROKE_MASK_NV"] = { type ='value', },
["GL_PATH_STROKE_BOUND_NV"] = { type ='value', },
["GL_COUNT_UP_NV"] = { type ='value', },
["GL_COUNT_DOWN_NV"] = { type ='value', },
["GL_PATH_OBJECT_BOUNDING_BOX_NV"] = { type ='value', },
@@ -8073,6 +8215,12 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV"] = { type ='value', },
["GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV"] = { type ='value', },
["GL_PATH_COVER_DEPTH_FUNC_NV"] = { type ='value', },
["GL_FONT_GLYPHS_AVAILABLE_NV"] = { type ='value', },
["GL_FONT_TARGET_UNAVAILABLE_NV"] = { type ='value', },
["GL_FONT_UNAVAILABLE_NV"] = { type ='value', },
["GL_FONT_UNINTELLIGIBLE_NV"] = { type ='value', },
["GL_STANDARD_FONT_FORMAT_NV"] = { type ='value', },
["GL_FRAGMENT_INPUT_NV"] = { type ='value', },
["GL_FONT_X_MIN_BOUNDS_BIT_NV"] = { type ='value', },
["GL_FONT_Y_MIN_BOUNDS_BIT_NV"] = { type ='value', },
["GL_FONT_X_MAX_BOUNDS_BIT_NV"] = { type ='value', },
@@ -8086,6 +8234,8 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_FONT_UNDERLINE_POSITION_BIT_NV"] = { type ='value', },
["GL_FONT_UNDERLINE_THICKNESS_BIT_NV"] = { type ='value', },
["GL_FONT_HAS_KERNING_BIT_NV"] = { type ='value', },
["GL_FONT_NUM_GLYPH_INDICES_BIT_NV"] = { type ='value', },
["GL_SHARED_EDGE_NV"] = { type ='value', },
["GL_WRITE_PIXEL_DATA_RANGE_NV"] = { type ='value', },
["GL_READ_PIXEL_DATA_RANGE_NV"] = { type ='value', },
["GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV"] = { type ='value', },
@@ -8109,7 +8259,6 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_VARIABLE_G_NV"] = { type ='value', },
["GL_CONSTANT_COLOR0_NV"] = { type ='value', },
["GL_CONSTANT_COLOR1_NV"] = { type ='value', },
["GL_SECONDARY_COLOR_NV"] = { type ='value', },
["GL_SPARE0_NV"] = { type ='value', },
["GL_SPARE1_NV"] = { type ='value', },
["GL_DISCARD_NV"] = { type ='value', },
@@ -8150,6 +8299,14 @@ extern GLboolean __GLEW_WIN_swap_hint;
["GL_COMBINER6_NV"] = { type ='value', },
["GL_COMBINER7_NV"] = { type ='value', },
["GL_PER_STAGE_CONSTANTS_NV"] = { type ='value', },
["GL_SAMPLE_LOCATION_NV"] = { type ='value', },
["GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV"] = { type ='value', },
["GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV"] = { type ='value', },
["GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV"] = { type ='value', },
["GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV"] = { type ='value', },
["GL_PROGRAMMABLE_SAMPLE_LOCATION_NV"] = { type ='value', },
["GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV"] = { type ='value', },
["GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV"] = { type ='value', },
["GL_BUFFER_GPU_ADDRESS_NV"] = { type ='value', },
["GL_GPU_ADDRESS_NV"] = { type ='value', },
["GL_MAX_SHADER_BUFFER_ADDRESS_NV"] = { type ='value', },
@@ -11518,6 +11675,11 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLclampf value)", },
["glGetGraphicsResetStatus"] = { type ='function',
description = "",
returns = "(GLenum)",
valuetype = nil,
args = "(void)", },
["glDebugMessageEnableAMD"] = { type ='function',
description = "",
returns = "()",
@@ -12033,6 +12195,26 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLuint renderbuffer, GLenum pname, GLint* params)", },
["glGetQueryBufferObjecti64v"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint id,GLuint buffer,GLenum pname,GLintptr offset)", },
["glGetQueryBufferObjectiv"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint id,GLuint buffer,GLenum pname,GLintptr offset)", },
["glGetQueryBufferObjectui64v"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint id,GLuint buffer,GLenum pname,GLintptr offset)", },
["glGetQueryBufferObjectuiv"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint id,GLuint buffer,GLenum pname,GLintptr offset)", },
["glGetTextureImage"] = { type ='function',
description = "",
returns = "()",
@@ -12893,11 +13075,6 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLenum mode)", },
["glGetGraphicsResetStatusARB"] = { type ='function',
description = "",
returns = "(GLenum)",
valuetype = nil,
args = "(void)", },
["glGetnColorTableARB"] = { type ='function',
description = "",
returns = "()",
@@ -15083,6 +15260,11 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLenum pname, GLint value)", },
["glSubpixelPrecisionBiasNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint xbits, GLuint ybits)", },
["glClearDepthdNV"] = { type ='function',
description = "",
returns = "()",
@@ -15193,6 +15375,11 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "(GLboolean)",
valuetype = nil,
args = "(GLuint fence)", },
["glFragmentCoverageColorNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint color)", },
["glGetProgramNamedParameterdvNV"] = { type ='function',
description = "",
returns = "()",
@@ -15693,6 +15880,11 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(const GLhalf* weight)", },
["glGetInternalformatSampleivNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint* params)", },
["glBeginOcclusionQueryNV"] = { type ='function',
description = "",
returns = "()",
@@ -15752,7 +15944,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
["glCoverFillPathNV"] = { type ='function',
description = "",
returns = "()",
@@ -15762,12 +15954,12 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
["glCoverStrokePathNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLenum coverMode)", },
args = "(GLuint path, GLenum coverMode)", },
["glDeletePathsNV"] = { type ='function',
description = "",
returns = "()",
@@ -15792,17 +15984,17 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLubyte* commands)", },
args = "(GLuint path, GLubyte* commands)", },
["glGetPathCoordsNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLfloat* coords)", },
args = "(GLuint path, GLfloat* coords)", },
["glGetPathDashArrayNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLfloat* dashArray)", },
args = "(GLuint path, GLfloat* dashArray)", },
["glGetPathLengthNV"] = { type ='function',
description = "",
returns = "(GLfloat)",
@@ -15812,27 +16004,27 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics)", },
args = "(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics)", },
["glGetPathMetricsNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics)", },
args = "(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics)", },
["glGetPathParameterfvNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLenum param, GLfloat* value)", },
args = "(GLuint path, GLenum pname, GLfloat* value)", },
["glGetPathParameterivNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint name, GLenum param, GLint* value)", },
args = "(GLuint path, GLenum pname, GLint* value)", },
["glGetPathSpacingNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing)", },
args = "(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing)", },
["glGetPathTexGenfvNV"] = { type ='function',
description = "",
returns = "()",
@@ -15843,6 +16035,11 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLenum texCoordSet, GLenum pname, GLint* value)", },
["glGetProgramResourcefvNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLfloat *params)", },
["glInterpolatePathsNV"] = { type ='function',
description = "",
returns = "()",
@@ -15863,6 +16060,36 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "(GLboolean)",
valuetype = nil,
args = "(GLuint path, GLfloat x, GLfloat y)", },
["glMatrixLoad3x2fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glMatrixLoad3x3fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glMatrixLoadTranspose3x3fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glMatrixMult3x2fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glMatrixMult3x3fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glMatrixMultTranspose3x3fNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum matrixMode, const GLfloat* m)", },
["glPathColorGenNV"] = { type ='function',
description = "",
returns = "()",
@@ -15877,7 +16104,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLsizei numCoords, GLenum coordType, const void* coords)", },
args = "(GLuint path, GLsizei numCoords, GLenum coordType, const void *coords)", },
["glPathCoverDepthFuncNV"] = { type ='function',
description = "",
returns = "()",
@@ -15893,16 +16120,31 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLenum genMode)", },
["glPathGlyphIndexArrayNV"] = { type ='function',
description = "",
returns = "(GLenum)",
valuetype = nil,
args = "(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
["glPathGlyphIndexRangeNV"] = { type ='function',
description = "",
returns = "(GLenum)",
valuetype = nil,
args = "(GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2])", },
["glPathGlyphRangeNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
args = "(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
["glPathGlyphsNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
args = "(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
["glPathMemoryGlyphIndexArrayNV"] = { type ='function',
description = "",
returns = "(GLenum)",
valuetype = nil,
args = "(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale)", },
["glPathParameterfNV"] = { type ='function',
description = "",
returns = "()",
@@ -15937,7 +16179,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLenum format, GLsizei length, const void* pathString)", },
args = "(GLuint path, GLenum format, GLsizei length, const void *pathString)", },
["glPathSubCommandsNV"] = { type ='function',
description = "",
returns = "()",
@@ -15947,7 +16189,7 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords)", },
args = "(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords)", },
["glPathTexGenNV"] = { type ='function',
description = "",
returns = "()",
@@ -15958,11 +16200,16 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "(GLboolean)",
valuetype = nil,
args = "(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY)", },
["glProgramPathFragmentInputGenNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat* coeffs)", },
["glStencilFillPathInstancedNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues)", },
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues)", },
["glStencilFillPathNV"] = { type ='function',
description = "",
returns = "()",
@@ -15972,12 +16219,32 @@ extern GLboolean __GLEW_WIN_swap_hint;
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues)", },
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues)", },
["glStencilStrokePathNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLint reference, GLuint mask)", },
["glStencilThenCoverFillPathInstancedNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
["glStencilThenCoverFillPathNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode)", },
["glStencilThenCoverStrokePathInstancedNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues)", },
["glStencilThenCoverStrokePathNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint path, GLint reference, GLuint mask, GLenum coverMode)", },
["glTransformPathNV"] = { type ='function',
description = "",
returns = "()",
@@ -16108,6 +16375,16 @@ extern GLboolean __GLEW_WIN_swap_hint;
returns = "()",
valuetype = nil,
args = "(GLenum stage, GLenum pname, GLfloat* params)", },
["glFramebufferSampleLocationsfvNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLenum target, GLuint start, GLsizei count, const GLfloat* v)", },
["glNamedFramebufferSampleLocationsfvNV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v)", },
["glGetBufferParameterui64vNV"] = { type ='function',
description = "",
returns = "()",

View File

@@ -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.",

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
lua.app/Contents/MacOS/lua53
lua.app/Contents/MacOS/lua53

Binary file not shown.

Binary file not shown.

View File

@@ -44,6 +44,10 @@ 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
@@ -69,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
@@ -116,7 +125,7 @@ LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
@@ -125,13 +134,13 @@ LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.0-beta"
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi
@@ -141,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 \
@@ -187,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"

View File

@@ -120,7 +120,7 @@ LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
@@ -129,13 +129,13 @@ LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.0-beta"
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi

View File

@@ -23,11 +23,11 @@ LUASOCKET_BASENAME="luasocket-3.0-rc1"
LUASOCKET_FILENAME="v3.0-rc1.zip"
LUASOCKET_URL="https://github.com/diegonehab/luasocket/archive/$LUASOCKET_FILENAME"
OPENSSL_BASENAME="openssl-1.0.1e"
OPENSSL_BASENAME="openssl-1.0.2a"
OPENSSL_FILENAME="$OPENSSL_BASENAME.tar.gz"
OPENSSL_URL="http://www.openssl.org/source/$OPENSSL_FILENAME"
LUASEC_BASENAME="luasec-0.4.1"
LUASEC_BASENAME="luasec-0.5"
LUASEC_FILENAME="$LUASEC_BASENAME.zip"
LUASEC_URL="https://github.com/brunoos/luasec/archive/$LUASEC_FILENAME"
@@ -132,13 +132,15 @@ fi
mkdir -p "$INSTALL_DIR" || { echo "Error: cannot create directory $INSTALL_DIR"; exit 1; }
LUAV="51"
LUAD="5.1"
LUAS=""
LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAD="5.2"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
@@ -146,14 +148,15 @@ LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAD="5.3"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.0-beta"
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi
@@ -186,6 +189,16 @@ if [ $BUILD_LUA ]; then
# move luajit to lua as it's expected by luasocket and other components
cp "$INSTALL_DIR"/include/luajit*/* "$INSTALL_DIR/include/"
else
# need to patch Lua io to support large (>2GB) files on Windows:
# http://lua-users.org/lists/lua-l/2015-05/msg00370.html
cat <<EOF >>src/luaconf.h
#if defined(liolib_c) && defined(__MINGW32__)
#include <sys/types.h>
#define l_fseek(f,o,w) fseeko64(f,o,w)
#define l_ftell(f) ftello64(f)
#define l_seeknum off64_t
#endif
EOF
make mingw || { echo "Error: failed to build Lua"; exit 1; }
make install INSTALL_TOP="$INSTALL_DIR"
fi
@@ -238,17 +251,17 @@ if [ $BUILD_LUASOCKET ]; then
wget --no-check-certificate -c "$LUASOCKET_URL" -O "$LUASOCKET_FILENAME" || { echo "Error: failed to download LuaSocket"; exit 1; }
unzip "$LUASOCKET_FILENAME"
cd "$LUASOCKET_BASENAME"
mkdir -p "$INSTALL_DIR/lib/lua/$LUAV/"{mime,socket}
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" src/mime.c -llua$LUAV \
mkdir -p "$INSTALL_DIR/lib/lua/$LUAD/"{mime,socket}
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" src/mime.c -llua$LUAV \
|| { echo "Error: failed to build LuaSocket"; exit 1; }
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" \
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" \
src/{auxiliar.c,buffer.c,except.c,inet.c,io.c,luasocket.c,options.c,select.c,tcp.c,timeout.c,udp.c,wsocket.c} -lwsock32 -lws2_32 -llua$LUAV \
|| { echo "Error: failed to build LuaSocket"; exit 1; }
mkdir -p "$INSTALL_DIR/share/lua/$LUAV/socket"
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAV/socket"
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAV"
[ -f "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/socket"
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAD/socket"
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAD"
[ -f "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
cd ..
rm -rf "$LUASOCKET_FILENAME" "$LUASOCKET_BASENAME"
fi
@@ -271,11 +284,13 @@ if [ $BUILD_LUASEC ]; then
# the folder in the archive is "luasec-luasec-....", so need to fix
mv "luasec-$LUASEC_BASENAME" $LUASEC_BASENAME
cd "$LUASEC_BASENAME"
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/5.1/ssl.dll" \
src/{timeout.c,buffer.c,io.c,context.c,ssl.c,wsocket.c} -lssl -lcrypto -lws2_32 -lgdi32 -llua51 \
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" \
src/luasocket/{timeout.c,buffer.c,io.c,wsocket.c} src/{context.c,x509.c,ssl.c} -Isrc -lssl -lcrypto -lws2_32 -lgdi32 -llua$LUAV \
|| { echo "Error: failed to build LuaSec"; exit 1; }
cp src/{ssl.lua,https.lua} "$INSTALL_DIR/share/lua/5.1"
[ -f "$INSTALL_DIR/lib/lua/5.1/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
cp src/ssl.lua "$INSTALL_DIR/share/lua/$LUAD"
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/ssl"
cp src/https.lua "$INSTALL_DIR/share/lua/$LUAD/ssl"
[ -f "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
cd ..
rm -rf "$LUASEC_FILENAME" "$LUASEC_BASENAME"
fi
@@ -284,9 +299,9 @@ fi
if [ $BUILD_WINAPI ]; then
git clone "$WINAPI_URL" "$WINAPI_BASENAME"
cd "$WINAPI_BASENAME"
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/5.1/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua51 \
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua$LUAV \
|| { echo "Error: failed to build winapi"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/5.1/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
cd ..
rm -rf "$WINAPI_BASENAME"
fi
@@ -304,13 +319,13 @@ mkdir -p "$BIN_DIR" || { echo "Error: cannot create directory $BIN_DIR"; exit 1;
[ $BUILD_LUA ] && cp "$INSTALL_DIR/bin/lua$LUAS.exe" "$INSTALL_DIR/lib/lua$LUAV.dll" "$BIN_DIR"
[ $BUILD_WXLUA ] && cp "$INSTALL_DIR/bin/libwx.dll" "$BIN_DIR/wx.dll"
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/5.1/winapi.dll" "$BIN_DIR"
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/5.1/ssl.dll" "$BIN_DIR"
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" "$BIN_DIR/clibs$LUAS"
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" "$BIN_DIR/clibs$LUAS"
if [ $BUILD_LUASOCKET ]; then
mkdir -p "$BIN_DIR/clibs$LUAS/"{mime,socket}
cp "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
cp "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
cp "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
cp "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
fi
# To build lua5.1.dll proxy:

View File

@@ -54,7 +54,7 @@ end
local file = ... -- pass an existing file name as a parameter
local messages = {}
for _, mask in ipairs({"zbstudio/*.lua", "src/main.lua", "src/editor/*.lua"}) do
for _, mask in ipairs({"src/main.lua", "src/editor/*.lua"}) do
for _, file in ipairs(FileSysGet(mask, wx.wxFILE)) do
local content = FileRead(file)
for msg in content:gmatch("[^%w]TR(%b())") do
@@ -83,9 +83,12 @@ end
local plural = existing[0] and (" [0] = "..existing[0].."\n") or ""
existing[0] = nil
local en = loadfile("cfg/i18n/en.lua")() -- load 'en' with translations that require pluralization
local msgs = {}
for m, files in pairs(messages) do
local str = " ["..m.."] = "..(existing[m] or 'nil, --')
local str = " ["..m.."] = "
..(existing[m] or (en[m:gsub([=[^['"]]=],''):gsub([=[['"]$]=],'')] and '{}, --' or 'nil, --'))
str = str:gsub(" %-%-.*$", "").." -- "
for f in pairs(files) do str = str .. f .. ", " end
msgs[#msgs+1] = str:gsub(", $", "")

View File

@@ -154,14 +154,20 @@ int main (int argc, char *argv[])
MB_OK|MB_ICONERROR);
return 0;
}
if (file!=NULL)
*file = 0; // finish the string, I don't need the appname
//int i;
//for (i=0;i<argc; i++)
// printf("%d %s\n",i,argv[i]);
if (file!=NULL) *file = 0; // finish the string, don't need the appname
SetCurrentDirectory(buffer);
// set the application as DPI aware
typedef enum _Process_DPI_Awareness {
Process_DPI_Unaware = 0,
Process_System_DPI_Aware = 1,
Process_Per_Monitor_DPI_Aware = 2
} Process_DPI_Awareness;
typedef BOOL (WINAPI *SetProcessDPIAwareness_t)(Process_DPI_Awareness);
SetProcessDPIAwareness_t pfnSetProcessDPIAwareness = (SetProcessDPIAwareness_t)
GetProcAddress(GetModuleHandle(TEXT("user32.dll")), "SetProcessDPIAware");
if (NULL != pfnSetProcessDPIAwareness) pfnSetProcessDPIAwareness(Process_System_DPI_Aware);
SetDllDirectory(".\\bin\\");
hinstLib = LoadLibrary("lua51.dll");

View File

@@ -1,25 +1,23 @@
return {
["%d instance"] = "%d 个体", -- src\editor\findreplace.lua
["%s event failed: %s"] = nil, -- src\editor\package.lua
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "关于(&A)", -- src\editor\menu_help.lua
["&Add Watch"] = "添加监视(&A)", -- src\editor\debugger.lua
["&Break"] = "中断", -- src\editor\menu_project.lua
["&Close Page"] = "关闭页面", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = nil, -- src\editor\menu_help.lua
["&Compile"] = "编译", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "复制", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "布局", -- src\editor\menu_view.lua
["&Delete Watch"] = "删除监视", -- src\editor\debugger.lua
["&Delete"] = nil, -- src\editor\filetree.lua
["&Documentation"] = nil, -- src\editor\menu_help.lua
["&Down"] = "往下", -- src\editor\findreplace.lua
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
["&Edit Value"] = nil, -- src\editor\debugger.lua
["&Edit Watch"] = "编辑监视", -- src\editor\debugger.lua
["&Edit"] = "编辑", -- src\editor\menu_edit.lua
["&File"] = "文件", -- src\editor\menu_file.lua
["&Find All"] = "查找全部", -- src\editor\findreplace.lua
["&Find Next"] = "查找下一个", -- src\editor\findreplace.lua
["&Find"] = "查找", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "全 折叠/展开", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
@@ -34,8 +32,7 @@ return {
["&Project"] = "项目", -- src\editor\menu_project.lua
["&Redo"] = "重做", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = nil, -- src\editor\filetree.lua
["&Replace All"] = "替换", -- src\editor\findreplace.lua
["&Replace"] = "替换", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "替换", -- src\editor\menu_search.lua
["&Run"] = "执行", -- src\editor\menu_project.lua
["&Save"] = "保存", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "搜索", -- src\editor\menu_search.lua
@@ -43,14 +40,11 @@ return {
["&Stack Window"] = "叠视窗/堆栈视窗", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "开启除错器伺服机", -- src\editor\menu_project.lua
["&Status Bar"] = nil, -- src\editor\menu_view.lua
["&Subdirectories"] = "子文件夹", -- src\editor\findreplace.lua
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
["&Tutorials"] = nil, -- src\editor\menu_help.lua
["&Undo"] = "撤消", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = "往上", -- src\editor\findreplace.lua
["&View"] = "视图", -- src\editor\menu_view.lua
["&Watch Window"] = "监视视窗", -- src\editor\menu_view.lua
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
["About %s"] = "关于 %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = nil, -- src\editor\editor.lua
["Add Watch Expression"] = "添加监视表达式", -- src\editor\editor.lua
@@ -60,25 +54,27 @@ return {
["Analyze"] = "分析", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "自动补全标识符", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "当输入时自动补全", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = nil, -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\toolbar.lua, 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 open file '%s': %s"] = nil, -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "不能处理自动恢复存档: %s", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "不能执行entry point脚本 ('%s')", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "除错动作失败 '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "不能启动除错,没有文档被开启或当前更改过的文档还没保存('%s')", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = nil, -- src\editor\debugger.lua
["Cancel"] = "取消", -- src\editor\findreplace.lua
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
["Choose a project directory"] = "选择项目文件夹", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = "请选...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = nil, -- src\editor\menu_file.lua
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "选择项目文件夹", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = "请选...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = nil, -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "编译或除错前清除输出视窗", -- src\editor\menu_project.lua
["Close &Other Pages"] = "关闭其他页面", -- src\editor\gui.lua
@@ -99,21 +95,22 @@ return {
["Copy selected text to clipboard"] = "复制被选的text到clipboard", -- src\editor\menu_edit.lua
["Correct &Indentation"] = nil, -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "不能激活 '%s' 以除错; 省略后继续进行", -- src\editor\debugger.lua
["Create an empty document"] = "新建空文档", -- src\editor\menu_file.lua
["Create an empty document"] = "新建空文档", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "剪切", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "剪切被选的text到clipboard", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "除错伺服器起始于 %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "除错会话完成 (%s)", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "除错会话于 '%s' 起始", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "除错挂起于 %s:%s (不能激活文档).", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "除错挂起于 '%s:%s' (不能激活文档).", -- src\editor\debugger.lua
["Detach &Process"] = nil, -- src\editor\menu_project.lua
["Directory"] = "文件夹", -- src\editor\findreplace.lua
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
["Do you want to overwrite it?"] = nil, -- src\editor\commands.lua
["Do you want to reload it?"] = "需要重新导入吗?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "需要把更改保存于 '%s'?", -- src\editor\commands.lua
["E&xit"] = "离开", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "输入Lua代码然后按 <Enter> 以执行", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
["Enter replacement text"] = nil, -- src\editor\editor.lua
@@ -124,31 +121,30 @@ return {
["Error"] = "错误", -- src\editor\commands.lua
["Evaluate In Console"] = nil, -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "执行当前项目/文档和更新代码以便得到执行结果", -- src\editor\menu_project.lua
["Execute the current project/file"] = "执行当前项目/文档", -- src\editor\menu_project.lua
["Execute the current project/file"] = "执行当前项目/文档", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "执行出错误", -- src\editor\debugger.lua
["Exit program"] = "离开程式", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "磁碟上的文档 '%s' 已被更改", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "文档 '%s' 的时间戳比 '%s' 更新近; 请检验后再保存", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = nil, -- src\editor\commands.lua
["File '%s' no longer exists."] = "文档 '%s' 已不存在", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = "文档类", -- src\editor\findreplace.lua
["File already exists."] = nil, -- src\editor\commands.lua
["File history"] = "文档历史", -- src\editor\menu_file.lua
["Find &In Files"] = "在文档中查找", -- src\editor\menu_search.lua
["Find &Next"] = "查找下一个", -- src\editor\menu_search.lua
["Find &Previous"] = "查找上一个", -- src\editor\menu_search.lua
["Find In Files"] = "在文档中查找", -- src\editor\findreplace.lua
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
["Find and replace text in files"] = "在文档中查找text然后更换", -- src\editor\menu_search.lua
["Find and replace text"] = "查找text然后更换", -- src\editor\menu_search.lua
["Find and replace text"] = "查找text然后更换", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "在文档中查找", -- src\editor\toolbar.lua
["Find text in files"] = "在文档中查找text", -- src\editor\menu_search.lua
["Find text"] = "查找text", -- src\editor\menu_search.lua
["Find text"] = "查找text", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "查找之前出现的text", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "查找之後将出现的text", -- src\editor\menu_search.lua
["Find"] = "查找", -- src\editor\findreplace.lua
["Find"] = "查找", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "折叠/展开所有代码折叠", -- src\editor\menu_edit.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "找到自动恢复存档和恢复已存对话", -- src\editor\commands.lua
["Found"] = "找到", -- src\editor\findreplace.lua
["Full &Screen"] = "全屏", -- src\editor\menu_view.lua
["Go To Definition"] = nil, -- src\editor\editor.lua
["Go To File..."] = nil, -- src\editor\menu_search.lua
@@ -161,24 +157,26 @@ return {
["Go to symbol"] = nil, -- src\editor\menu_search.lua
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
["In Files"] = "在档案里", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
["Known Files"] = "所知的文档", -- src\editor\commands.lua
["Ln: %d"] = "行: %d", -- src\editor\editor.lua
["Local console"] = "本地主控台", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Lua 解释器", -- src\editor\menu_project.lua
["Map Directory..."] = nil, -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "映射远程请求 '%s' 至 '%s'", -- src\editor\debugger.lua
["Match &case"] = "case匹配", -- src\editor\findreplace.lua
["Match &whole word"] = "全句匹配", -- src\editor\findreplace.lua
["Match case"] = "case匹配", -- src\editor\toolbar.lua
["Match whole word"] = "全句匹配", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "发现混杂的EOL编码", -- src\editor\commands.lua
["Navigate"] = nil, -- src\editor\menu_search.lua
["New &File"] = nil, -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = nil, -- src\editor\filetree.lua
["Open an existing document"] = "打开现存文档", -- src\editor\menu_file.lua
["Open an existing document"] = "打开现存文档", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "打开文档", -- src\editor\commands.lua
["Options"] = "选项", -- src\editor\findreplace.lua
["Outline Window"] = nil, -- src\editor\menu_view.lua
["Outline"] = nil, -- src\editor\outline.lua
["Output (running)"] = "输出 (进行中)", -- src\editor\debugger.lua, src\editor\output.lua
@@ -200,48 +198,59 @@ return {
["Project"] = "项目", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "项目/文档树 视窗", -- src\editor\menu_view.lua
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "唯读", -- src\editor\editor.lua
["R/W"] = "读写", -- src\editor\editor.lua
["Re&place In Files"] = "在文档中替换", -- src\editor\menu_search.lua
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.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 Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "刷新", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "因为有另一个除错在进行,拒绝开启新的除错对话", -- src\editor\debugger.lua
["Regular &expression"] = "正则表达式", -- src\editor\findreplace.lua
["Regular expression"] = "正则表达式", -- src\editor\toolbar.lua
["Remote console"] = "远程主控台", -- src\editor\shellbox.lua
["Rename All Instances"] = nil, -- src\editor\editor.lua
["Replace A&ll"] = "更换全部", -- src\editor\findreplace.lua
["Replace All Selections"] = nil, -- src\editor\editor.lua
["Replace"] = "更换", -- src\editor\findreplace.lua
["Replace all"] = "更换全部", -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "以%s更换无效的UTF8字元", -- src\editor\commands.lua
["Replaced"] = "更换", -- src\editor\findreplace.lua
["Replacing"] = "更换中", -- src\editor\findreplace.lua
["Reset to default layout"] = "重置缺省布局", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
["Run As Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "停止除错", -- src\editor\menu_project.lua
["S&top Process"] = "停止进程", -- src\editor\menu_project.lua
["Save &As..."] = "另存为...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "全部存档", -- src\editor\menu_file.lua
["Save Changes?"] = "存档更新?", -- src\editor\commands.lua
["Save all open documents"] = "保存所有开启的文档", -- src\editor\menu_file.lua
["Save all open documents"] = "保存所有开启的文档", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "文档另存为", -- src\editor\commands.lua
["Save file?"] = "保存文档?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "用新档案名称保存当前文档", -- src\editor\menu_file.lua
["Save the current document"] = "保存当前文档", -- src\editor\menu_file.lua
["Save the current document"] = "保存当前文档", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "在 %s 存档自动恢复", -- src\editor\commands.lua
["Scope"] = "范围", -- src\editor\findreplace.lua
["Scratchpad error"] = "暂存器错误", -- src\editor\debugger.lua
["Searching for"] = "搜索", -- src\editor\findreplace.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
["Select &All"] = "选全部", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = nil, -- src\editor\menu_search.lua
["Select And Find Previous"] = nil, -- src\editor\menu_search.lua
["Select all text in the editor"] = "选编辑器内的所有text", -- src\editor\menu_edit.lua
["Select and Find Next"] = nil, -- src\editor\menu_search.lua
["Select and Find Previous"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
["Set As Start File"] = nil, -- src\editor\filetree.lua
["Set From Current File"] = "从当前文档设置", -- src\editor\menu_project.lua
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\menu_project.lua
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "设置解释器", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "设置项目文件夹", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "设置: 系统", -- src\editor\menu_edit.lua
@@ -251,40 +260,50 @@ return {
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = nil, -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "在当前的位置展现tooltip; 把游标放置于函数的开括号之后", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
["Sort By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "对被选的行进行排列", -- src\editor\menu_edit.lua
["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\menu_project.lua
["Start or continue debugging"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "除错运行 进入子程序/函数", -- src\editor\menu_project.lua
["Step &Over"] = "除错运行 掠过子程序/函数", -- src\editor\menu_project.lua
["Step O&ut"] = "除错运行 离开子程序/函数", -- src\editor\menu_project.lua
["Step into"] = "除错运行 进入子程序/函数", -- src\editor\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
["Step into"] = "除错运行 进入子程序/函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "切换全屏模式", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.lua
["Text not found."] = "寻找不到text", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "API file必须存放在API文件夹中的子文件夹", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
["Toggle Break&point"] = "切换中断点", -- src\editor\menu_project.lua
["Toggle bookmark"] = nil, -- src\editor\menu_edit.lua
["Toggle breakpoint"] = "切换中断点", -- src\editor\menu_project.lua
["Toggle bookmark"] = nil, -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "切换中断点", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "导出文件失败 '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "保存文件失败 '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "停止程序失败 (pid: %d), 代码 %d.", -- src\editor\debugger.lua
["Undo last edit"] = "清除前编辑动作", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "用 '%s' 来看全解析", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "用 '%s' 来显示语句的终结和 '%s' 来进行转换", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "用 'clear' 来清除shell的输出和历史", -- src\editor\shellbox.lua
@@ -292,11 +311,11 @@ return {
["View the outline window"] = nil, -- src\editor\menu_view.lua
["View the output/console window"] = "查看输出/主控台视窗", -- src\editor\menu_view.lua
["View the project/filetree window"] = "查看项目/文件树视窗", -- src\editor\menu_view.lua
["View the stack window"] = "查看堆栈视窗", -- src\editor\menu_view.lua
["View the watch window"] = "查看监视视窗", -- src\editor\menu_view.lua
["View the stack window"] = "查看堆栈视窗", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "查看监视视窗", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "监视", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "欢迎来到互动 Lua interpreter.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "卷绕", -- src\editor\findreplace.lua
["Wrap around"] = "卷绕", -- src\editor\toolbar.lua
["You must save the program first."] = "必须先保存程序", -- src\editor\commands.lua
["Zoom In"] = nil, -- src\editor\menu_view.lua
["Zoom Out"] = nil, -- src\editor\menu_view.lua

View File

@@ -1,26 +1,24 @@
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%d instance"] = {"%d Instanz", "%d Instanzen"}, -- src\editor\findreplace.lua
["%s event failed: %s"] = "Ereignis fehlgeschlagen : %s", -- src\editor\package.lua
["%s%% loaded..."] = "%s%% geladen...", -- src\editor\commands.lua
["&About"] = "&Über", -- src\editor\menu_help.lua
["&Add Watch"] = "&Beobachtungspunkt hinzufügen", -- src\editor\debugger.lua
["&Break"] = "&Unterbrechung", -- src\editor\menu_project.lua
["&Close Page"] = "S&eite schließen", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Community", -- src\editor\menu_help.lua
["&Compile"] = "&Compiler", -- src\editor\menu_project.lua
["&Copy Value"] = "Wert kopieren", -- src\editor\debugger.lua
["&Copy"] = "&Kopieren", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Standard-&Layout", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Beobachtungspunkt entfernen", -- src\editor\debugger.lua
["&Delete"] = "&Entfernen", -- src\editor\filetree.lua
["&Documentation"] = "&Dokumentation", -- src\editor\menu_help.lua
["&Down"] = "&Runter", -- src\editor\findreplace.lua
["&Edit Project Directory"] = "Projektverzeichnis ändern", -- src\editor\filetree.lua
["&Edit Value"] = "Wert editieren", -- src\editor\debugger.lua
["&Edit Watch"] = "&Beobachtungspunkt bearbeiten", -- src\editor\debugger.lua
["&Edit"] = "&Bearbeiten", -- src\editor\menu_edit.lua
["&File"] = "&Datei", -- src\editor\menu_file.lua
["&Find All"] = "&Alle finden", -- src\editor\findreplace.lua
["&Find Next"] = "&Nächsten finden", -- src\editor\findreplace.lua
["&Find"] = "&Finden", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "A&lles ein-/ausklappen", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "&FAQ", -- src\editor\menu_help.lua
@@ -35,8 +33,7 @@ return {
["&Project"] = "&Projekt", -- src\editor\menu_project.lua
["&Redo"] = "&Wiederholen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Umbenennen", -- src\editor\filetree.lua
["&Replace All"] = "&Alles ersetzen", -- src\editor\findreplace.lua
["&Replace"] = "&Ersetzen", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "&Ersetzen", -- src\editor\menu_search.lua
["&Run"] = "&Starten", -- src\editor\menu_project.lua
["&Save"] = "&Speichern", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "&Suchen", -- src\editor\menu_search.lua
@@ -44,14 +41,11 @@ return {
["&Stack Window"] = "&Stapel/Stack", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "De&bugserver starten", -- src\editor\menu_project.lua
["&Status Bar"] = "S&tatuszeile", -- src\editor\menu_view.lua
["&Subdirectories"] = "&Unterverzeichnisse", -- src\editor\findreplace.lua
["&Tool Bar"] = "&Werkzeugleiste", -- src\editor\menu_view.lua
["&Tutorials"] = "&Tutorien", -- src\editor\menu_help.lua
["&Undo"] = "&Rückgängig", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = "&Hoch", -- src\editor\findreplace.lua
["&View"] = "&Ansicht", -- src\editor\menu_view.lua
["&Watch Window"] = "&Beobachtungspunkte", -- src\editor\menu_view.lua
[".&bak on Replace"] = ".&bak bei Ersetzen", -- src\editor\findreplace.lua
["About %s"] = "Über %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Zu Entwurf hinzufügen", -- src\editor\editor.lua
["Add Watch Expression"] = "Beobachtungspunkt hinzufügen", -- src\editor\editor.lua
@@ -61,25 +55,27 @@ return {
["Analyze"] = "&Analyseroutine", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Auto-Vervollständigen von Bezeichnern", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Auto-Vervollständigen beim Tippen", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = "Binärdatei ist als schreibgeschützt angezeigt, da sie nur teilweise geladen wurde.", -- src\editor\commands.lua
["Bookmark"] = "Lese&zeichen", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Programmausführung bei der nächsten ausgeführten Zeile stoppen", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Programmausführung bei der nächsten ausgeführten Zeile stoppen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["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 open file '%s': %s"] = "Kann Datei '%s' nicht öffnen: %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Auto-Wiederherstellen nicht möglich; ungültiges Format: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "Ersetzen in schreibgeschütztem Text nicht möglich.", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Kann Script für Einsprungspunkt ('%s') nicht ausführen.", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Kann Debugserver nicht starten (%s:%d): %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "Kann Debuggen nicht starten für '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Debugging kann nicht gestartet werden wegen internem Fehler '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Debugging kann ohne geöffnete Datei nicht gestartet werden oder wenn die aktuelle Datei nicht gespeichert ist ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Kann Debugserver nicht stoppen wenn er vorher nicht gestartet wurde.", -- src\editor\debugger.lua
["Cancel"] = "Abbrechen", -- src\editor\findreplace.lua
["Cancelled by the user."] = "Durch Benutzer abgebrochen.", -- src\editor\findreplace.lua
["Choose a project directory"] = "Projektverzeichnis auswählen", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = "Wählen...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Liste &löschen", -- src\editor\menu_file.lua
["Choose a directory to map"] = "Bitte Verzeichnis wählen zum virtuellen Einbinden", -- src\editor\filetree.lua
["Choose a project directory"] = "Projektverzeichnis auswählen", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Bitte Verzeichnis zum Durchsuchen auswählen.", -- src\editor\findreplace.lua
["Choose..."] = "Wählen...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Liste &löschen", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Diese Liste löschen", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Vor Kompilieren oder Debuggen das Ausgabefenster löschen", -- src\editor\menu_project.lua
["Close &Other Pages"] = "A&ndere Seiten schließen", -- src\editor\gui.lua
@@ -100,21 +96,22 @@ return {
["Copy selected text to clipboard"] = "Text in Zwischenablage kopieren", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "E&inzug korrigieren", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Konnte Datei '%s' zwecks nicht Debugging aktivieren; fahre ohne die Datei fort.", -- src\editor\debugger.lua
["Create an empty document"] = "Leeres Dokument anlegen", -- src\editor\menu_file.lua
["Create an empty document"] = "Leeres Dokument anlegen", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "A&usschneiden", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Schneide ausgewählten Text in die Zwischenablage hinein", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Debugserver gestartet als %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Debugserver gestoppt als %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Debugging Session beendet (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Debugging Session gestartet '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Debugging angehalten bei %s:%s (konnte Datei nicht aktivieren).", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Debugging angehalten bei '%s:%s' (konnte Datei nicht aktivieren).", -- src\editor\debugger.lua
["Detach &Process"] = "Prozeß abkoppeln", -- src\editor\menu_project.lua
["Directory"] = "Verzeichnis", -- src\editor\findreplace.lua
["Disable Indexing For '%s'"] = "Indizieren ausschalten für '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Soll '%s' gelöscht werden?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Überschreiben?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Neu laden?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Änderungen an '%s' speichern?", -- src\editor\commands.lua
["E&xit"] = "&Beenden", -- src\editor\menu_file.lua
["Enable Indexing"] = "Indizieren aktivieren", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Lua-Code eingeben und Enter drücken zum Ausführen.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Kommandozeilenparameter eingeben (Cancel zum löschen)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Neuen Text eingeben", -- src\editor\editor.lua
@@ -125,31 +122,30 @@ return {
["Error"] = "Fehler", -- src\editor\commands.lua
["Evaluate In Console"] = "In Konsole auswerten", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Aktuelles Projekt/ aktuelle Datei ausführen und Quellcode ändern, um Ergebnisse in Echtzeit zu sehen", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Fehler bei Ausführung", -- src\editor\debugger.lua
["Exit program"] = "Programm beenden", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Datei '%s' wurde auf der Festplatte geändert.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Datei '%s' hat neueren Zeitstempel als wiederhergestellte Datei '%s'; bitte vor dem Speichern kontrollieren.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Datei '%s' fehlt und kann nicht wiederhergestellt werden.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Datei '%s' existiert nicht mehr.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = "Dateityp", -- src\editor\findreplace.lua
["File already exists."] = "Datei existiert bereits.", -- src\editor\commands.lua
["File history"] = "Dateiverlauf", -- src\editor\menu_file.lua
["Find &In Files"] = "Finde &in Dateien", -- src\editor\menu_search.lua
["Find &Next"] = "Finde &Nächste", -- src\editor\menu_search.lua
["Find &Previous"] = "Finde &Vorherige", -- src\editor\menu_search.lua
["Find In Files"] = "Finde in Dateien", -- src\editor\findreplace.lua
["Find and insert library function"] = "Suchen und Einfügen von Funktion aus Bibliothek", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Finde und ersetze Text in Dateien", -- src\editor\menu_search.lua
["Find and replace text"] = "Finde und ersetze Text", -- src\editor\menu_search.lua
["Find and replace text"] = "Finde und ersetze Text", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Finde in dateien", -- src\editor\toolbar.lua
["Find text in files"] = "Finde Text in Dateien", -- src\editor\menu_search.lua
["Find text"] = "Finde Text", -- src\editor\menu_search.lua
["Find text"] = "Finde Text", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Finde vorheriges Auftreten des Textes", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Finde nächstes Auftreten des Textes", -- src\editor\menu_search.lua
["Find"] = "Finden", -- src\editor\findreplace.lua
["Find"] = "Finden", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Alle Stellen im Code ein-/ausklappen ", -- src\editor\menu_edit.lua
["Found %d instance."] = {"Eine Instanz gefunden", "%d Instanzen gefunden."}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Autowiederherstellen-Aufzeichnung gefunden und vorherige Sitzung wiederhergestellt.", -- src\editor\commands.lua
["Found"] = "Gefunden", -- src\editor\findreplace.lua
["Full &Screen"] = "&Vollbild", -- src\editor\menu_view.lua
["Go To Definition"] = "Gehe zu Definition", -- src\editor\editor.lua
["Go To File..."] = "Gehe zu Datei...", -- src\editor\menu_search.lua
@@ -162,24 +158,26 @@ return {
["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
["Ignore and don't index symbols from files in the selected directory"] = "Dateien im ausgewählten Verzeichnis ignorieren und keine Symbole indizieren.", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Ignorierter Fehler im Debugger-Init-Code: %s.", -- src\editor\debugger.lua
["In Files"] = "In Dateien", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = "%d Dateien indizieren: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Indizierung abgeschlossen.", -- src\editor\outline.lua
["Insert Library Function..."] = "Füge Funktion aus Bibliothek ein", -- src\editor\menu_search.lua
["Known Files"] = "Bekannte Dateien", -- src\editor\commands.lua
["Ln: %d"] = "Zeile: %d", -- src\editor\editor.lua
["Local console"] = "Lokale Konsole", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "&Lua Interpreter", -- src\editor\menu_project.lua
["Mapped remote request for '%s' to '%s'."] = "Mapped remote request for '%s' to '%s'.", -- src\editor\debugger.lua
["Match &case"] = "&Groß-/Kleinschreibung", -- src\editor\findreplace.lua
["Match &whole word"] = "Ganzes &Wort", -- src\editor\findreplace.lua
["Map Directory..."] = "Verzeichnis virtuell einbinden...", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Fern-Aufforderung für '%s' auf '%s' abgebildet.", -- src\editor\debugger.lua
["Match case"] = "Groß-/Kleinschreibung", -- src\editor\toolbar.lua
["Match whole word"] = "Ganzes Wort", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Gemischte End-of-Line Kodierung entdeckt.", -- src\editor\commands.lua
["Navigate"] = "Navigieren", -- src\editor\menu_search.lua
["New &File"] = "Neue &Datei", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Mit Standardanwendung öffnen", -- src\editor\filetree.lua
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\menu_file.lua
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Öffne Datei", -- src\editor\commands.lua
["Options"] = "Optionen", -- src\editor\findreplace.lua
["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
@@ -201,48 +199,59 @@ return {
["Project"] = "Projekt", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "&Projekt/Datei Fenster", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Kommandozeilenparameter angeben", -- src\editor\menu_project.lua
["Queued %d files to index."] = "%d Dateien zum Indizieren vorgemerkt.", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Ersetze in &Dateien", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Ausgewählte Zeilen neu einrücken", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = "Ende des Textes erreicht, setze am Beginn fort.", -- src\editor\findreplace.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 Index"] = "Index erneuern", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Erneuere indizierte Symbole in Dateien des ausgewählten Verzeichnisses", -- src\editor\outline.lua
["Refresh"] = "Aktualisieren", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Starten einer neuen Debuggingsession abgelehnt, da bereits eine läuft.", -- src\editor\debugger.lua
["Regular &expression"] = "&Regulärer Ausdruck", -- src\editor\findreplace.lua
["Remote console"] = "Fensteuerungs-Konsole", -- src\editor\shellbox.lua
["Regular expression"] = "Regulärer Ausdruck", -- src\editor\toolbar.lua
["Remote console"] = "Fernsteuerungs-Konsole", -- src\editor\shellbox.lua
["Rename All Instances"] = "Umbenennen aller Instanzen", -- src\editor\editor.lua
["Replace A&ll"] = "A&lles ersetzen", -- src\editor\findreplace.lua
["Replace All Selections"] = "Alle Auswahlen ersetzen", -- src\editor\editor.lua
["Replace"] = "Ersetzen", -- src\editor\findreplace.lua
["Replace all"] = "Alles ersetzen", -- src\editor\toolbar.lua
["Replace next instance"] = "Nächste Instanz ersetzen", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"Eine Instanz ersetzt.", "%d Instanzen ersetzt."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Unbekanntes UTF8-Symbol ersetzt mit %s.", -- src\editor\commands.lua
["Replaced"] = "Ersetzt:", -- src\editor\findreplace.lua
["Replacing"] = "Am Ersetzen", -- src\editor\findreplace.lua
["Reset to default layout"] = "Standard-Layout wiederherstellen", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
["Run As Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
["Run To Cursor"] = "Stoppe Ausführung an Cursorposition", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\toolbar.lua
["Run to cursor"] = "Stoppe Ausführung an Cursorposition", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "Debugging a&nhalten", -- src\editor\menu_project.lua
["S&top Process"] = "Prozeß &anhalten", -- src\editor\menu_project.lua
["Save &As..."] = "S&peichern als...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "&Alle Speichern", -- src\editor\menu_file.lua
["Save Changes?"] = "Änderungen speichern?", -- src\editor\commands.lua
["Save all open documents"] = "Alle offenen Dokumente speichern", -- src\editor\menu_file.lua
["Save all open documents"] = "Alle offenen Dokumente speichern", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Datei speichern als", -- src\editor\commands.lua
["Save file?"] = "Datei speichern?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Aktuelles Dokument unter neuem Namen speichern", -- src\editor\menu_file.lua
["Save the current document"] = "Aktuelles Dokument speichern", -- src\editor\menu_file.lua
["Save the current document"] = "Aktuelles Dokument speichern", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "%s Autowiederherstellen gespeichert.", -- src\editor\commands.lua
["Scope"] = "Richtung", -- src\editor\findreplace.lua
["Scratchpad error"] = "Fehler im Entwurf", -- src\editor\debugger.lua
["Searching for"] = "Suchen nach", -- src\editor\findreplace.lua
["Search direction"] = "Suchrichtung", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Suche in Unterverzeichnissen", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Suche nach '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Ausgew.: %d/%d", -- src\editor\editor.lua
["Select &All"] = "&Alles Auswählen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Auswählen und nächstes finden", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Auswählen und vorheriges finden", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Kompletten Text im Editor auswählen", -- src\editor\menu_edit.lua
["Select and Find Next"] = "Auswählen und nächstes finden", -- src\editor\menu_search.lua
["Select and Find Previous"] = "Auswählen und vorheriges finden", -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = "Wort unter dem Cursor auswählen und nächstes Auftauchen finden", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Wort unter dem Cursor auswählen und vorheriges Auftauchen finden", -- src\editor\menu_search.lua
["Set As Start File"] = "Als Startdatei definieren.", -- src\editor\filetree.lua
["Set From Current File"] = "Anhand der aktuellen Datei festlegen", -- src\editor\menu_project.lua
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\menu_project.lua
["Set To Project Directory"] = "Setze als Projektverzeichnis", -- src\editor\findreplace.lua
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = "Setze Suchverzeichnis", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Wähle zu benutzenden Interpreter aus", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Lege zu benutzendes Projektverzeichnis fest", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Einstellungen: System", -- src\editor\menu_edit.lua
@@ -252,40 +261,50 @@ return {
["Show Hidden Files"] = "Zeige versteckte Dateien", -- src\editor\filetree.lua
["Show Location"] = "Ordner öffnen", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Zeige alle Dateien", -- src\editor\filetree.lua
["Show context"] = "Zeige Kontext", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Zeige Dateien die zuvor versteckt wurden", -- src\editor\filetree.lua
["Show multiple result windows"] = "Zeige mehrere Ergebnisfenster", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Zeige Tooltip für aktuelle Position; setze Cursor hinter die öffnende Klammer der Funktion", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Statuszeile zeigen/verstecken", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Werkzeugleiste zeigen/verstecken", -- src\editor\menu_view.lua
["Sort By Name"] = "Sortiere nach Namen", -- src\editor\outline.lua
["Sort selected lines"] = "Ausgewählte Zeilen sortieren", -- src\editor\menu_edit.lua
["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\menu_project.lua
["Start or continue debugging"] = "Debuggen starten/fortsetzen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Schritt h&inein", -- src\editor\menu_project.lua
["Step &Over"] = "&Überspringen", -- src\editor\menu_project.lua
["Step O&ut"] = "Schritt &raus", -- src\editor\menu_project.lua
["Step into"] = "Schritt hinein", -- src\editor\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
["Step into"] = "Schritt hinein", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Überspringen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Beende debuggen und setze den Prozeß fort", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Vollbild an/aus", -- src\editor\menu_view.lua
["Symbol Index"] = "Symbolindex", -- src\editor\outline.lua
["Text not found."] = "Text nicht gefunden.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "Die API-Datei muß sich in einem Unterverzeichnis des API-Vereichnisses befinden.", -- src\editor\autocomplete.lua
["The API file must be located in a subdirectory of the API directory."] = "Die API-Datei muß sich in einem Unterverzeichnis des API-Verzeichnisses befinden.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\menu_edit.lua
["Toggle Break&point"] = "&Haltepunkt an/aus", -- 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
["Toggle bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = "Kann Datei '%s' nicht löschen: %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Scheitern beim Laden von Datei '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Scheitern beim umbenennen von Datei '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Scheitern beim Speichern von Datei '%s' : %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Scheitern beim Stoppen des Prozesses (pid : %d), code %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Letzte Änderung rückgängig machen", -- src\editor\menu_edit.lua
["Unmap Directory"] = "virtuelle Einbindung beenden", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "'%s' ist nicht mehr Startdatei", -- src\editor\filetree.lua
["Updated %d file."] = {"Eine Datei aktualisiert", "%d Dateien aktualisiert."}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Aktualisiere Symbolindex und Einstellungen...", -- src\editor\outline.lua
["Use %s to close."] = "%s zum Schließen.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "'%s' für eine komplette Beschreibung.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "'%s' um Zeilenende-Codes zu sehen, und '%s' um sie zu konvertieren.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "'clear' um Ausgabefenster und Verlauf zu löschen.", -- src\editor\shellbox.lua
@@ -293,11 +312,11 @@ return {
["View the outline window"] = "Übersichtsfenster ansehen", -- src\editor\menu_view.lua
["View the output/console window"] = "Ausgabe-/Konsolenfenster ansehen", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Projekt-/Dateifenster ansehen", -- src\editor\menu_view.lua
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\menu_view.lua
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\menu_view.lua
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Beobachtungspunkte", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Willkommen zum interaktiven Lua-Interpretr!", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "Am Anfang fortsetzen", -- src\editor\findreplace.lua
["Wrap around"] = "Am Anfang fortsetzen", -- src\editor\toolbar.lua
["You must save the program first."] = "Erst das Programm speichern.", -- src\editor\commands.lua
["Zoom In"] = "Hineinzoomen", -- src\editor\menu_view.lua
["Zoom Out"] = "Herauszoomen", -- src\editor\menu_view.lua

View File

@@ -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
}

View File

@@ -1,27 +1,24 @@
-- 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
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "&Pri", -- src\editor\menu_help.lua
["&Add Watch"] = "&Aldoni observadaĵon", -- src\editor\debugger.lua
["&Break"] = "&Haltigi", -- src\editor\menu_project.lua
["&Close Page"] = "&Fermi paĝon", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Komunumo", -- src\editor\menu_help.lua
["&Compile"] = "&Kompili", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "&Kopii", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "&Defaŭlta aranĝo", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Forigi observadaĵon", -- src\editor\debugger.lua
["&Delete"] = "&Forigi", -- src\editor\filetree.lua
["&Documentation"] = "&Dokumentado", -- src\editor\menu_help.lua
["&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
@@ -36,8 +33,7 @@ return {
["&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
["&Replace"] = "&Anstataŭi", -- src\editor\menu_search.lua
["&Run"] = "&Plenumi", -- src\editor\menu_project.lua
["&Save"] = "&Konservi", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "&Serĉi", -- src\editor\menu_search.lua
@@ -45,14 +41,11 @@ return {
["&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
@@ -62,25 +55,27 @@ return {
["Analyze"] = "Analizi", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Aŭtomate kompletigi fontkodnomojn", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Aŭtomate kompletigi dumtajpe", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = "Legosigno", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Haltigi plenumon ĉe la sekva plenumata linio da fontkodo", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Haltigi plenumon ĉe la sekva plenumata linio da fontkodo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["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 open file '%s': %s"] = "Ne povas malfermi la dosieron '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Ne povas analizi aŭtomatrestaŭran dosieron; neprava dosierformo: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Ne povas plenumi la enirejan skripton", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Ne povas ekfunkciigi sencimigilo-servilon ĉe %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Ne povas komenci sencimigan seancon pro interna eraro", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Ne povas ek-sencimigon sen malfermita dosiero aŭ kun la kuranta dosiero nekonserviĝas ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Ne povas malfunkciigi sencimigilo-servilon, ĉar ĝi ne funkciantas", -- src\editor\debugger.lua
["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
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "Elekti projektan dosierujon", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = "Elekti...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Viŝi anojn", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Senlistigi tiujn ĉi anojn", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Viŝi la eligan fenestron antaŭ kompilado aŭ sencimigado", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fermi &aliajn paĝojn", -- src\editor\gui.lua
@@ -101,21 +96,22 @@ return {
["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
["Create an empty document"] = "Krei malplenan dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "El&tondi", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Eltondi la elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Sencimigilo-servilon ekfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Sencimigilo-servilon malfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sencimiga seanco estas finita (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sencimiga seanco komencitas en '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "La sencimigo estis finetita ĉe %s:%s (ne povis aktivi la dosieron).", -- src\editor\debugger.lua
["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
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Ĉu vi volas forigi je '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Ĉu vi volas superskribi ĉi tiun?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Ĉu vi volas reŝarĝi tiun ĉi?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Ĉu vi volas konservi ĉiujn ŝanĝojn, kiuj enfaris je '%s'?", -- src\editor\commands.lua
["E&xit"] = "&Eliri", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Enigu fontkodon de Lua kaj premu enenklavon por plenumi ĝin.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Enigu komandliniajn parametrojn (uzu nulig-butonon por viŝi)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Enigu anstataŭigan tekston", -- src\editor\editor.lua
@@ -126,31 +122,30 @@ return {
["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
["Execute the current project/file"] = "Plenumi la kurantan projekton/dosieron", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Eraro de plenumo", -- src\editor\debugger.lua
["Exit program"] = "Eliri programon", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "La dosiero nome de '%s' ŝanĝitis en disko.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "La dosiero nome de '%s' havas pli freŝan tempindikon, ol la ripardosiero '%s'; bonvolu ekzameni ĝin antaû konservi.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "La dosiero nome de '%s' forestas kaj ne povas esti reakirita.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "La dosiero nome de '%s' ne plu ekzistas.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File 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 and replace text"] = "Traserĉi kaj anstataŭi tekston", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Traserĉi en dosieroj", -- src\editor\toolbar.lua
["Find text in files"] = "Traserĉi tekston en dosieroj", -- src\editor\menu_search.lua
["Find text"] = "Traserĉi tekston", -- src\editor\menu_search.lua
["Find text"] = "Traserĉi tekston", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Traserĉi la antaŭantan aperaĵon da teksto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Pluserĉi la aperaĵon da teksto", -- src\editor\menu_search.lua
["Find"] = "Traserĉi", -- src\editor\findreplace.lua
["Find"] = "Traserĉi", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Kaŝi aŭ malkaŝi ĉiujn faldaĵojn da fontkodoj", -- src\editor\menu_edit.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Trovis aŭtomatrestaŭran dosieron kaj riparis konservitan seancon.", -- src\editor\commands.lua
["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
@@ -163,24 +158,26 @@ return {
["Go to symbol"] = nil, -- src\editor\menu_search.lua
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Ignoris eraron en pravaloriza kodo de la sencimigilo: %s.", -- src\editor\debugger.lua
["In Files"] = "Ene de dosieroj", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
["Known Files"] = "Konataj dosieroj", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Loka konzolo", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Interpretilo de Lua", -- src\editor\menu_project.lua
["Map Directory..."] = nil, -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Mapi faran peton pri '%s' al '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Atenti &usklecon", -- src\editor\findreplace.lua
["Match &whole word"] = "Atenti &plenan vorton", -- src\editor\findreplace.lua
["Match case"] = "Atenti usklecon", -- src\editor\toolbar.lua
["Match whole word"] = "Atenti plenan vorton", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Detektis kodoprezentojn miksitajn linifinajn", -- src\editor\commands.lua
["Navigate"] = nil, -- src\editor\menu_search.lua
["New &File"] = "Nova &dosiero", -- src\editor\filetree.lua
["OVR"] = "SUS", -- src\editor\editor.lua
["Open With Default Program"] = "Malfermi per la defaŭlta programo", -- src\editor\filetree.lua
["Open an existing document"] = "Malfermi jaman dokumenton", -- src\editor\menu_file.lua
["Open an existing document"] = "Malfermi jaman dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Malfermi dosieron", -- src\editor\commands.lua
["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
@@ -202,48 +199,59 @@ return {
["Project"] = "Projekto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Projekta/&Dosierarba Fenestro", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Doni komandliniajn parametrojn", -- src\editor\menu_project.lua
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "L/A", -- src\editor\editor.lua
["R/W"] = "L/S", -- src\editor\editor.lua
["Re&place In Files"] = "Anstataŭi en dosieroj", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Realinei elektitajn liniojn", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.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 Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "Refreŝigu", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Peto por komenci novan sencimigan seancon malakceptis, ĉar seanco jam faratas.", -- src\editor\debugger.lua
["Regular &expression"] = "Regul&esprimo", -- src\editor\findreplace.lua
["Regular expression"] = "Regul&esprimo", -- src\editor\toolbar.lua
["Remote console"] = "Fora konzolo", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renomigi ĉiujn aperaĵojn", -- src\editor\editor.lua
["Replace A&ll"] = "Anstataŭi ĉ&ion", -- src\editor\findreplace.lua
["Replace All Selections"] = "Anstataŭi ĉiujn elektojn", -- src\editor\editor.lua
["Replace"] = "Anstataŭi", -- src\editor\findreplace.lua
["Replace all"] = "Anstataŭi ĉion", -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Anstataŭis UTF8-an signon per %s.", -- src\editor\commands.lua
["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
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "&Fini sencimigo", -- src\editor\menu_project.lua
["S&top Process"] = "&Fini procezon", -- src\editor\menu_project.lua
["Save &As..."] = "Konservi &kiel...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Konservi ĉ&ion", -- src\editor\menu_file.lua
["Save Changes?"] = "Ĉu konservi ĉiujn ŝanĝojn?", -- src\editor\commands.lua
["Save all open documents"] = "Konservi ĉiujn malfermajn dokumentojn", -- src\editor\menu_file.lua
["Save all open documents"] = "Konservi ĉiujn malfermajn dokumentojn", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Konservi dosieron kiel", -- src\editor\commands.lua
["Save file?"] = "Ĉu konservi dosieron?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Konservi la kurantan dokumenton kun dosiero novanome", -- src\editor\menu_file.lua
["Save the current document"] = "Konservi la kurantan dokumenton", -- src\editor\menu_file.lua
["Save the current document"] = "Konservi la kurantan dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Konservis aŭtomatrestaŭron je %s.", -- src\editor\commands.lua
["Scope"] = "Amplekso", -- src\editor\findreplace.lua
["Scratchpad error"] = "Eraro de malnetdosiero", -- src\editor\debugger.lua
["Searching for"] = "Serĉanti pri", -- src\editor\findreplace.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Ele: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Elekti &ĉion", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Elekti kaj pluserĉi", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Elekti kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Elekti la tekston en la redaktilo", -- src\editor\menu_edit.lua
["Select 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 As Start File"] = nil, -- src\editor\filetree.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 To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set project directory from current file"] = "Precizigi la projektan dosierujon per la kurantan dosieron", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Precizigi la interpretiloton", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Precizigi la projekt-dosierujoton", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Agordoj de la sistemo", -- src\editor\menu_edit.lua
@@ -253,40 +261,50 @@ return {
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
["Show Location"] = "Montri lokon", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = nil, -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Montri ŝpruchelpilon pri la kuranta pozicio; meti la tajpmontrilon preter la ronda ekkrampo de la funkcio", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Montri/Kaŝi la statan breton", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Montri/Kaŝi la ilobreton", -- src\editor\menu_view.lua
["Sort By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "Ordi la elektitajn liniojn", -- src\editor\menu_edit.lua
["Source"] = "Fontkodo", -- src\editor\menu_edit.lua
["Stack"] = "Stako", -- src\editor\debugger.lua
["Start &Debugging"] = "Ek-&sencimigi", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Komenci aŭ pluigi sencimigon", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Komenci aŭ pluigi sencimigon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Eniri &enen", -- src\editor\menu_project.lua
["Step &Over"] = "Trans&salti", -- src\editor\menu_project.lua
["Step O&ut"] = "Eliri el", -- src\editor\menu_project.lua
["Step into"] = "Eniri enen", -- src\editor\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
["Step into"] = "Eniri enen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Eliri el la kuranta funkcio", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Transsalti", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Fini sencimigon kaj plenumadi la procezon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Fini la nunfunkciatan procezon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Interŝanĝi al aŭ el plenekrana reĝimo", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.lua
["Text not found."] = "Teksto ne trovitis", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "La dosiero de API devas troviĝi en subdosierujo de la API-a dosierujo.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Baskuli legosignon", -- src\editor\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
["Toggle bookmark"] = "Baskuli legosignon", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Baskuli haltopunkto", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Ne kapablas ŝarĝi je la dosiero '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Ne kapablas renomigi je la dosiero '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Ne kapablas konservi je la dosiero '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Ne kapablas fini la programon (pid: %d), kodo %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Malfari la antaŭan redakton", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Uzu je '%s' por vidi plenan priskribon", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Uzu je '%s' por montri linifinojn kaj je '%s' por konverti ilin", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Tajpu 'clear' por viŝi la eligon kaj historion de la ŝelo.", -- src\editor\shellbox.lua
@@ -294,11 +312,11 @@ return {
["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
["View the stack window"] = "Vidi la stako-fenestron", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Vidi la observado-fenestron", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Observado", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bonvenon al la interaga interpretilo de Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "&Ĉirkaŭflui", -- src\editor\findreplace.lua
["Wrap around"] = "Ĉirkaŭflui", -- src\editor\toolbar.lua
["You must save the program first."] = "Vi unue devas konservi la programon.", -- src\editor\commands.lua
["Zoom In"] = "Zomi", -- src\editor\menu_view.lua
["Zoom Out"] = "Malzomi", -- src\editor\menu_view.lua

View File

@@ -1,27 +1,24 @@
-- Traducción realiazada por Iñigo Sola
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%d instance"] = nil, -- src\editor\findreplace.lua
["%s event failed: %s"] = nil, -- src\editor\package.lua
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "&Acerca de...", -- src\editor\menu_help.lua
["&Add Watch"] = "Añadir observación", -- src\editor\debugger.lua
["&Break"] = "Ruptura", -- src\editor\menu_project.lua
["&Close Page"] = "Cerrar página", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = nil, -- src\editor\menu_help.lua
["&Compile"] = "Compilar", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Diseño por defecto", -- src\editor\menu_view.lua
["&Delete Watch"] = "Eliminar observación", -- src\editor\debugger.lua
["&Delete"] = nil, -- src\editor\filetree.lua
["&Documentation"] = nil, -- src\editor\menu_help.lua
["&Down"] = nil, -- src\editor\findreplace.lua
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
["&Edit Value"] = nil, -- src\editor\debugger.lua
["&Edit Watch"] = "Editar observación", -- src\editor\debugger.lua
["&Edit"] = "Editar", -- src\editor\menu_edit.lua
["&File"] = "Archivo", -- src\editor\menu_file.lua
["&Find All"] = nil, -- src\editor\findreplace.lua
["&Find Next"] = nil, -- src\editor\findreplace.lua
["&Find"] = "Buscar", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Plegar/desplegar todo", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
@@ -36,8 +33,7 @@ return {
["&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
["&Replace"] = "Remplazar", -- src\editor\menu_search.lua
["&Run"] = "Ejecutar", -- src\editor\menu_project.lua
["&Save"] = "Guardar", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "Buscar", -- src\editor\menu_search.lua
@@ -45,14 +41,11 @@ return {
["&Stack Window"] = "Ventana de la pila de ejecución", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Lanzar servidor de depuración", -- src\editor\menu_project.lua
["&Status Bar"] = nil, -- src\editor\menu_view.lua
["&Subdirectories"] = nil, -- src\editor\findreplace.lua
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
["&Tutorials"] = nil, -- src\editor\menu_help.lua
["&Undo"] = "Deshacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = nil, -- src\editor\findreplace.lua
["&View"] = "Ver", -- src\editor\menu_view.lua
["&Watch Window"] = "Ventana de observaciones", -- src\editor\menu_view.lua
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
["About %s"] = "Acerca de %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Añadir al borrador", -- src\editor\editor.lua
["Add Watch Expression"] = "Añadir expresión de observación", -- src\editor\editor.lua
@@ -62,25 +55,27 @@ return {
["Analyze"] = "Analizar", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Autocompletar mientras se escribe", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = nil, -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- 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\toolbar.lua, 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 open file '%s': %s"] = nil, -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "No se puede procesar la autorrecuperación; formato inválido: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "No se pude ejecutar el punto de entrada del script (%s).", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "No se puede iniciar la sesión de depuración debido a un error interno '%s'.'", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "No se puede iniciar la depuración sin abrir un archivo o si no ha sido guardado ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = nil, -- src\editor\debugger.lua
["Cancel"] = nil, -- src\editor\findreplace.lua
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
["Choose a project directory"] = "Elegir el directorio del proyecto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = nil, -- src\editor\menu_file.lua
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "Elegir el directorio del proyecto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = nil, -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = nil, -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Limpiar la ventana de salida antes de compilar o depurar", -- src\editor\menu_project.lua
["Close &Other Pages"] = nil, -- src\editor\gui.lua
@@ -101,21 +96,22 @@ return {
["Copy selected text to clipboard"] = "Copiar el texto seleccionado al portapapeles", -- src\editor\menu_edit.lua
["Correct &Indentation"] = nil, -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "No se pudo activar el archivo '%s' para la depuración; continuar sin él.", -- src\editor\debugger.lua
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\menu_file.lua
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "Cortar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Cortar el texto selecionado al portapapeles", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%s", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
["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
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
["Do you want to overwrite it?"] = nil, -- src\editor\commands.lua
["Do you want to reload it?"] = "¿Quieres recargarlo?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "¿Quieres guardar los cambios en '%s'?", -- src\editor\commands.lua
["E&xit"] = "Salir", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Introduce código Lua y pulsa <Entrer> para ejecutarlo.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
["Enter replacement text"] = nil, -- src\editor\editor.lua
@@ -126,31 +122,30 @@ return {
["Error"] = "Error", -- src\editor\commands.lua
["Evaluate In Console"] = "Evaluar en consola", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Ejecutar el proyecto/archivo actual y manteniendo actualizado el código para ver resultados en tiempo real", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Error de ejecución", -- src\editor\debugger.lua
["Exit program"] = "Salir del programa", -- src\editor\menu_file.lua
["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
["File history"] = "Historial de archivos", -- src\editor\menu_file.lua
["Find &In Files"] = "Buscar en archivos", -- src\editor\menu_search.lua
["Find &Next"] = "Buscar siguiente", -- src\editor\menu_search.lua
["Find &Previous"] = "Buscar anterior", -- src\editor\menu_search.lua
["Find In Files"] = nil, -- src\editor\findreplace.lua
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
["Find and replace text in files"] = "Buscar y remplazar texto en archivos", -- src\editor\menu_search.lua
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\menu_search.lua
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = nil, -- src\editor\toolbar.lua
["Find text in files"] = "Buscar texto en archivos", -- src\editor\menu_search.lua
["Find text"] = "Buscar texto", -- src\editor\menu_search.lua
["Find text"] = "Buscar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Buscar la anterior aparición del texto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Buscar la siguiente aparecición del texto", -- src\editor\menu_search.lua
["Find"] = nil, -- src\editor\findreplace.lua
["Find"] = nil, -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Plegar o desplegar todo el código plegado", -- src\editor\menu_edit.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Encontrada autorrecuperación y sesión restaurada.", -- src\editor\commands.lua
["Found"] = nil, -- src\editor\findreplace.lua
["Full &Screen"] = "Pantalla completa", -- src\editor\menu_view.lua
["Go To Definition"] = nil, -- src\editor\editor.lua
["Go To File..."] = nil, -- src\editor\menu_search.lua
@@ -163,24 +158,26 @@ return {
["Go to symbol"] = nil, -- src\editor\menu_search.lua
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
["In Files"] = nil, -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
["Known Files"] = "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
["Map Directory..."] = nil, -- src\editor\filetree.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\toolbar.lua
["Match whole word"] = nil, -- src\editor\toolbar.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\menu_file.lua
["Open an existing document"] = "Abrir un documento existente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Abrir archivo", -- src\editor\commands.lua
["Options"] = nil, -- src\editor\findreplace.lua
["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
@@ -202,48 +199,59 @@ return {
["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
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Remplazar en archivos", -- src\editor\menu_search.lua
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.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 Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "Refrescar", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "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\toolbar.lua
["Remote console"] = "Consola remota", -- src\editor\shellbox.lua
["Rename All Instances"] = nil, -- src\editor\editor.lua
["Replace A&ll"] = nil, -- src\editor\findreplace.lua
["Replace All Selections"] = nil, -- src\editor\editor.lua
["Replace"] = nil, -- src\editor\findreplace.lua
["Replace all"] = nil, -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = 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
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "Parar depuración", -- src\editor\menu_project.lua
["S&top Process"] = "Parar proceso", -- src\editor\menu_project.lua
["Save &As..."] = "Guardar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Guardar todo", -- src\editor\menu_file.lua
["Save Changes?"] = "¿Guardar cambios?", -- src\editor\commands.lua
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\menu_file.lua
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Guardar archivo como", -- src\editor\commands.lua
["Save file?"] = "¿Guardar archivo?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Guardar el documento actual en un archivo con un nombre nuevo", -- src\editor\menu_file.lua
["Save the current document"] = "Guardar el documento actual", -- src\editor\menu_file.lua
["Save the current document"] = "Guardar el documento actual", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Guardar autorrecuperación en %s.", -- src\editor\commands.lua
["Scope"] = nil, -- src\editor\findreplace.lua
["Scratchpad error"] = "Error en el borrador", -- src\editor\debugger.lua
["Searching for"] = nil, -- src\editor\findreplace.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
["Select &All"] = "Seleccionar todo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = nil, -- src\editor\menu_search.lua
["Select And Find Previous"] = nil, -- src\editor\menu_search.lua
["Select all text in the editor"] = "Seleccionar todo el texto en el editor", -- src\editor\menu_edit.lua
["Select and Find Next"] = nil, -- src\editor\menu_search.lua
["Select and Find Previous"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
["Set As Start File"] = nil, -- src\editor\filetree.lua
["Set From Current File"] = nil, -- src\editor\menu_project.lua
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\menu_project.lua
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Establecer el intérprete a ser usado", -- src\editor\menu_project.lua
["Set the project directory to be used"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = nil, -- src\editor\menu_edit.lua
@@ -253,40 +261,50 @@ return {
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = nil, -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "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 By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_edit.lua
["Source"] = nil, -- src\editor\menu_edit.lua
["Stack"] = nil, -- src\editor\debugger.lua
["Start &Debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
["Start or continue debugging"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Paso dentro", -- src\editor\menu_project.lua
["Step &Over"] = "Paso sin entrar", -- src\editor\menu_project.lua
["Step O&ut"] = "Paso fuera", -- src\editor\menu_project.lua
["Step into"] = "Paso dentro", -- src\editor\menu_project.lua
["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
["Step into"] = "Paso dentro", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Paso sin entrar", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Conmutar el modo de pantalla completa", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.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 bookmark"] = nil, -- src\editor\menu_edit.lua
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
["Toggle bookmark"] = nil, -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "No se pudo cargar el archivo '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "No se pudo guardar el archivo '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "No se puedo parar el programa (pid: %d), código %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Deshacer la última edición", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = nil, -- src\editor\editor.lua
["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
@@ -294,11 +312,11 @@ return {
["View the outline window"] = nil, -- src\editor\menu_view.lua
["View the output/console window"] = "Ver ventana de salida/consola", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Ver la ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\menu_view.lua
["View the watch window"] = "Ver la ventana de observación", -- src\editor\menu_view.lua
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Ver la ventana de observación", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = 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\toolbar.lua
["You must save the program first."] = "Debes guardar el programa primero", -- src\editor\commands.lua
["Zoom In"] = nil, -- src\editor\menu_view.lua
["Zoom Out"] = nil, -- src\editor\menu_view.lua

View File

@@ -1,26 +1,24 @@
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
["%s%% loaded..."] = "%s%% chargé", -- src\editor\commands.lua
["&About"] = "&À propos", -- src\editor\menu_help.lua
["&Add Watch"] = "&Ajouter une expression", -- src\editor\debugger.lua
["&Break"] = "&Interrompre", -- src\editor\menu_project.lua
["&Close Page"] = "&Fermer la page", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Communauté", -- src\editor\menu_help.lua
["&Compile"] = "&Compiler", -- src\editor\menu_project.lua
["&Copy Value"] = "Copier la &valeur", -- src\editor\debugger.lua
["&Copy"] = "Co&pier", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Affichage par &défaut", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Supprimer une expression", -- src\editor\debugger.lua
["&Delete"] = "&Supprimer", -- src\editor\filetree.lua
["&Documentation"] = "&Documentation", -- src\editor\menu_help.lua
["&Down"] = "Vers le &bas", -- src\editor\findreplace.lua
["&Edit Project Directory"] = "&Modifier le répertoire de projet", -- src\editor\filetree.lua
["&Edit Value"] = "&Modifier une valeur", -- src\editor\debugger.lua
["&Edit Watch"] = "&Modifier une expression", -- src\editor\debugger.lua
["&Edit"] = "É&dition", -- src\editor\menu_edit.lua
["&File"] = "&Fichier", -- src\editor\menu_file.lua
["&Find All"] = "&Rechercher tout", -- src\editor\findreplace.lua
["&Find Next"] = "&Rechercher", -- src\editor\findreplace.lua
["&Find"] = "&Rechercher", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Re&plier/Déplier tout", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "&Foire aux questions" , -- src\editor\menu_help.lua
@@ -35,8 +33,7 @@ return {
["&Project"] = "&Projet", -- src\editor\menu_project.lua
["&Redo"] = "&Rétablir", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Renommer", -- src\editor\filetree.lua
["&Replace All"] = "Remplacer &tout", -- src\editor\findreplace.lua
["&Replace"] = "Re&mplacer", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "Re&mplacer", -- src\editor\menu_search.lua
["&Run"] = "&Exécuter", -- src\editor\menu_project.lua
["&Save"] = "&Enregistrer", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "&Recherche", -- src\editor\menu_search.lua
@@ -44,14 +41,11 @@ return {
["&Stack Window"] = "&Pile d'exécution", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Lancer le &serveur de débogage", -- src\editor\menu_project.lua
["&Status Bar"] = "Barre d'&état", -- src\editor\menu_view.lua
["&Subdirectories"] = "&Sous-répertoires", -- src\editor\findreplace.lua
["&Tool Bar"] = "Barre d'&outils", -- src\editor\menu_view.lua
["&Tutorials"] = "&Tutoriels", -- src\editor\menu_help.lua
["&Undo"] = "&Annuler", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = "Vers le &haut", -- src\editor\findreplace.lua
["&View"] = "&Affichage", -- src\editor\menu_view.lua
["&Watch Window"] = "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 espionne", -- src\editor\editor.lua
@@ -61,25 +55,27 @@ return {
["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ète lors de la saisie", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = "Le fichier binaire est affiché en lecture seule parce qu'il a été chargé partiellement.", -- src\editor\commands.lua
["Bookmark"] = "Marque-pages", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interrompt l'exécution à la ligne suivante", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Interrompt l'exécution à la ligne suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["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 open file '%s': %s"] = "Impossible d'ouvrir le fichier '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Impossible de lire la récupération automatique ; format invalide : %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "Impossible de remplacer dans un texte en lecture seule.", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Impossible d'exécuter le point d'entrée du script ('%s').", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Impossible de lancer le serveur de débogage à %s:%d: %s." , -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "Impossible de lancer le débogage pour '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Impossible de lancer la session de débogage : erreur interne '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossible de lancer le débogage si aucun fichier n'est ouvert ou si le fichier courant n'a pas été enregistré ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Impossible d'arrêter le serveur de débogage car il n'a pas été démarré.", -- src\editor\debugger.lua
["Cancel"] = "Annuler", -- src\editor\findreplace.lua
["Cancelled by the user."] = "Annulé par l'utilisateur.", -- src\editor\findreplace.lua
["Choose a project directory"] = "Choisir un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = "Choisir...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Effacer les éléments", -- src\editor\menu_file.lua
["Choose a directory to map"] = "Choisir un répertoire à mapper", -- src\editor\filetree.lua
["Choose a project directory"] = "Choisir un répertoire de projet", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Choisir un répertoire dans lequel rechercher", -- src\editor\findreplace.lua
["Choose..."] = "Choisir...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Effacer les éléments", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Efface les éléments de cette liste", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Efface la fenêtre de sortie avant compilation ou débogage", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fermer les &autres pages", -- src\editor\gui.lua
@@ -100,21 +96,22 @@ return {
["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ée un document vierge", -- src\editor\menu_file.lua
["Create an empty document"] = "Crée un document vierge", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "&Couper", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Coupe le texte sélectionné et le copie dans le presse-papiers", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Serveur de débogage démarré à %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Serveur de débogage stoppé à %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Session de débogage terminée (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Session de débogage démarrée dans '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Débogage interrompu à %s:%s (impossible d'activer le fichier).", -- src\editor\debugger.lua
["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
["Disable Indexing For '%s'"] = "Désactiver l'indexation pour '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s' ?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Voulez-vous l'écraser ?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Voulez-vous le recharger ?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Voulez-vous enregistrer les modifications dans '%s' ?", -- src\editor\commands.lua
["E&xit"] = "&Quitter", -- src\editor\menu_file.lua
["Enable Indexing"] = "Activer l'indexation", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Saisissez du code Lua et appuyez sur <Entrée> pour l´exécuter.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "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
@@ -125,31 +122,30 @@ return {
["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é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
["Execute the current project/file"] = "Exécute le projet/fichier courant", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Erreur d'exécution", -- src\editor\debugger.lua
["Exit program"] = "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 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 and replace text"] = "Recherche et remplace le texte", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Rechercher dans les fichiers", -- src\editor\toolbar.lua
["Find text in files"] = "Recherche le texte dans les fichiers", -- src\editor\menu_search.lua
["Find text"] = "Recherche le texte", -- src\editor\menu_search.lua
["Find text"] = "Recherche le texte", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Recherche l'occurrence précédente du texte", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Recherche l'occurrence suivante du texte", -- src\editor\menu_search.lua
["Find"] = "Rechercher ", -- src\editor\findreplace.lua
["Find"] = "Rechercher ", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Replie ou déplie tous les blocs de code", -- src\editor\menu_edit.lua
["Found %d instance."] = {"%d occurence trouvée.", "%d occurences trouvées."}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvée et la session a été restaurée.", -- src\editor\commands.lua
["Found"] = "Occurrences trouvées :", -- src\editor\findreplace.lua
["Full &Screen"] = "Plein é&cran", -- src\editor\menu_view.lua
["Go To Definition"] = "Aller à la définition", -- src\editor\editor.lua
["Go To File..."] = "Aller au fichier...", -- src\editor\menu_search.lua
@@ -162,24 +158,26 @@ return {
["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
["Ignore and don't index symbols from files in the selected directory"] = "Ignorer et ne pas indexer les symboles dans les fichiers provenant du répertoire sélectionné", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Une erreur dans le code d'initialisation du debogage a été ignorée: %s.", -- src\editor\debugger.lua
["In Files"] = "Dans les fichiers", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = "%d fichiers indexés: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Indexation terminée.", -- src\editor\outline.lua
["Insert Library Function..."] = "Insérer une fonction d'une bibliothèque...", -- src\editor\menu_search.lua
["Known Files"] = "Fichiers connus", -- src\editor\commands.lua
["Ln: %d"] = "Lig : %d", -- src\editor\editor.lua
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Interpréteur L&ua", -- src\editor\menu_project.lua
["Map Directory..."] = "Mapper un répertoire...", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "La requête distante pour '%s' a été associée à '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Respecter la &casse", -- src\editor\findreplace.lua
["Match &whole word"] = "&Mot entier uniquement", -- src\editor\findreplace.lua
["Match case"] = "Respecter la casse", -- src\editor\toolbar.lua
["Match whole word"] = "Mot entier uniquement", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne ont été détectés.", -- src\editor\commands.lua
["Navigate"] = "Naviguer", -- src\editor\menu_search.lua
["New &File"] = "Nouveau &fichier", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Ouvrir avec le programme par défaut", -- src\editor\filetree.lua
["Open an existing document"] = "Ouvre un document existant", -- src\editor\menu_file.lua
["Open an existing document"] = "Ouvre un document existant", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Ouvrir un fichier", -- src\editor\commands.lua
["Options"] = "Options", -- src\editor\findreplace.lua
["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
@@ -201,48 +199,59 @@ return {
["Project"] = "Projet", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "&Explorateur de projet", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Définit les paramètres de ligne de commande", -- src\editor\menu_project.lua
["Queued %d files to index."] = "%d fichiers mis en attente pour l'indexation.", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Remp&lacer dans les fichiers", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Ré-indente les lignes sélectionnées", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = "Fin de texte atteinte et repositionnement en début de texte.", -- src\editor\findreplace.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établit la dernière modification", -- src\editor\menu_edit.lua
["Refresh Index"] = "Actualiser l'index", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Actualiser les symboles indexés à partir des fichiers du répertoire sélectionné", -- src\editor\outline.lua
["Refresh"] = "Rafraîchir", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Une requête de lancement de débogage a été refusée car une session de débogage est déjà en cours.", -- src\editor\debugger.lua
["Regular &expression"] = "&Expression régulière", -- src\editor\findreplace.lua
["Regular expression"] = "Expression régulière", -- src\editor\toolbar.lua
["Remote console"] = "Console à distance", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renommer toutes les occurrences", -- src\editor\editor.lua
["Replace A&ll"] = "Remplacer &tout", -- src\editor\findreplace.lua
["Replace All Selections"] = "Remplacer toutes les sélections", -- src\editor\editor.lua
["Replace"] = "Remplacer par ", -- src\editor\findreplace.lua
["Replace all"] = "Remplacer tout", -- src\editor\toolbar.lua
["Replace next instance"] = "Remplacer l'occurence suivante", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"%d occurence remplacée.","%d occurences remplacées."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Un caractère UTF8 invalide a été remplacé par %s.", -- src\editor\commands.lua
["Replaced"] = "Occurrences remplacées :", -- src\editor\findreplace.lua
["Replacing"] = "Remplacement de", -- src\editor\findreplace.lua
["Reset to default layout"] = "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
["Run To Cursor"] = "Exécuter jusqu'au curseur", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\toolbar.lua
["Run to cursor"] = "Exécuter jusqu'au curseur", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "&Arrêter le débogage", -- src\editor\menu_project.lua
["S&top Process"] = "&Arrêter le processus", -- src\editor\menu_project.lua
["Save &As..."] = "Enregistrer &sous...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Enregistrer &tout", -- src\editor\menu_file.lua
["Save Changes?"] = "Enregistrer les modifications ?", -- src\editor\commands.lua
["Save all open documents"] = "Enregistre tous les documents ouverts", -- src\editor\menu_file.lua
["Save all open documents"] = "Enregistre tous les documents ouverts", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Enregistrer le fichier sous", -- src\editor\commands.lua
["Save file?"] = "Enregistrer le fichier ?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "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
["Save the current document"] = "Enregistre le document courant", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Récup. auto enregistrée à %s.", -- src\editor\commands.lua
["Scope"] = "Direction", -- src\editor\findreplace.lua
["Scratchpad error"] = "Erreur dans le brouillon", -- src\editor\debugger.lua
["Searching for"] = "Recherche de", -- src\editor\findreplace.lua
["Search direction"] = "Direction de recherche", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Rechercher dans les sous-répertoires", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Recherche de '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Sélectionner &tout", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Sélectionner et rechercher le suivant", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Sélectionner et rerchercher le précédent", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Sélectionne tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
["Select 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 As Start File"] = "Définir le fichier en tant que point d'entrée", -- src\editor\filetree.lua
["Set From Current File"] = "Définir à partir du fichier courant", -- src\editor\menu_project.lua
["Set project directory from current file"] = "Définit le répertoire de projet à partir du fichier courant", -- src\editor\menu_project.lua
["Set To Project Directory"] = "Utiliser le répertoire de projet", -- src\editor\findreplace.lua
["Set project directory from current file"] = "Définit le répertoire de projet à partir du fichier courant", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = "Définir le répertoire de recherche", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Définit l'interpréteur à utiliser", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Définit le répertoire de projet à utiliser", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Paramètres : Système", -- src\editor\menu_edit.lua
@@ -252,40 +261,50 @@ return {
["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 all files"] = "Affiche tous les fichiers", -- src\editor\filetree.lua
["Show context"] = "Affiche le contexte", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Affiche les fichiers précédemment masqués", -- src\editor\filetree.lua
["Show multiple result windows"] = "Affiche les multiples fenêtres de résultat", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Affiche l'info-bulle pour la position courante ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Affiche/Masque la barre d'état", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Affiche/Masque la barre d'outils", -- src\editor\menu_view.lua
["Sort By Name"] = "Trie par nom", -- src\editor\outline.lua
["Sort selected lines"] = "Trie les lignes sélectionnées", -- src\editor\menu_edit.lua
["Source"] = "Code", -- src\editor\menu_edit.lua
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua
["Start &Debugging"] = "Lancer le &débogage", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Démarre ou continue le debogage", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Démarre ou continue le debogage", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Pas à pas détai&llé", -- src\editor\menu_project.lua
["Step &Over"] = "Pas à pas so&mmaire", -- src\editor\menu_project.lua
["Step O&ut"] = "Pas à pas so&rtant", -- src\editor\menu_project.lua
["Step into"] = "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
["Step into"] = "Rentre dans l'instruction suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Sort de la fonction courante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Enjambe l'instruction suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Arrête le débogage et continue l'exécution du processus", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Arrête le processus en cours d'exécution", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Active ou désactive le mode plein écran", -- src\editor\menu_view.lua
["Symbol Index"] = "Index des symboles", -- src\editor\outline.lua
["Text not found."] = "Texte non trouvé.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "Le fichier d'API doit être placé dans un sous-répertoire du répertoire d'API.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\menu_edit.lua
["Toggle Break&point"] = "Créer/Supprimer un &point d'arrêt", -- src\editor\menu_project.lua
["Toggle 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
["Toggle bookmark"] = "Crée ou supprime un marque-page", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Crée ou supprime un point d'arrêt", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Tr&ace"] = "&Tracer", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Trace l'exécution en affichant chaque ligne de code exécutée", -- src\editor\menu_project.lua
["Unable to create directory '%s'."] = "Impossible de créer le répertoire '%s'.", -- src\editor\filetree.lua
["Unable to create file '%s'."] = "Impossible de créer le fichier '%s'.", -- src\editor\filetree.lua
["Unable to delete directory '%s': %s"] = "Impossible de supprimer le répertoire '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = "Impossible de supprimer le fichier '%s': %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Impossible de charger le le fichier '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Impossible de renommer le fichier '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Impossible d'enregistrer le fichier '%s' : %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Impossible d'arrêter le programme (pid : %d), code %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Annule la dernière modification", -- src\editor\menu_edit.lua
["Unmap Directory"] = "Démapper le répertoire", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "Ne plus utiliser le fichier '%s' en tant que point d'entrée", -- src\editor\filetree.lua
["Updated %d file."] = {"%d fichier mis à jour.","%d fichiers mis à jour."}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Mise à jour en cours de l'index des symboles et des paramètres...", -- src\editor\outline.lua
["Use %s to close."] = "Utiliser %s pour fermer.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Utilisez '%s' pour voir la description complète.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Utilisez '%s' pour afficher les fins de ligne et '%s' pour les convertir.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Utilisez 'clear' pour effacer la sortie console et l´historique.", -- src\editor\shellbox.lua
@@ -293,11 +312,11 @@ return {
["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
["View the stack window"] = "Affiche la fenêtre de pile d'exécution", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Affiche la fenêtre d'expressions espionnes", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bienvenue dans l´interpréteur interactif Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "B&oucler", -- src\editor\findreplace.lua
["Wrap around"] = "Boucler", -- src\editor\toolbar.lua
["You must save the program first."] = "Vous devez d'abord enregistrer le programme.", -- src\editor\commands.lua
["Zoom In"] = "Zoomer", -- src\editor\menu_view.lua
["Zoom Out"] = "Dézoomer", -- src\editor\menu_view.lua

View File

@@ -1,26 +1,24 @@
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%d instance"] = {"%d occorrenza", "%d occorrenze"}, -- src\editor\findreplace.lua
["%s event failed: %s"] = "L'evento %s è fallito : %s", -- src\editor\package.lua
["%s%% loaded..."] = "%s%% caricato...", -- src\editor\commands.lua
["&About"] = "Informazioni", -- src\editor\menu_help.lua
["&Add Watch"] = "&Aggiungi Espressione di Controllo", -- src\editor\debugger.lua
["&Break"] = "Interrompi", -- src\editor\menu_project.lua
["&Close Page"] = "&Chiudi pagina", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Comunità", -- src\editor\menu_help.lua
["&Compile"] = "&Compila", -- src\editor\menu_project.lua
["&Copy Value"] = "&Copia Valore", -- src\editor\debugger.lua
["&Copy"] = "&Copia", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Visualizzazione di &Default", -- src\editor\menu_view.lua
["&Delete Watch"] = "Elimina Espressione di Controllo", -- src\editor\debugger.lua
["&Delete"] = "Elimina", -- src\editor\filetree.lua
["&Documentation"] = "Documentazione", -- src\editor\menu_help.lua
["&Down"] = "Verso il basso", -- src\editor\findreplace.lua
["&Edit Project Directory"] = "Modifica directory di progetto", -- src\editor\filetree.lua
["&Edit Value"] = "Modifica Valore", -- src\editor\debugger.lua
["&Edit Watch"] = "Modifica Espressione di Controllo", -- src\editor\debugger.lua
["&Edit"] = "Modifica", -- src\editor\menu_edit.lua
["&File"] = "File", -- src\editor\menu_file.lua
["&Find All"] = "Trova Tutti", -- src\editor\findreplace.lua
["&Find Next"] = "Trova Successivo", -- src\editor\findreplace.lua
["&Find"] = "Ricerca", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Apri/Chiudi tutto", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "Domande &Frequenti", -- src\editor\menu_help.lua
@@ -35,8 +33,7 @@ return {
["&Project"] = "&Progetto", -- src\editor\menu_project.lua
["&Redo"] = "&Ripeti", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Rinomina", -- src\editor\filetree.lua
["&Replace All"] = "Sostituisci Tutti", -- src\editor\findreplace.lua
["&Replace"] = "Sostituisci", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "Sostituisci", -- src\editor\menu_search.lua
["&Run"] = "Lancia", -- src\editor\menu_project.lua
["&Save"] = "&Salva", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "Ricerca", -- src\editor\menu_search.lua
@@ -44,14 +41,11 @@ return {
["&Stack Window"] = "Stack di chiamate", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Avvia Debugger Server", -- src\editor\menu_project.lua
["&Status Bar"] = "Barra di stato", -- src\editor\menu_view.lua
["&Subdirectories"] = "Sotto Directory", -- src\editor\findreplace.lua
["&Tool Bar"] = "Barra degli strumenti", -- src\editor\menu_view.lua
["&Tutorials"] = "Guide", -- src\editor\menu_help.lua
["&Undo"] = "Annulla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = "Verso l'alto", -- src\editor\findreplace.lua
["&View"] = "Visualizza", -- src\editor\menu_view.lua
["&Watch Window"] = "Finestra Espressioni di Controllo", -- src\editor\menu_view.lua
[".&bak on Replace"] = ".bak su Sostituisci", -- src\editor\findreplace.lua
["About %s"] = "Informazioni su %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Aggiungi a Scratchpad ", -- src\editor\editor.lua
["Add Watch Expression"] = "Aggiungi Espressione di Controllo", -- src\editor\editor.lua
@@ -61,25 +55,27 @@ return {
["Analyze"] = "Analizza", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Autocompletamento identificatori", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Autocompletamento in linea", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = "Il file binario è aperto in sola lettura, poichè caricato solo parzialmente.", -- src\editor\commands.lua
["Bookmark"] = "Segnalibro", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interrompi l'esecuzione alla successiva riga di codice ", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Interrompi l'esecuzione alla successiva riga di codice ", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["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 open file '%s': %s"] = "Impossibile aprire il file '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Impossibile procedere all'auto-recovery; Formato non valido: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "Impossibile sostituire in un testo in sola lettura", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Impossibile eseguire il punto di ingresos dello script (%s).", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Impossibile lanciare il server debugger a %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "Impossibile iniziare il debug perchè '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Impossibile lanciare la sessione di debug: errore interno '%s'.'", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossibile lanciare il debug senza aver aperto un file o se il file corrente non è stato salvato ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Impossibile fermare il server debugger perchè non è stato avviato", -- src\editor\debugger.lua
["Cancel"] = "Annulla", -- src\editor\findreplace.lua
["Cancelled by the user."] = "Annullato dall'utente", -- src\editor\findreplace.lua
["Choose a project directory"] = "Scegli la directory di un progetto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = "Scegli...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Pulisci elementi", -- src\editor\menu_file.lua
["Choose a directory to map"] = "Scegli una directory da mappare", -- src\editor\filetree.lua
["Choose a project directory"] = "Scegli la directory di un progetto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Scegli una directory di ricerca", -- src\editor\findreplace.lua
["Choose..."] = "Scegli...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Pulisci elementi", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Pulisci elementi della lista", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Pulisci la finestra di output prima di compilare o lanciare debug", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Chidi le Altre Pagine", -- src\editor\gui.lua
@@ -100,21 +96,22 @@ return {
["Copy selected text to clipboard"] = "Copia il testo selezionato negli appunti", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Correggi &Indentazione", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossibile attivare il file '%s' per debug; si prosegue senza.", -- src\editor\debugger.lua
["Create an empty document"] = "Crea un documento vuoto", -- src\editor\menu_file.lua
["Create an empty document"] = "Crea un documento vuoto", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "&Taglia", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Taglia il testo selezionato e mette negli appunti", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Server Debugger iniziato %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Server Debugger fermato %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sessione di debug completata (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sessione di debug iniziata da '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Debug sospeso a %s:%s (impossibile attivare il file).", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Debug sospeso a '%s:%s' (impossibile attivare il file).", -- src\editor\debugger.lua
["Detach &Process"] = "Scollega Processo", -- src\editor\menu_project.lua
["Directory"] = "Directory", -- src\editor\findreplace.lua
["Disable Indexing For '%s'"] = "Disabilita Indicizzazione per '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Vuoi eliminare '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Vuoi sovrascrivere '%s'?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Vuoi ricaricarlo?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Vuoi salvare le modifiche a '%s'?", -- src\editor\commands.lua
["E&xit"] = "Uscita", -- src\editor\menu_file.lua
["Enable Indexing"] = "Abilita Indicizzazione", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Inserisci codice Lua e premi <Enter> per eseguirlo.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Inserisci i parametri riga di comando (Annulla per pulire)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Inserisci il testo da sostituire", -- src\editor\editor.lua
@@ -125,31 +122,30 @@ return {
["Error"] = "Errore", -- src\editor\commands.lua
["Evaluate In Console"] = "Elabora in console", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Esegue il progetto/file corrente e permette di modificare il codice per vedere i risultati in tempo reale", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Errore di esecuzione", -- src\editor\debugger.lua
["Exit program"] = "Uscita dal programma", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Il file '%s' e' stato modificato sul disco.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Il file '%s' ha un timestamp più recente di quello ripristinato '%s'; verificare prima di salvare.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Il file '%s' non è stato trovato e non può essere recuperato.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Il file '%s' non esiste piu'.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = "File Type", -- src\editor\findreplace.lua
["File already exists."] = "Il file esiste già.", -- src\editor\commands.lua
["File history"] = "Storia del file", -- src\editor\menu_file.lua
["Find &In Files"] = "Ricerca nei files", -- src\editor\menu_search.lua
["Find &Next"] = "Cerca il successivo", -- src\editor\menu_search.lua
["Find &Previous"] = "Cerca il precedente", -- src\editor\menu_search.lua
["Find In Files"] = "Ricerca nei Files", -- src\editor\findreplace.lua
["Find and insert library function"] = "Trova e inserisci funzione di libreria", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Cerca e sostituisci testo nei files", -- src\editor\menu_search.lua
["Find and replace text"] = "Cerca e sostituisci testo", -- src\editor\menu_search.lua
["Find and replace text"] = "Cerca e sostituisci testo", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Ricerca nei files", -- src\editor\toolbar.lua
["Find text in files"] = "Cerca testo nei files", -- src\editor\menu_search.lua
["Find text"] = "Cerca testo", -- src\editor\menu_search.lua
["Find text"] = "Cerca testo", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Cerca la precedente occorrenza nel testo", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Cerca la successiva occorrenza nel testo", -- src\editor\menu_search.lua
["Find"] = "Ricerca", -- src\editor\findreplace.lua
["Find"] = "Ricerca", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Apri o chiudi tutti i blocchi di codice", -- src\editor\menu_edit.lua
["Found %d instance."] = {"Trovata %d istanza.", "Trovate %d istanze."}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Trovato punto di auto-revcovery e ripristinata la sessione salvata", -- src\editor\commands.lua
["Found"] = "Occorrenze trovate:", -- src\editor\findreplace.lua
["Full &Screen"] = "Schermo intero", -- src\editor\menu_view.lua
["Go To Definition"] = "Vai a Definizione", -- src\editor\editor.lua
["Go To File..."] = "Vai al File...", -- src\editor\menu_search.lua
@@ -162,24 +158,26 @@ return {
["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
["Ignore and don't index symbols from files in the selected directory"] = "Ignora e non indicizzare simboli nella directory selezionata", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Errore ignorato durante l'inizializzaione del debugger codice: %s.", -- src\editor\debugger.lua
["In Files"] = "Nei Files", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = "Indicizzazione %d file: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Indicizzazione completata", -- src\editor\outline.lua
["Insert Library Function..."] = "Inserisci Funzione di Libreria...", -- src\editor\menu_search.lua
["Known Files"] = "Files conosciuti", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "&Interprete Lua", -- src\editor\menu_project.lua
["Map Directory..."] = "Mappa directory...", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Richiesta remota '%s' mappata su '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Maiuscole/Minuscole", -- src\editor\findreplace.lua
["Match &whole word"] = "Intera parola", -- src\editor\findreplace.lua
["Match case"] = "Maiuscole/Minuscole", -- src\editor\toolbar.lua
["Match whole word"] = "Intera parola", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Trovata codifica Fine-Riga mista.", -- src\editor\commands.lua
["Navigate"] = "Naviga", -- src\editor\menu_search.lua
["New &File"] = "Nuovo &File", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Apri con programma predefinito", -- src\editor\filetree.lua
["Open an existing document"] = "Apri un documento esistente", -- src\editor\menu_file.lua
["Open an existing document"] = "Apri un documento esistente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Apri un file", -- src\editor\commands.lua
["Options"] = "Opzioni", -- src\editor\findreplace.lua
["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
@@ -201,48 +199,59 @@ return {
["Project"] = "Progetto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Progetto/Explorer", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Fornire parametri riga di comando", -- src\editor\menu_project.lua
["Queued %d files to index."] = "Accodati %d file per indicizzazione.", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Sostituisci nei files", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Re-indenta le linee selezionate", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = "Raggiunta la fine del testo e ricominciato da inizio", -- src\editor\findreplace.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 Index"] = "Aggiorna Indici", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Aggiorna simboli indicizzati dai files nella directory selezionata", -- src\editor\outline.lua
["Refresh"] = "Rinfrescare", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Impossibile aprire una nuova sessione di debug in quanto ne esiste una in corso", -- src\editor\debugger.lua
["Regular &expression"] = "Regular &expression", -- src\editor\findreplace.lua
["Regular expression"] = "Regular expression", -- src\editor\toolbar.lua
["Remote console"] = "Console remota", -- src\editor\shellbox.lua
["Rename All Instances"] = "Rinomina tutte le occorrenze", -- src\editor\editor.lua
["Replace A&ll"] = "Sostituisci Tutto", -- src\editor\findreplace.lua
["Replace All Selections"] = "Sostituisci Tutte le Selezioni", -- src\editor\editor.lua
["Replace"] = "Sostituisci", -- src\editor\findreplace.lua
["Replace all"] = "Sostituisci Tutto", -- src\editor\toolbar.lua
["Replace next instance"] = "Sostituisci istanza successiva", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"Sostituita %d istanza.", "Sostituite %d istanze."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Sostituito un carattere UTF8 invalido con %s.", -- src\editor\commands.lua
["Replaced"] = "Sostituiti :", -- src\editor\findreplace.lua
["Replacing"] = "Sostituzione", -- src\editor\findreplace.lua
["Reset to default layout"] = "Ritorna al default layout", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
["Run As Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
["Run To Cursor"] = "Esegui fino al Cursore", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\toolbar.lua
["Run to cursor"] = "Esegui fino al cursore", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "Ferma il debugger", -- src\editor\menu_project.lua
["S&top Process"] = "Ferma il processo", -- src\editor\menu_project.lua
["Save &As..."] = "S&alva con nome...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Sa&lva tutto", -- src\editor\menu_file.lua
["Save Changes?"] = "Vuoi salvare le modifiche?", -- src\editor\commands.lua
["Save all open documents"] = "Salva tutti i documenti aperti", -- src\editor\menu_file.lua
["Save all open documents"] = "Salva tutti i documenti aperti", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Salva il file con nome", -- src\editor\commands.lua
["Save file?"] = "Vuoi salvare il file?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Salva il documento corrente in un file con un nuovo nome", -- src\editor\menu_file.lua
["Save the current document"] = "Salva il documento corrente", -- src\editor\menu_file.lua
["Save the current document"] = "Salva il documento corrente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Salvato auto-recover a %s.", -- src\editor\commands.lua
["Scope"] = "Direzione", -- src\editor\findreplace.lua
["Scratchpad error"] = "Errore durente Scratchpad", -- src\editor\debugger.lua
["Searching for"] = "Ricerca di", -- src\editor\findreplace.lua
["Search direction"] = "Direzione ricerca", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Ricerca nelle sotto-directory", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Ricerca di '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Selezion&a Tutto", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Seleziona e trova successivo", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Seleziona e trova precedente", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Seleziona tutto il testo nell'editor", -- src\editor\menu_edit.lua
["Select and Find Next"] = "Seleziona e trova successivo", -- src\editor\menu_search.lua
["Select and Find Previous"] = "Seleziona e trova precedente", -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = "Seleziona la parola e trova successivo", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Seleziona la parola e trova precedente", -- src\editor\menu_search.lua
["Set As Start File"] = "Imposta come File di Partenza", -- src\editor\filetree.lua
["Set From Current File"] = "Impostato da file corrente", -- src\editor\menu_project.lua
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\menu_project.lua
["Set To Project Directory"] = "Imposta a Directory di Progetto", -- src\editor\findreplace.lua
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = "Imposta directory ricerca", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Definisci l'interprete da utilizzare", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Imposta la directory di progetto da usare", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Impostazioni: Sistema", -- src\editor\menu_edit.lua
@@ -252,40 +261,50 @@ return {
["Show Hidden Files"] = "Mostra File nascosti", -- src\editor\filetree.lua
["Show Location"] = "Mostra posizione", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Mostra tutti i file", -- src\editor\filetree.lua
["Show context"] = "Mostra contesto", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Mostra i file precedentemente nascosti", -- src\editor\filetree.lua
["Show multiple result windows"] = "Mostra più finestre dei risultati", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Mostra i consigli per la posizione corrente; muovi il cursore dopo la parentesi o la funzione", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Mostra/Nascondi la barra di stato", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Mostra/Nascondi la barra degli strumenti", -- src\editor\menu_view.lua
["Sort By Name"] = "Ordina per Nome", -- src\editor\outline.lua
["Sort selected lines"] = "Ordina le righe selezionate", -- src\editor\menu_edit.lua
["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\menu_project.lua
["Start or continue debugging"] = "Inizia o continua il debug", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Step &Into", -- src\editor\menu_project.lua
["Step &Over"] = "Step &Over", -- src\editor\menu_project.lua
["Step O&ut"] = "Step O&ut", -- src\editor\menu_project.lua
["Step into"] = "Step into", -- src\editor\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
["Step into"] = "Step into", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Ferma il debug e continua l'esecuzione del processo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Passa da tutto schermo a finestra", -- src\editor\menu_view.lua
["Symbol Index"] = "Indice Simboli", -- src\editor\outline.lua
["Text not found."] = "Testo non trovato.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "Il file API deve essere presente in una sottodirectory o nella direcotory API.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
["Toggle Break&point"] = "Attiva/Disattiva Break&point", -- src\editor\menu_project.lua
["Toggle bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\menu_project.lua
["Toggle bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = "Impossibile cancellare file '%s': %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Impossibile aprire il file '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Impossibile rinominare il file '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Impossibile salvare il file '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Impossibile fermare il programma (pid: %d), code %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Annulla l'ultima azione di edit", -- src\editor\menu_edit.lua
["Unmap Directory"] = "Togli mappatura Directory", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "Togli '%s' come File di Partenza", -- src\editor\filetree.lua
["Updated %d file."] = {"Aggiornato %d file.", "Aggiornati %d file."}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Aggiornamento indice simbili e impostazioni...", -- src\editor\outline.lua
["Use %s to close."] = "Utilizza %s per chiudere.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Utilizza '%s' per vedere la descrizione completa.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Utilizza '%s' per vedere la fine della riga e '%s' per convertirli.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Utilizza 'clear' per pulire l`output e lo storico.", -- src\editor\shellbox.lua
@@ -293,11 +312,11 @@ return {
["View the outline window"] = "Visualizza la finestra di outline", -- src\editor\menu_view.lua
["View the output/console window"] = "Mostra la finestra di output/console", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Mostra la finestra di progetto/explorer", -- src\editor\menu_view.lua
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\menu_view.lua
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\menu_view.lua
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Watch", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Benvenuti nell`interprete interattivo Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "Wrap ar&ound", -- src\editor\findreplace.lua
["Wrap around"] = "Wrap around", -- src\editor\toolbar.lua
["You must save the program first."] = "Devi prima salvare il programma", -- src\editor\commands.lua
["Zoom In"] = "Zoom In", -- src\editor\menu_view.lua
["Zoom Out"] = "Zoom Out", -- src\editor\menu_view.lua

View File

@@ -1,29 +1,24 @@
---
-- @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
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "Sobre", -- src\editor\menu_help.lua
["&Add Watch"] = "&Adicionar observador", -- src\editor\debugger.lua
["&Break"] = "Interromper", -- src\editor\menu_project.lua
["&Close Page"] = "Fe&char guia", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Comunidade", -- src\editor\menu_help.lua
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "&Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Re&definir painéis", -- src\editor\menu_view.lua
["&Delete Watch"] = "Remover observa&dor", -- src\editor\debugger.lua
["&Delete"] = "Apagar", -- src\editor\filetree.lua
["&Documentation"] = "&Documentação", -- src\editor\menu_help.lua
["&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
@@ -38,8 +33,7 @@ return {
["&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
["&Replace"] = "Substitui&r", -- src\editor\menu_search.lua
["&Run"] = "Executa&r", -- src\editor\menu_project.lua
["&Save"] = "&Salvar", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "Localizar", -- src\editor\menu_search.lua
@@ -47,14 +41,11 @@ return {
["&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
@@ -64,25 +55,27 @@ return {
["Analyze"] = "Analisar", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Autocompletar ao digitar", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = "Marcador", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interromper execução na próxima linha de código", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Interromper execução na próxima linha de código", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["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 open file '%s': %s"] = "Impossível abrir o arquivo '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Impossível de processar registro de autorrecuperação; formato inválido: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Impossível de executar o ponto de entrada do script ('%s').", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Impossível de iniciar o sevidor de depuração em %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Impossível iniciar sessão de depuração devido ao erro interno '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossível iniciar depuração sem abrir um arquivo ou se o arquivo atual não foi salvo ainda ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Impossível interromper servidor de depuração se ele não foi iniciado.", -- src\editor\debugger.lua
["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
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "Selecionar pasta do projeto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = "Selecionar...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Limpar itens", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Limpar itens desta lista", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Limpar janela de saída antes de compilar ou depurar", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fechar &outras guias", -- src\editor\gui.lua
@@ -103,21 +96,22 @@ return {
["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
["Create an empty document"] = "Criar um documento em branco", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "Recor&tar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Recortar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Servidor de depuração iniciado em %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Servidor de depuração interrompido em %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sessão de depuração completada (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sessão de depuração iniciada em '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Depuração suspendida em %s:%s (impossível ativar o arquivo).", -- src\editor\debugger.lua
["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
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Deseja mesmo apagar '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Deseja mesmo sobrescrevê-lo?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Deseja mesmo atualizá-lo?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Deseja salvar as alterações em '%s'?", -- src\editor\commands.lua
["E&xit"] = "Sair", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Digite o código Lua e pressione Enter para executá-lo.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Digite os parâmetros da linha de comandos (use Cancelar para limpar)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Digite o texto para substituir", -- src\editor\editor.lua
@@ -128,31 +122,30 @@ return {
["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
["Execute the current project/file"] = "Executar o projeto/arquivo atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Erro na execução", -- src\editor\debugger.lua
["Exit program"] = "Sair do programa", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Arquivo '%s' foi alterado no disco.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Arquivo '%s' possui uma data mais recente do que o restaurado '%s'; verifique antes de salvar.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Arquivo '%s' está faltando e não pode ser restaurado.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Arquivo '%s' não existe mais.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File 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 and replace text"] = "Localizar e substituir texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Localizar em arquivos", -- src\editor\toolbar.lua
["Find text in files"] = "Localizar texto em arquivos", -- src\editor\menu_search.lua
["Find text"] = "Localizar texto", -- src\editor\menu_search.lua
["Find text"] = "Localizar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Localizar a ocorrência anterior do texto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Localizar a ocorrência posterior do texto", -- src\editor\menu_search.lua
["Find"] = "Localizar", -- src\editor\findreplace.lua
["Find"] = "Localizar", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Expandir ou recolher todos os blocos do código", -- src\editor\menu_edit.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Registro de autorrecuperação encontrado e sessão restaurada.", -- src\editor\commands.lua
["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
@@ -165,24 +158,26 @@ return {
["Go to symbol"] = "Ir para o símbolo", -- src\editor\menu_search.lua
["Hide '.%s' Files"] = "Ocultar arquivos '.%s'", -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Erro ignorado no código de inicialização do depurador: %s.", -- src\editor\debugger.lua
["In Files"] = "Em arquivos", -- src\editor\findreplace.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = "Inserir função de biblioteca...", -- src\editor\menu_search.lua
["Known Files"] = "Arquivos conhecidos", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Console local", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "&Interpretador Lua", -- src\editor\menu_project.lua
["Map Directory..."] = nil, -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Solicitação remota '%s' mapeada para '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Diferenciar maiúsc/minúsc", -- src\editor\findreplace.lua
["Match &whole word"] = "Somente palavras inteiras", -- src\editor\findreplace.lua
["Match case"] = "Diferenciar maiúsc/minúsc", -- src\editor\toolbar.lua
["Match whole word"] = "Somente palavras inteiras", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Multíplas codificações de fim-de-linha encontradas.", -- src\editor\commands.lua
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
["New &File"] = "Novo arquivo", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Abrir com o programa padrão", -- src\editor\filetree.lua
["Open an existing document"] = "Abrir um documento existente", -- src\editor\menu_file.lua
["Open an existing document"] = "Abrir um documento existente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Abrir arquivo", -- src\editor\commands.lua
["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
@@ -204,48 +199,59 @@ return {
["Project"] = "Projeto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Projeto/Hierarquia de arquivos", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Informar os parâmetros da linha de comandos", -- src\editor\menu_project.lua
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Substituir em arquivos", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Inserir recuos nas linhas selecionadas", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.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 Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "Refrescar", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Solicitação de início de uma nova sessão de depuração recusado porque já existe um em progresso.", -- src\editor\debugger.lua
["Regular &expression"] = "&Expressão regular", -- src\editor\findreplace.lua
["Regular expression"] = "Expressão regular", -- src\editor\toolbar.lua
["Remote console"] = "Console remoto", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renomear todas as instâncias", -- src\editor\editor.lua
["Replace A&ll"] = "Substituir tudo", -- src\editor\findreplace.lua
["Replace All Selections"] = "Substituir todas as seleções", -- src\editor\editor.lua
["Replace"] = "Substituir", -- src\editor\findreplace.lua
["Replace all"] = "Substituir tudo", -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Caractere UTF8 inválido susbtituído por %s.", -- src\editor\commands.lua
["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
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Executar como rascunho", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "In&terromper depuração", -- src\editor\menu_project.lua
["S&top Process"] = "In&terromper processo", -- src\editor\menu_project.lua
["Save &As..."] = "S&alvar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Sa&lvar tudo", -- src\editor\menu_file.lua
["Save Changes?"] = "Salvar alterações?", -- src\editor\commands.lua
["Save all open documents"] = "Salvar todos os documentos abertos", -- src\editor\menu_file.lua
["Save all open documents"] = "Salvar todos os documentos abertos", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Salvar arquivo como", -- src\editor\commands.lua
["Save file?"] = "Salvar arquivo?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Salvar documento atual para um arquivo com outro nome", -- src\editor\menu_file.lua
["Save the current document"] = "Salvar documento atual", -- src\editor\menu_file.lua
["Save the current document"] = "Salvar documento atual", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Autorrecuperação salvo às %s.", -- src\editor\commands.lua
["Scope"] = "Direção", -- src\editor\findreplace.lua
["Scratchpad error"] = "Erro no rascunho", -- src\editor\debugger.lua
["Searching for"] = "Localizando por", -- src\editor\findreplace.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Selecion&ar tudo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Selecionar e localizar próxima", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Selecionar e localizar anterior", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Selecionar todo o texto do editor", -- src\editor\menu_edit.lua
["Select 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 As Start File"] = nil, -- src\editor\filetree.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 To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set project directory from current file"] = "Alterar pasta do projeto para a pasta do arquivo atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Alterar interpretador a ser utilizado", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Alterar pasta do projeto a ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Opções: Sistema", -- src\editor\menu_edit.lua
@@ -255,40 +261,50 @@ return {
["Show Hidden Files"] = "Exibir arquivos ocultos", -- src\editor\filetree.lua
["Show Location"] = "Exibir pasta no sistema", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = "Exibir arquivos anteriormente ocultos", -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Exibir dica para a posição atual; posicione o cursor após abrir o parênteses da função", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Exibir/Ocultar a barra de status", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Exibir/Ocultar a barra de ferramentas", -- src\editor\menu_view.lua
["Sort By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "Ordenar linhas selecionadas", -- src\editor\menu_edit.lua
["Source"] = "Código", -- src\editor\menu_edit.lua
["Stack"] = "Pilha de execução", -- src\editor\debugger.lua
["Start &Debugging"] = "Iniciar &depuração", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Iniciar ou continuar depuração", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Iniciar ou continuar depuração", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Passar para dentro", -- src\editor\menu_project.lua
["Step &Over"] = "Passar s&obre", -- src\editor\menu_project.lua
["Step O&ut"] = "Passar para fora", -- src\editor\menu_project.lua
["Step into"] = "Passar para dentro", -- src\editor\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
["Step into"] = "Passar para dentro", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Passar para fora da função atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Passar para fora", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Interromper depuração e continuar executando o processo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Interromper o processo atual em execução", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Entrar/Sair do modo tela inteira", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.lua
["Text not found."] = "Texto não encontrado.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "O arquivo de API deve estar localizado em uma subpasta da pasta de API", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Alternar marcador", -- src\editor\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
["Toggle bookmark"] = "Alternar marcador", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Alternar ponto de interrupção", -- src\editor\toolbar.lua, 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 delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Impossível carregar o arquivo '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Impossível renomear o arquivo '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Impossível salvar o arquivo '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Impossível de interromper programa (pid: %d), código %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Refazer última edição", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Use '%s' para ver a descrição completa.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Use '%s' para exibir os finais de linha e '%s' para convertê-los.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Use 'clear' para limpar a saída e o histórico.", -- src\editor\shellbox.lua
@@ -296,11 +312,11 @@ return {
["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
["View the stack window"] = "Exibir janela da pilha de execução", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Exibir janela do observador", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Observador", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bem-vindo ao interpretador do Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "Repetir direção", -- src\editor\findreplace.lua
["Wrap around"] = "Repetir direção", -- src\editor\toolbar.lua
["You must save the program first."] = "Você deve salvar o programa primeiro.", -- src\editor\commands.lua
["Zoom In"] = "Ampliar", -- src\editor\menu_view.lua
["Zoom Out"] = "Afastar", -- src\editor\menu_view.lua

View File

@@ -1,26 +1,24 @@
return {
[0] = function(c) c = (c-9)%100 < 9 and 9 or (c-1)%10 return c == 0 and 1 or c < 4 and 2 or 3 end, -- plural
["%d instance"] = {"%d совпадение", "%d совпадения", "%d совпадений"}, -- src\editor\findreplace.lua
["%s event failed: %s"] = "%s обработчик события вернул ошибку: %s", -- src\editor\package.lua
["%s%% loaded..."] = "%s%% загружено...", -- src\editor\commands.lua
["&About"] = "&О программе", -- src\editor\menu_help.lua
["&Add Watch"] = "&Добавить выражение", -- src\editor\debugger.lua
["&Break"] = "Пр&ервать", -- src\editor\menu_project.lua
["&Close Page"] = "&Закрыть", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = nil, -- src\editor\menu_help.lua
["&Compile"] = "&Компилировать", -- src\editor\menu_project.lua
["&Copy Value"] = "Копировать значение", -- src\editor\debugger.lua
["&Copy"] = "&Копировать", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Вид по &умолчанию", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Удалить выражение", -- src\editor\debugger.lua
["&Delete"] = "&Удалить", -- src\editor\filetree.lua
["&Documentation"] = "Документация", -- src\editor\menu_help.lua
["&Down"] = "Вниз", -- src\editor\findreplace.lua
["&Edit Project Directory"] = "&Редактировать папку проекта", -- src\editor\filetree.lua
["&Edit Value"] = "&Редактировать значение", -- src\editor\debugger.lua
["&Edit Watch"] = "&Редактировать выражение", -- src\editor\debugger.lua
["&Edit"] = "&Правка", -- src\editor\menu_edit.lua
["&File"] = "&Файл", -- src\editor\menu_file.lua
["&Find All"] = "Найти все", -- src\editor\findreplace.lua
["&Find Next"] = "Найти далее", -- src\editor\findreplace.lua
["&Find"] = "&Найти", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Св&ернуть/развернуть все", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "&Часто задаваемые вопросы", -- src\editor\menu_help.lua
@@ -35,8 +33,7 @@ return {
["&Project"] = "Пр&оект", -- src\editor\menu_project.lua
["&Redo"] = "Верну&ть", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "Переименовать", -- src\editor\filetree.lua
["&Replace All"] = "Заменить всe", -- src\editor\findreplace.lua
["&Replace"] = "За&менить", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "За&менить", -- src\editor\menu_search.lua
["&Run"] = "За&пустить", -- src\editor\menu_project.lua
["&Save"] = "&Сохранить", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "По&иск", -- src\editor\menu_search.lua
@@ -44,14 +41,11 @@ return {
["&Stack Window"] = "Окно &стека", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Запустить сервер отла&дки", -- src\editor\menu_project.lua
["&Status Bar"] = "Панель состояния", -- src\editor\menu_view.lua
["&Subdirectories"] = "В папках", -- src\editor\findreplace.lua
["&Tool Bar"] = "Панель инструментов", -- src\editor\menu_view.lua
["&Tutorials"] = "&Обучающие материалы", -- src\editor\menu_help.lua
["&Undo"] = "&Отменить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Up"] = "Вверх", -- src\editor\findreplace.lua
["&View"] = "&Вид", -- src\editor\menu_view.lua
["&Watch Window"] = "Окно &выражений", -- src\editor\menu_view.lua
[".&bak on Replace"] = ".&bak после замены", -- src\editor\findreplace.lua
["About %s"] = "О %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Добавить в черновик", -- src\editor\editor.lua
["Add Watch Expression"] = "Добавить выражение", -- src\editor\editor.lua
@@ -61,25 +55,27 @@ return {
["Analyze"] = "Анализировать", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Автодополнение идентификаторов", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Автоматически дополнять идентификаторы при наборе", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = "Двоичный файл открыт только для чтения, так как загружен частично.", -- src\editor\commands.lua
["Bookmark"] = "Закладка", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\menu_project.lua
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\toolbar.lua, 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"] = "Ошибка открытия файла '%s': %s", -- src\editor\singleinstance.lua
["Can't evaluate the expression while the application is running."] = "Невозможно вычеслить значение выражения пока приложение выполняется.", -- src\editor\debugger.lua
["Can't open file '%s': %s"] = "Ошибка открытия файла '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Ошибка обработки записи автоматического восстановления; неверный формат: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "Ошибка замены в тексте не доступном для записи.", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Ошибка выполнения стартового скрипта ('%s').", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Невозможно запустить сервер отладки %s:%d: %s", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "Невозможно начать отладку для '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Невозможно начать отладочную сессию из-за внутренней ошибки '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Невозможно начать отладку без открытого файла или с несохраненным текущим файлом ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Невозможно остановить сервер отладки пока он не запущен", -- src\editor\debugger.lua
["Cancel"] = "Отмена", -- src\editor\findreplace.lua
["Cancelled by the user."] = "Отменено пользователем.", -- src\editor\findreplace.lua
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose..."] = "Выбрать...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Очистить список", -- src\editor\menu_file.lua
["Choose a directory to map"] = "Выберите папку для добавления в список", -- src\editor\filetree.lua
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Выберите папку поиска", -- src\editor\findreplace.lua
["Choose..."] = "Выбрать...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Очистить список", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Удалить элементы из списка", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Очистить окно вывода перед компиляцией или отладкой", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Закрыть &остальные вкладки", -- src\editor\gui.lua
@@ -100,21 +96,22 @@ return {
["Copy selected text to clipboard"] = "Скопировать выделенный текст в буфер обмена", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Откорректировать отступ", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Невозможно открыть файл '%s' для отладки; выполнение будет продолжено без него.", -- src\editor\debugger.lua
["Create an empty document"] = "Создать новый документ", -- src\editor\menu_file.lua
["Create an empty document"] = "Создать новый документ", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "Вы&резать", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Вырезать выделенный текст в буфер обмена", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Сервер отладки запущен на %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Сервер отладки остановлен %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Отладочная сессия завершена (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Отладочная сессия запущена в '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Отладка остановлена на %s:%s (невозможно открыть файл).", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Отладка остановлена в '%s:%s' (невозможно активировать файл).", -- src\editor\debugger.lua
["Detach &Process"] = "Отсоединить процесс", -- src\editor\menu_project.lua
["Directory"] = "Папка", -- src\editor\findreplace.lua
["Disable Indexing For '%s'"] = "Запретить индексирование для '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Удалить '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Переписать его?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Перезагрузить его?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Сохранить изменения в '%s'?", -- src\editor\commands.lua
["E&xit"] = "Вы&ход", -- src\editor\menu_file.lua
["Enable Indexing"] = "Разрешить индекcирование", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Введите код на Lua и нажмите Enter для выполнения.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Введите параметры командной строки (Cancel чтобы очистить)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Введите текст замены", -- src\editor\editor.lua
@@ -125,31 +122,30 @@ return {
["Error"] = "Ошибка", -- src\editor\commands.lua
["Evaluate In Console"] = "Выполнить в консоли", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Запустить текущий проект/файл и продолжать вносить изменения в код с немедленным выводом результатов", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Запустить текущий проект/файл", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Запустить текущий проект/файл", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Ошибка выполнения", -- src\editor\debugger.lua
["Exit program"] = "Выйти из программы", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Файл '%s' был изменен на диске.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Файл '%s' имеет более позднее время модификации, чем восстановленный '%s'; пожалуйста просмотрите его перед сохранением.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Файл '%s' отсутствует и не может быть восстановлен.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Файл '%s' больше не существует.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = "Тип файла", -- src\editor\findreplace.lua
["File already exists."] = "Файл уже существует.", -- src\editor\commands.lua
["File history"] = "История файлов", -- src\editor\menu_file.lua
["Find &In Files"] = "Н&айти в файлах", -- src\editor\menu_search.lua
["Find &Next"] = "Найти &далее", -- src\editor\menu_search.lua
["Find &Previous"] = "Найти &ранее", -- src\editor\menu_search.lua
["Find In Files"] = "Найти в файлах", -- src\editor\findreplace.lua
["Find and insert library function"] = "Найти и вставить библиотечную функцию", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Найти и заменить текст в файлах", -- src\editor\menu_search.lua
["Find and replace text"] = "Найти и заменить текст", -- src\editor\menu_search.lua
["Find and replace text"] = "Найти и заменить текст", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Найти в файлах", -- src\editor\toolbar.lua
["Find text in files"] = "Найти текст в файлах", -- src\editor\menu_search.lua
["Find text"] = "Найти текст", -- src\editor\menu_search.lua
["Find text"] = "Найти текст", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Найти предыдущее вхождение текста", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Найти следующее вхождение текста", -- src\editor\menu_search.lua
["Find"] = "Найти", -- src\editor\findreplace.lua
["Find"] = "Найти", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Свернуть или развернуть все блоки кода", -- src\editor\menu_edit.lua
["Found %d instance."] = {"Найдено %d совпадение.", "Найдено %d совпадения.", "Найдено %d совпадений."}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Найдена запись авто-восстановления и восстановлена сохраненная сессия.", -- src\editor\commands.lua
["Found"] = "Найдено", -- src\editor\findreplace.lua
["Full &Screen"] = "Во весь экр&ан", -- src\editor\menu_view.lua
["Go To Definition"] = "Перейти к определению", -- src\editor\editor.lua
["Go To File..."] = "Перейти к файлу...", -- src\editor\menu_search.lua
@@ -162,24 +158,26 @@ return {
["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
["Ignore and don't index symbols from files in the selected directory"] = "Игнорировать и не индексировать файлы в выбранной папке", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Проигнорирована ошибка в коде инициализации отладчика: %s.", -- src\editor\debugger.lua
["Indexing %d files: '%s'..."] = "Индексировано %d: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Индексирование закончено.", -- src\editor\outline.lua
["Insert Library Function..."] = "Вставить библиотечную функцию...", -- src\editor\menu_search.lua
["Known Files"] = "Файлы Lua", -- src\editor\commands.lua
["Ln: %d"] = "Стр: %d", -- src\editor\editor.lua
["Local console"] = "Локальная консоль", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "&Интерпретатор Lua", -- src\editor\menu_project.lua
["Map Directory..."] = "Добавить папку в список", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Удаленный запрос для '%s' отображен на '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Совпадение регистра", -- src\editor\findreplace.lua
["Match &whole word"] = "Совпадение целого слова", -- src\editor\findreplace.lua
["Match case"] = "Совпадение регистра", -- src\editor\toolbar.lua
["Match whole word"] = "Совпадение целого слова", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Обнаружены смешанные символы конца строки.", -- src\editor\commands.lua
["Navigate"] = "Перейти", -- src\editor\menu_search.lua
["New &File"] = "Новый файл", -- src\editor\filetree.lua
["OVR"] = "ЗАМ", -- src\editor\editor.lua
["Open With Default Program"] = "Открыть используя программу по умолчанию", -- src\editor\filetree.lua
["Open an existing document"] = "Открыть существующий документ", -- src\editor\menu_file.lua
["Open an existing document"] = "Открыть существующий документ", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Открыть файл", -- src\editor\commands.lua
["Options"] = "Установки", -- src\editor\findreplace.lua
["Outline Window"] = "Окно структуры", -- src\editor\menu_view.lua
["Outline"] = "Структура", -- src\editor\outline.lua
["Output (running)"] = "Вывод (запущен)", -- src\editor\debugger.lua, src\editor\output.lua
@@ -201,48 +199,59 @@ return {
["Project"] = "Проект", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Окно &проекта/списка файлов", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Установить параметры командной строки", -- src\editor\menu_project.lua
["Queued %d files to index."] = "Помещено %d файлов в очередь на индексирование.", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Замени&ть в файлах", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Исправить отступ в выделенных строчках", -- src\editor\menu_edit.lua
["Reached end of text and wrapped around."] = "Достигнут конец текста и произведен возврат к началу.", -- src\editor\findreplace.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 Index"] = "Обновить индекс", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Обновить индекс символов из файлов в выбранной папке", -- src\editor\outline.lua
["Refresh"] = "Oбновление", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Отказано в запросе на запуск новой отладочной сессии, поскольку одна сессия уже выполняется.", -- src\editor\debugger.lua
["Regular &expression"] = "Регулярное выражение", -- src\editor\findreplace.lua
["Regular expression"] = "Регулярное выражение", -- src\editor\toolbar.lua
["Remote console"] = "Удаленная консоль", -- src\editor\shellbox.lua
["Rename All Instances"] = "Переименовать все совпадения", -- src\editor\editor.lua
["Replace A&ll"] = "Заменить все", -- src\editor\findreplace.lua
["Replace All Selections"] = "Заменить все выделенные фрагменты", -- src\editor\editor.lua
["Replace"] = "Заменить", -- src\editor\findreplace.lua
["Replace all"] = "Заменить все", -- src\editor\toolbar.lua
["Replace next instance"] = "Заменить следующее совпадение", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"Заменено %d совпадение.", "Заменено %d совпадения.", "Заменено %d совпадений."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Некорректный символ UTF8 заменен на %s.", -- src\editor\commands.lua
["Replaced"] = "Заменено", -- src\editor\findreplace.lua
["Replacing"] = "Замена", -- src\editor\findreplace.lua
["Reset to default layout"] = "Установить расположение окон по умолчанию", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
["Run As Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
["Run To Cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\toolbar.lua
["Run to cursor"] = "Выполнить до курсора", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "&Завершить отладку", -- src\editor\menu_project.lua
["S&top Process"] = "&Завершить процесс", -- src\editor\menu_project.lua
["Save &As..."] = "Сохранить &как...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Сохранить &все", -- src\editor\menu_file.lua
["Save Changes?"] = "Сохранить изменения?", -- src\editor\commands.lua
["Save all open documents"] = "Сохранить все открытые документы", -- src\editor\menu_file.lua
["Save all open documents"] = "Сохранить все открытые документы", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Сохранить файл как", -- src\editor\commands.lua
["Save file?"] = "Сохранить файл?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Сохранить текущий документ в файл под новым именем", -- src\editor\menu_file.lua
["Save the current document"] = "Сохранить текущий документ", -- src\editor\menu_file.lua
["Save the current document"] = "Сохранить текущий документ", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Сохранено авто-восст в %s.", -- src\editor\commands.lua
["Scope"] = "Направление", -- src\editor\findreplace.lua
["Scratchpad error"] = "Ошибка в черновике", -- src\editor\debugger.lua
["Searching for"] = "Поиск", -- src\editor\findreplace.lua
["Search direction"] = "Направление поиска", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Поиск во вложенных папках", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Искать '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Выд: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Выделить &все", -- src\editor\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\menu_project.lua
["Set To Project Directory"] = "Установить папку проекта", -- src\editor\findreplace.lua
["Set project directory from current file"] = "Установить папку проекта по текущему файлу", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set search directory"] = "Установить папку поиска", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Установить используемый интерпретатор", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Установить используемую папку проекта", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Установки: Системы", -- src\editor\menu_edit.lua
@@ -252,40 +261,50 @@ return {
["Show Hidden Files"] = "Показать спрятанные файлы", -- src\editor\filetree.lua
["Show Location"] = "Показать файл в папке", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Показать все файлы", -- src\editor\filetree.lua
["Show context"] = "Показать контекст", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Показать ранее спрятанные файлы", -- src\editor\filetree.lua
["Show multiple result windows"] = "Показать результаты поиска в разных окнах", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Показать подсказку в текущей позиции; переместите курсор в позицию после открывающей скобки функции", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Показать/спрятать панель состояния", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Показать/спрятать панель инструментов", -- src\editor\menu_view.lua
["Sort By Name"] = "Сортировать по имени", -- src\editor\outline.lua
["Sort selected lines"] = "Отсортировать выделенные строки", -- src\editor\menu_edit.lua
["Source"] = "Исходный код", -- src\editor\menu_edit.lua
["Stack"] = "Стек", -- src\editor\debugger.lua
["Start &Debugging"] = "Начать &отладку", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Начать или продолжить отладку", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Начать или продолжить отладку", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "&Войти", -- src\editor\menu_project.lua
["Step &Over"] = "&Следующая строка", -- src\editor\menu_project.lua
["Step O&ut"] = "В&ыйти", -- src\editor\menu_project.lua
["Step into"] = "Войти в функцию", -- src\editor\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
["Step into"] = "Войти в функцию", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Перейти на следующую строку", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Завершить отладку и продолжить текущий процесс", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Переключить полноэкранный режим", -- src\editor\menu_view.lua
["Symbol Index"] = "Индекс символов", -- src\editor\outline.lua
["Text not found."] = "Текст не найден.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "Файл определений API должен быть расположен внутри папки API.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
["Toggle Break&point"] = "&Точка останова", -- src\editor\menu_project.lua
["Toggle bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\menu_project.lua
["Toggle bookmark"] = "Установить/Снять закладку", -- src\editor\toolbar.lua, src\editor\menu_edit.lua
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\toolbar.lua, 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 delete directory '%s': %s"] = "Ошибка удаления папки '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = "Ошибка удаления файла '%s': %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Ошибка загрузки файла '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Ошибка переименования файла '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Ошибка сохранения файла '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Невозможно завершить программу (pid: %d), код %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Отменить последнее действие", -- src\editor\menu_edit.lua
["Unmap Directory"] = "Убрать папку из списка", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "Отменить '%s' как файл запуска", -- src\editor\filetree.lua
["Updated %d file."] = {"Обновлен %d файл.", "Обновлено %d файла.", "Обновлено %d файлов."}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Обновляется индекс символов и установки...", -- src\editor\outline.lua
["Use %s to close."] = "Используйте %s для закрытия.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Используйте '%s' для полного описания.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Используйте '%s' для отображения символов конца строки и '%s' для их преобразования.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Используйте команду 'clear' для очистки содержимого окна и истории.", -- src\editor\shellbox.lua
@@ -293,11 +312,11 @@ return {
["View the outline window"] = "Показать окно структуры", -- src\editor\menu_view.lua
["View the output/console window"] = "Показать окно вывода/консоли", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Показать окно проекта/списка файлов", -- src\editor\menu_view.lua
["View the stack window"] = "Показать окно стека", -- src\editor\menu_view.lua
["View the watch window"] = "Показать окно выражений", -- src\editor\menu_view.lua
["View the stack window"] = "Показать окно стека", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Показать окно выражений", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Выражение", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Добро пожаловать в интерактивный интерпретатор Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "Продолжить сначала", -- src\editor\findreplace.lua
["Wrap around"] = "Продолжить сначала", -- src\editor\toolbar.lua
["You must save the program first."] = "Вы должны сначала сохранить программу.", -- src\editor\commands.lua
["Zoom In"] = "Приблизить", -- src\editor\menu_view.lua
["Zoom Out"] = "Удалить", -- src\editor\menu_view.lua

View File

@@ -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
@@ -157,3 +157,8 @@ 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`

View File

@@ -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

View File

@@ -11,16 +11,20 @@ return {
busted = busted or ide.config.path.busted -- check if the path is configured
if not busted then
local sep = win and ';' or ':'
local path = (os.getenv('PATH') or '')..sep
local default =
win and GenerateProgramFilesPath('LuaRocks\\systree\\bin', sep)..sep
or ''
local path = default
..(os.getenv('PATH') or '')..sep
..(os.getenv('HOME') and os.getenv('HOME') .. '/bin' or '')
local paths = {}
for p in path:gmatch("[^"..sep.."]+") do
busted = busted or GetFullPathIfExists(p, win and 'busted.exe' or 'busted')
busted = busted or GetFullPathIfExists(p, win and 'busted.bat' or 'busted')
table.insert(paths, p)
end
if not busted then
DisplayOutput("Can't find busted executable in any of the folders in PATH: "
..table.concat(paths, ", ").."\n")
DisplayOutputLn("Can't find busted executable in any of the folders in PATH: "
..table.concat(paths, ", "))
return
end
end
@@ -39,7 +43,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)

View File

@@ -26,15 +26,16 @@ 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
@@ -83,7 +84,7 @@ return {
local debugopt = mac and "-debug 1 -project " or "-debug "
local skin = cfg.skin and (" -skin "..ide.config.corona.skin) or ""
local noconsole = (cfg.showconsole and ""
or (win and "-no-console " or "-no-console YES "))
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)

View File

@@ -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)

View File

@@ -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,11 +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)
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,

View File

@@ -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)

View File

@@ -1,19 +1,141 @@
-- Copyright 2011-13 Paul Kulchenko, ZeroBrane LLC
--[[
Support for Hub added by Marmalade.
--]]
local quick
local win = ide.osname == "Windows"
local mac = ide.osname == "Macintosh"
local exe = win and [[win32\s3e_simulator_debug.exe]] or [[loader/osx/s3e_simulator_debug]]
local exe = win and [[win32\s3e_simulator_release.exe]] or [[loader/osx/s3e_simulator_release]]
local exe_d = win and [[win32\s3e_simulator_debug.exe]] or [[loader/osx/s3e_simulator_debug]]
local s3e = os.getenv("S3E_DIR")
local prev_debug_loader
--[[
Parse project file
--]]
function ProjectSettings(hub_project)
local project_settings = {}
local in_section = false
for line in io.lines(hub_project) do
-- Ignore comments and blank lines
if not line:find('^%s*;') and not line:match('^%s*$') then
section = line:match('^%s*%[([^%]]+)%]%s*$')
if section then
in_section = "GENERAL" == section:upper()
elseif in_section then
local key, value = line:match('^%s*(%w+)%s*=%s*(.-)%s*$')
if tonumber(value) then
project_settings[key] = tonumber(value)
elseif value:upper() == "TRUE" then
project_settings[key] = true
elseif value:upper() == "FALSE" then
project_settings[key] = false
else
project_settings[key] = value
end
end
end
end
return project_settings
end
function GetFileName(filePath)
if (not filePath) then return end
local wxn = wx.wxFileName(filePath)
return wxn:GetName()
end
function GetQuickBuildFolder(mkb_quick)
for line in io.lines(mkb_quick) do
if line:find('^QUICK') then
local dir = line:match('^QUICK;([^;]+);')
return dir
end
end
end
local project_settings = {}
function LauncherFromHubProject(projdir, project_name)
local sep = GetPathSeparator()
local mkb_quick = projdir..sep.."project_"..project_name..sep.."mkb-quick.txt"
if not mkb_quick or not wx.wxFileExists(mkb_quick) then
DisplayOutputLn(("Warning: can't find '%s' file."):format(mkb_quick))
return
end
local build_folder = GetQuickBuildFolder(mkb_quick)
if not build_folder or not wx.wxDirExists(projdir..sep..build_folder) then
DisplayOutputLn(("Warning: can't find '%s' Quick build folder."):format(build_folder))
return
end
local project_file = projdir..sep.."project_"..project_name..sep.."project.ini"
if not project_file or not wx.wxFileExists(project_file) then
DisplayOutputLn(("Warning: can't find '%s' Hub project file."):format(project_file))
else
project_settings = ProjectSettings(project_file)
end
if next(project_settings) == nil then
DisplayOutputLn(("Warning: can't read settings from '%s' project file. Using defaults."):format(project_file))
project_settings = {}
end
-- Use simulator config
local via = projdir..sep..build_folder..sep..project_name.."_"..(project_settings.isDebug and 'debug' or 'release')..".via"
if not via or not wx.wxFileExists(via) then
DisplayOutputLn(("Warning: can't find '%s' via file."):format(via))
via = projdir..sep..build_folder..sep.."web_"..(project_settings.isDebug and 'debug' or 'release')..".via"
end
if not via or not wx.wxFileExists(via) then
DisplayOutputLn(("Warning: can't find '%s' via file."):format(via))
via = nil
end
return via
end
return {
name = "Marmalade Quick",
description = "Marmalade Quick mobile framework",
api = {"baselib", "marmalade"},
frun = function(self,wfilename,rundebug)
quick = quick or ide.config.path.quick or (s3e and GetFullPathIfExists(s3e, exe))
local projdir = self:fworkdir(wfilename)
-- check for *.mkb file; it can be in the same or in the parent folder
local mproj, mfile = MergeFullPath(projdir, "./")
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
if not mfile then
mproj, mfile = MergeFullPath(projdir, "../")
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
end
if not mfile then
DisplayOutputLn(("Can't find '%s' project file."):format(mproj))
return
end
-- Check Marmalade project configuration
local via = LauncherFromHubProject(mproj, GetFileName(mfile))
quick = prev_debug_loader == project_settings.isDebugLoader and quick or nil
quick = quick or ide.config.path.quick or (project_settings.isDebugLoader and (s3e and GetFullPathIfExists(s3e, exe_d)) or (s3e and GetFullPathIfExists(s3e, exe)))
prev_debug_loader = project_settings.isDebugLoader
if not quick then
local sep = win and ';' or ':'
local sep = wx.wxPATH_SEP
local path =
win and ([[C:\Marmalade]]..sep..[[D:\Marmalade]]..sep..
GenerateProgramFilesPath('Marmalade', sep)..sep)
@@ -47,38 +169,45 @@ return {
if not s3e then s3e = quick:gsub(exe, '') end
local projdir = self:fworkdir(wfilename)
local file = GetFullPathIfExists(projdir, 'main.lua')
if not file then
DisplayOutputLn("Can't find 'main.lua' file in the current project folder.")
local options
local datadir
if via then
options = ([[--via="%s"]]):format(via)
datadir = FileRead(via):match('--data="([^"]+)"')
else
local mkb = FileRead(mfile)
datadir = mkb:match("options%s*%{[^%}]*s3e%-data%-dir%s*=%s*(.-)%s*[\r\n%}]")
datadir = datadir and datadir:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
local icf1, icf2 = mkb:match("options%s*%{[^%}]*app%-icf%s*=%s*(.-)%s*[\r\n%}]")
icf1 = icf1 and icf1:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
if icf1 and icf1:find(",") then
icf1, icf2 = icf1:match("(.+),(.*)")
end
datadir = datadir and (wx.wxIsAbsolutePath(datadir) and datadir or MergeFullPath(mproj, datadir))
icf1 = icf1 and (wx.wxIsAbsolutePath(icf1) and icf1 or MergeFullPath(mproj, icf1))
icf2 = icf2 and (wx.wxIsAbsolutePath(icf2) and icf2 or MergeFullPath(mproj, icf2))
local quick_prebuilt = project_settings.isDebug and "quick_prebuilt_d.s86" or "quick_prebuilt.s86"
local dll = GetFullPathIfExists(s3e, "../quick/target/"..quick_prebuilt)
or MergeFullPath(s3e, ("../quick/target/%s/"..quick_prebuilt):format(mac and 'osx' or 'win'))
options = table.concat({
([[--dll="%s"]]):format(dll),
(datadir and ([[--data="%s"]]):format(datadir) or ''),
-- Quick doesn't handle correctly spaces in quoted parameters on OSX,
-- so replace those with escaped spaces; still quote on Windows
(icf1 and ([[--app-icf1=%s]]):format(mac and icf1:gsub(" ", "\\ ") or '"'..icf1..'"') or ''),
(icf2 and ([[--app-icf2=%s]]):format(mac and icf2:gsub(" ", "\\ ") or '"'..icf2..'"') or nil),
}, " ")
end
if not datadir then
DisplayOutputLn("Failed to determine data dir")
return
end
-- check for *.mkb file; it can be in the same or in the parent folder
local mproj, mfile = MergeFullPath(projdir, "./")
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
if not mfile then
mproj, mfile = MergeFullPath(projdir, "../")
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
end
if not mfile then
DisplayOutputLn(("Can't find '%s' project file."):format(mproj))
return
end
local mkb = FileRead(mfile)
local datadir = mkb:match("options%s*%{[^%}]*s3e%-data%-dir%s*=%s*(.-)%s*[\r\n%}]")
datadir = datadir and datadir:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
local icf1, icf2 = mkb:match("options%s*%{[^%}]*app%-icf%s*=%s*(.-)%s*[\r\n%}]")
icf1 = icf1 and icf1:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
if icf1 and icf1:find(",") then
icf1, icf2 = icf1:match("(.+),(.*)")
end
datadir = datadir and (wx.wxIsAbsolutePath(datadir) and datadir or MergeFullPath(mproj, datadir))
icf1 = icf1 and (wx.wxIsAbsolutePath(icf1) and icf1 or MergeFullPath(mproj, icf1))
icf2 = icf2 and (wx.wxIsAbsolutePath(icf2) and icf2 or MergeFullPath(mproj, icf2))
if rundebug then
-- start running the application right away
DebuggerAttachDefault({redirect = mac and "r" or "c", basedir = datadir,
@@ -99,17 +228,6 @@ return {
end
end
local dll = GetFullPathIfExists(s3e, "../quick/target/quick_prebuilt_d.s86")
or MergeFullPath(s3e, ("../quick/target/%s/quick_prebuilt_d.s86"):format(mac and 'osx' or 'win'))
local options = table.concat({
([[--dll="%s"]]):format(dll),
(datadir and ([[--data="%s"]]):format(datadir) or ''),
-- Quick doesn't handle correctly spaces in quoted parameters on OSX,
-- so replace those with escaped spaces; still quote on Windows
(icf1 and ([[--app-icf1=%s]]):format(mac and icf1:gsub(" ", "\\ ") or '"'..icf1..'"') or ''),
(icf2 and ([[--app-icf2=%s]]):format(mac and icf2:gsub(" ", "\\ ") or '"'..icf2..'"') or nil),
}, " ")
local cmd = ('"%s" %s'):format(quick, options)
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
return CommandLineRun(cmd,GetPathWithSep(projdir),true,true)

View File

@@ -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)

View File

@@ -57,17 +57,27 @@ local function match_comment(s, pos)
return '--' .. part, pos
end
-- note: matches invalid numbers too
-- note: matches invalid numbers too (for example, 0x)
local function match_numberlike(s, pos)
local tok = s:match('^0[xX][0-9A-Fa-f]*', pos)
if tok then return tok end
local tok = s:match('^[0-9%.]+', pos)
if tok then
local tok2 = s:match('^[eE][+-]?[0-9]*', pos + #tok)
if tok2 then tok = tok .. tok2 end
return tok
local hex = s:match('^0[xX]', pos)
if hex then pos = pos + #hex end
local longint = (hex and '^%x+' or '^%d+') .. '[uU]?[lL][lL]'
local mantissa1 = hex and '^%x+%.?%x*' or '^%d+%.?%d*'
local mantissa2 = hex and '^%.%x+' or '^%.%d+'
local exponent = hex and '^[pP][+%-]?%x*' or '^[eE][+%-]?%d*'
local imaginary = '^[iI]'
local tok = s:match(longint, pos)
if not tok then
tok = s:match(mantissa1, pos) or s:match(mantissa2, pos)
if tok then
local tok2 = s:match(exponent, pos + #tok)
if tok2 then tok = tok..tok2 end
tok2 = s:match(imaginary, pos + #tok)
if tok2 then tok = tok..tok2 end
end
end
return nil
return tok and (hex or '') .. tok or hex
end
local function newset(s)
@@ -105,7 +115,7 @@ function M.lex(code, f, pos)
local tok = code:match('^#![^\n]*\n', pos) -- shebang
if tok then f('Shebang', tok, 1) pos = pos + #tok end
while pos <= #code do
local p2, n2, n1 = code:match('^%s*()((%S)%S?)', pos)
local p2, n2, n1, n3 = code:match('^%s*()((%S)(%S?))', pos)
if not p2 then assert(code:sub(pos):match('^%s*$')); break end
pos = p2
@@ -141,7 +151,7 @@ function M.lex(code, f, pos)
f('Unknown', code:sub(pos), pos) -- unterminated string
pos = #code + 1
end
elseif dig[n1] then
elseif dig[n1] or (n1 == '.' and dig[n3]) then
local tok = match_numberlike(code, pos)
assert(tok)
f('Number', tok, pos)
@@ -193,7 +203,7 @@ function M.lexc(code, f, pos)
M.lex(code, function(tag, name, pos)
yield {tag=tag, name, lineinfo=pos}
end, pos)
yield {tag='Eof'}
yield {tag='Eof', lineinfo = #code+1}
end)
return setmetatable({f=func}, Stream)
end

View File

@@ -9,10 +9,6 @@ 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.
@@ -47,11 +43,7 @@ function PARSE.parse_scope(lx, f, level)
end
local function scope_end(opt, lineinfo)
local scope = #scopes
if scope <= 1 then
warn("'end' without opening block", lineinfo)
else
table.remove(scopes)
end
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
@@ -181,21 +173,40 @@ function PARSE.parse_scope(lx, f, level)
scopes[#scopes].inside_table = newval
end
elseif c.tag == 'Id' then
local scope = #scopes
local inside_local = scopes[scope].inside_local ~= nil
local inside_table = scopes[scope].inside_table
local cnext = lx:peek()
if cnext.tag == 'Keyword' and (cnext[1] == '(' or cnext[1] == '{')
or cnext.tag == 'String' then
f('FunctionCall', c[1], c.lineinfo, scopes[#scopes].inside_local ~= nil)
f('FunctionCall', c[1], c.lineinfo, inside_local)
end
local scope = #scopes
local inside_local = scopes[scope].inside_local ~= nil
if (scopes[scope].inside_table or cprev[1] == ',')
and cnext.tag == 'Keyword' and cnext[1] == '=' then
-- table field
f('String', c[1], c.lineinfo, inside_local)
-- either this is inside a table or it continues from a comma,
-- which may be a field assignment, so assume it's in a table
if (inside_table or cprev[1] == ',') and cnext.tag == 'Keyword' and cnext[1] == '=' then
-- table field; table fields are tricky to handle during incremental
-- processing as "a = 1" may be either an assignment (in which case
-- 'a' is Id) or a field initialization (in which case it's a String).
-- Since it's not possible to decide between two cases in isolation,
-- this is not a good place to insert a break; instead, the break is
-- inserted at the location of the previous keyword, which allows
-- to properly handle those cases. The desired location of
-- the restart point is returned as the `nobreak` value.
f('String', c[1], c.lineinfo,
inside_local or cprev and cprev.tag == 'Keyword' and cprev.lineinfo)
elseif cprev.tag == 'Keyword' and (cprev[1] == ':' or cprev[1] == '.') then
f('String', c[1], c.lineinfo, true)
else
f('Id', c[1], c.lineinfo, inside_local)
f('Id', c[1], c.lineinfo, true)
-- this looks like the left side of (multi-variable) assignment
-- unless it's a part of `= var, field = value`, so skip if inside a table
if not inside_table and not (cprev and cprev.tag == 'Keyword' and cprev[1] == '=') then
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
local c = lx:next(); if lx:peek().tag ~= 'Id' then break end
c = lx:next()
f('Id', c[1], c.lineinfo, true)
end
end
end
end
@@ -249,11 +260,7 @@ 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
if mt ~= nil then vars = mt.__index end
elseif op == 'Id'
or op == 'String' or op == 'FunctionCall' or op == 'Function' then
-- Just make callback

View File

@@ -515,7 +515,7 @@ function M.require_inspect(name, report, spath)
vinfo = T.error'module not found' --IMPROVE: include search paths?
end
M.package_loaded[name] = {vinfo, mast}
return vinfo
return vinfo, mast
end
@@ -703,12 +703,31 @@ function M.infer_values(top_ast, tokenlist, src, report)
if #iter_ast == 1 and iter_ast[1].tag == 'Call' and iter_ast[1][1].value == ipairs then
for i, var_ast in ipairs(varlist_ast) do
if i == 1 then set_value(var_ast, T.number)
elseif i == 2 then set_value(var_ast, T.universal)
-- handle the type of the value as the type of the first element
-- in the table that is a parameter for ipairs
elseif i == 2 then
local t_ast = iter_ast[1][2]
local value = T.universal
if (known(t_ast.value) or T.istabletype[t_ast.value]) then
local ok; ok, value = pzcall(tindex, {t_ast, {tag='Number', 1}}, t_ast.value, 1)
if not ok then value = T.error(t_ast.value) end
end
set_value(var_ast, value)
else set_value(var_ast, nil) end
end
elseif #iter_ast == 1 and iter_ast[1].tag == 'Call' and iter_ast[1][1].value == pairs then
local t_ast = iter_ast[1][2]
local value = T.universal
local key
if t_ast.value and (known(t_ast.value) or T.istabletype[t_ast.value]) then
key = next(t_ast.value)
local ok; ok, value = pzcall(tindex, {t_ast, {tag='String', key}}, t_ast.value, key)
if not ok then value = T.error(t_ast.value) end
end
for i, var_ast in ipairs(varlist_ast) do
if i <= 2 then set_value(var_ast, T.number)
if i == 1 then set_value(var_ast, type(key))
elseif i == 2 then set_value(var_ast, value)
else set_value(var_ast, nil) end
end
else -- general case, unknown iterator
@@ -771,11 +790,12 @@ function M.infer_values(top_ast, tokenlist, src, report)
-- Any call to require is handled specially (source analysis).
if func == require and type(argvalues[1]) == 'string' then
local spath = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)') -- a HACK? relies on AST lineinfo
local val = M.require_inspect(argvalues[1], report, spath:gsub('[^\\/]+$', ''))
local val, mast = M.require_inspect(argvalues[1], report, spath:gsub('[^\\/]+$', ''))
if known(val) and val ~= nil then
ast.value = val
found = true
end -- note: on nil value, assumes analysis failed (not found). This is a heuristic only.
if mast and mast.valueglobals then ast.valueglobals = mast.valueglobals end
end
-- Attempt call if safe.
if not found and (LS.safe_function[func] or func == pcall and LS.safe_function[argvalues[1]]) then
@@ -820,8 +840,7 @@ function M.infer_values(top_ast, tokenlist, src, report)
local x
local val = function() x=nil end
local fpos = LA.ast_pos_range(ast, tokenlist)
local source = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)') -- a HACK? relies on AST lineinfo
local linenum = LA.pos_to_linecol(fpos, src)
local source, linenum = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)|L(%d+)') -- a HACK? relies on AST lineinfo
local retvals
if ENABLE_RETURN_ANALYSIS then
retvals = get_func_return_values(ast) --Q:move outside of containing conditional?
@@ -1071,10 +1090,10 @@ function M.uninspect(top_ast)
ast.note = nil
ast.nocollect = nil
end)
-- undo infer_values
top_ast.valueglobals = nil
-- undo infer_values
ast.valueglobals = nil
end)
end
@@ -1125,6 +1144,10 @@ function M.inspect(top_ast, tokenlist, src, report)
end
LA.walk(top_ast, function(ast)
if top_ast ~= ast and ast.valueglobals then
for k in pairs(ast.valueglobals) do globals[k] = {set = ast} end
ast.valueglobals = nil
end
if ast.tag == 'Id' or ast.isfield then
local vname = ast[1]
--TODO: rename definedglobal to definedfield for clarity

View File

@@ -202,12 +202,15 @@ lexer.patterns = {
--final_short_comment = "^%-%-([^\n]*)()$",
long_comment = "^%-%-%[(=*)%[\n?(.-)%]%1%]()",
long_string = "^%[(=*)%[\n?(.-)%]%1%]()",
number_longint = "^%d+[uU]?[lL][lL]()",
number_longint_hex = "^%x+[uU]?[lL][lL]()",
number_mantissa = { "^%d+%.?%d*()", "^%d*%.%d+()" },
number_mantissa_hex = { "^%x+%.?%x*()", "^%x*%.%x+()" }, --Lua5.1 and Lua5.2
number_exponant = "^[eE][%+%-]?%d+()",
number_exponant_hex = "^[pP][%+%-]?%d+()", --Lua5.2
number_exponent = "^[eE][%+%-]?%d+()",
number_exponent_hex = "^[pP][%+%-]?%d+()", --Lua5.2
number_hex = "^0[xX]()",
word = "^([%a_][%w_]*)()"
number_imaginary = "^[iI]()",
word = "^([%a_][%w_]*)()",
}
----------------------------------------------------------------------
@@ -411,28 +414,31 @@ end
-- Extract Number.
----------------------------------------------------------------------
function lexer :extract_number()
local j = self.src:match(self.patterns.number_hex, self.i)
if j then
j = self.src:match (self.patterns.number_mantissa_hex[1], j) or
self.src:match (self.patterns.number_mantissa_hex[2], j)
if j then
j = self.src:match (self.patterns.number_exponant_hex, j) or j
end
local patt = self.patterns
local s = self.src
local j = s:match(patt.number_hex, self.i)
local hex = j ~= nil
local longint = hex and patt.number_longint_hex or patt.number_longint
local mantissa1 = hex and patt.number_mantissa_hex[1] or patt.number_mantissa[1]
local mantissa2 = hex and patt.number_mantissa_hex[2] or patt.number_mantissa[2]
local exponent = hex and patt.number_exponent_hex or patt.number_exponent
if not hex then j = self.i end
local t = s:match(longint, j)
if t then
j = t
else
j = self.src:match (self.patterns.number_mantissa[1], self.i) or
self.src:match (self.patterns.number_mantissa[2], self.i)
if j then
j = self.src:match (self.patterns.number_exponant, j) or j
end
j = s:match(mantissa1, j) or s:match(mantissa2, j)
if not j then return end
j = s:match(exponent, j) or j
j = s:match(patt.number_imaginary, j) or j
end
if not j then return end
-- Number found, interpret with tonumber() and return it
local str = self.src:sub (self.i, j-1)
-- :TODO: tonumber on Lua5.2 floating hex may or may not work on Lua5.1
local n = tonumber (str)
if not n then error(str.." is not a valid number according to tonumber()") end
self.i = j
return 'Number', n
-- Number found, interpret with tonumber() and return it
-- return str as the fallback when processing formats not supported by the current interpreter
return 'Number', (tonumber (str) or str)
end
----------------------------------------------------------------------

View File

@@ -19,7 +19,7 @@ end)("os")
local mobdebug = {
_NAME = "mobdebug",
_VERSION = 0.613,
_VERSION = 0.628,
_COPYRIGHT = "Paul Kulchenko",
_DESCRIPTION = "Mobile Remote Debugger for the Lua programming language",
port = os and os.getenv and tonumber((os.getenv("MOBDEBUG_PORT"))) or 8172,
@@ -37,6 +37,7 @@ local setmetatable = setmetatable
local tonumber = tonumber
local unpack = table.unpack or unpack
local rawget = rawget
local gsub, sub, find = string.gsub, string.sub, string.find
-- if strict.lua is used, then need to avoid referencing some global
-- variables, as they can be undefined;
@@ -61,6 +62,7 @@ local corocreate = ngx and coroutine._create or coroutine.create
local cororesume = ngx and coroutine._resume or coroutine.resume
local coroyield = ngx and coroutine._yield or coroutine.yield
local corostatus = ngx and coroutine._status or coroutine.status
local corowrap = coroutine.wrap
if not setfenv then -- Lua 5.2+
-- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html
@@ -124,34 +126,36 @@ local debugee = function ()
for _ = 1, 10 do a = a + 1 end
error(deferror)
end
local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
local function q(s) return string.gsub(s, '([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
local serpent = (function() ---- include Serpent module for serialization
local n, v = "serpent", 0.28 -- (C) 2012-15 Paul Kulchenko; MIT License
local n, v = "serpent", 0.285 -- (C) 2012-15 Paul Kulchenko; MIT License
local c, d = "Paul Kulchenko", "Lua serializer and pretty printer"
local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'}
local badtype = {thread = true, userdata = true, cdata = true}
local getmetatable = debug and debug.getmetatable or getmetatable
local keyword, globals, G = {}, {}, (_G or _ENV)
for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false',
'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat',
'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end
for k,v in pairs(G) do globals[v] = k end -- build func to name mapping
for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do
for k,v in pairs(G[g] or {}) do globals[v] = g..'.'..k end end
for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end
local function s(t, opts)
local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum
local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge
local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge)
local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge)
local numformat = opts.numformat or "%.17g"
local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0
local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)",
-- tostring(val) is needed because __tostring may return a non-string value
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end
local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or s)
local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s))
or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026
or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..tostring(s)..']]' or '' end
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end
local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal
and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end
local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r']
@@ -175,7 +179,9 @@ local function s(t, opts)
if seen[t] then -- already seen this element
sref[#sref+1] = spath..space..'='..space..seen[t]
return tag..'nil'..comment('ref', level) end
if type(mt) == 'table' and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
-- protect from those cases where __tostring may fail
if type(mt) == 'table' and pcall(function() return mt.__tostring and mt.__tostring(t) end)
and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
seen[t] = insref or spath
if mt.__serialize then t = mt.__serialize(t) else t = tostring(t) end
ttype = type(t) end -- new value falls through to be serialized
@@ -195,6 +201,7 @@ local function s(t, opts)
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
or opts.keyallow and not opts.keyallow[key]
or opts.keyignore and opts.keyignore[key]
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
or sparse and value == nil then -- skipping nils; do nothing
elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then
@@ -274,12 +281,22 @@ local function stack(start)
local func = debug.getinfo(f, "f").func
local i = 1
local locals = {}
-- get locals
while true do
local name, value = debug.getlocal(f, i)
if not name then break end
if string.sub(name, 1, 1) ~= '(' then locals[name] = {value, tostring(value)} end
i = i + 1
end
-- get varargs (these use negative indices)
i = 1
while true do
local name, value = debug.getlocal(f, -i)
if not name then break end
locals[name:gsub("%)$"," "..i..")")] = {value, tostring(value)}
i = i + 1
end
-- get upvalues
i = 1
local ups = {}
while func and true do -- check for func as it may be nil for tail calls
@@ -563,26 +580,26 @@ local function debug_hook(event, line)
-- Unfortunately, there is no reliable/quick way to figure out
-- what is the filename and what is the source code.
-- The following will work if the supplied filename uses Unix path.
if file:find("^@") then
file = file:gsub("^@", ""):gsub("\\", "/")
if find(file, "^@") then
file = gsub(gsub(file, "^@", ""), "\\", "/")
-- need this conversion to be applied to relative and absolute
-- file names as you may write "require 'Foo'" to
-- load "foo.lua" (on a case insensitive file system) and breakpoints
-- set on foo.lua will not work if not converted to the same case.
if iscasepreserving then file = string.lower(file) end
if file:find("%./") == 1 then file = file:sub(3)
else file = file:gsub("^"..q(basedir), "") end
if find(file, "%./") == 1 then file = sub(file, 3)
else file = gsub(file, "^"..q(basedir), "") end
-- some file systems allow newlines in file names; remove these.
file = file:gsub("\n", ' ')
file = gsub(file, "\n", ' ')
else
-- this is either a file name coming from loadstring("chunk", "file"),
-- or the actual source code that needs to be serialized (as it may
-- include newlines); assume it's a file name if it's all on one line.
if file:find("[\r\n]") then
if find(file, "[\r\n]") then
file = mobdebug.line(file)
else
if iscasepreserving then file = string.lower(file) end
file = file:gsub("\\", "/"):gsub(file:find("^%./") and "^%./" or "^"..q(basedir), "")
file = gsub(gsub(file, "\\", "/"), find(file, "^%./") and "^%./" or "^"..q(basedir), "")
end
end
@@ -638,7 +655,7 @@ 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 not abort and res == "exit" then os.exit(1, true); return end
if not abort and res == "exit" then mobdebug.onexit(1, true); return end
if not abort and res == "done" then mobdebug.done(); return end
abort = res
-- only abort if safe; if not, there is another (earlier) check inside
@@ -906,7 +923,6 @@ local function debugger_loop(sev, svars, sfile, sline)
elseif command == "SUSPEND" then
-- do nothing; it already fulfilled its role
elseif command == "DONE" then
server:send("200 OK\n")
coroyield("done")
return -- done with all the debugging
elseif command == "STACK" then
@@ -935,7 +951,7 @@ local function debugger_loop(sev, svars, sfile, sline)
if stream and mode and stream == "stdout" then
-- assign "print" in the global environment
local default = mode == 'd'
genv.print = default and iobase.print or coroutine.wrap(function()
genv.print = default and iobase.print or corowrap(function()
-- wrapping into coroutine.wrap protects this function from
-- being stepped through in the debugger.
-- don't use vararg (...) as it adds a reference for its values,
@@ -1071,7 +1087,7 @@ local function controller(controller_host, controller_port, scratchpad)
else
if status then -- normal execution is done
break
elseif err and not tostring(err):find(deferror) then
elseif err and not string.find(tostring(err), deferror) then
-- report the error back
-- err is not necessarily a string, so convert to string to report
report(debug.traceback(coro_debugee), tostring(err))
@@ -1164,8 +1180,7 @@ local function handle(params, client, options)
local breakpoint = client:receive()
if not breakpoint then
print("Program finished")
os.exit(0, true)
return -- use return here for those cases where os.exit() is not wanted
return
end
local _, _, status = string.find(breakpoint, "^(%d+)")
if status == "200" then
@@ -1194,24 +1209,17 @@ local function handle(params, client, options)
if size then
local msg = client:receive(tonumber(size))
print("Error in remote application: " .. msg)
os.exit(1, true)
return nil, nil, msg -- use return here for those cases where os.exit() is not wanted
return nil, nil, msg
end
else
print("Unknown error")
os.exit(1, true)
-- use return here for those cases where os.exit() is not wanted
return nil, nil, "Debugger error: unexpected response '" .. breakpoint .. "'"
end
if done then break end
end
elseif command == "done" then
client:send(string.upper(command) .. "\n")
if client:receive() ~= "200 OK" then
print("Unknown error")
os.exit(1, true)
return nil, nil, "Debugger error: unexpected response after DONE"
end
-- no response is expected
elseif command == "setb" or command == "asetb" then
_, _, _, file, line = string.find(params, "^([a-z]+)%s+(.-)%s+(%d+)%s*$")
if file and line then
@@ -1498,7 +1506,9 @@ local function handle(params, client, options)
print("exit -- exits debugger and the application")
else
local _, _, spaces = string.find(params, "^(%s*)$")
if not spaces then
if spaces then
return nil, nil, "Empty command"
else
print("Invalid command")
return nil, nil, "Invalid command"
end
@@ -1537,9 +1547,11 @@ local function listen(host, port)
while true do
io.write("> ")
local line = io.read("*line")
handle(line, client)
local file, line, err = handle(io.read("*line"), client)
if not file and not err then break end -- completed debugging
end
client:close()
end
local cocreate
@@ -1591,10 +1603,7 @@ mobdebug.coro = coro
mobdebug.done = done
mobdebug.pause = function() step_into = true end
mobdebug.yield = nil -- callback
mobdebug.onexit = os and os.exit or done
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
package.loaded.mobdebug = mobdebug
return mobdebug

View File

@@ -10,6 +10,7 @@ local P = {
-- Events that are marked with "return false" can return `false` to
-- abort further processing.
-- For `onEditorPreSave` event it means that file saving will be aborted.
-- For `onEditorPreClose` event it means that closing an editor tab will be aborted.
-- For `onEditorKeyDown` event it means that the key will be "eaten".
-- For `onEditorAction` event it means that the action will not be executed.
-- For `onFiletreeActivate` event it means that no further processing is done.
@@ -20,6 +21,7 @@ local events = {
onRegister = function(self) end,
onUnRegister = function(self) end,
onEditorLoad = function(self, editor) end,
onEditorPreClose = function(self, editor) end, -- return false
onEditorClose = function(self, editor) end,
onEditorNew = function(self, editor) end,
onEditorPreSave = function(self, editor, filepath) end, -- return false
@@ -30,15 +32,18 @@ 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,
onMenuEditor = function(self, menu, editor, event) end,
onMenuEditorTab = function(self, menu, notebook, event, index) end,
onMenuOutput = function(self, menu, editor, event) end,
onMenuFiletree = function(self, menu, tree, event) end,
onMenuOutline = function(self, menu, tree, event) end,
onMenuWatch = function(self, menu, tree, event) end,
onProjectPreLoad = function(self, project) end, -- before project is changed
onProjectLoad = function(self, project) end, -- after project is changed
onProjectClose = function(self, project) end,

View File

@@ -4,11 +4,13 @@ function CMarkSymbols(code, pos, vars)
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)
s,e,pref,cap,parms = str:find("^(%s*)"..funcdeftmpl, pos)
if (not s) then
s,e,pref,cap,parms = str:find("^(%s*)"..funcdeftmpl, pos)
s,e,pref,cap,parms = str:find("([\r\n]%s*)"..funcdeftmpl, pos)
end
if parms and #parms > 0 and not parms:find(idtmpl) then
-- skip strange parameters and things of `else if ()` variety
if parms and #parms > 0 and not parms:find(idtmpl)
or cap and cap:find("%sif%s*$") then
pos = s+#pref+#cap+#parms
else
break

View File

@@ -71,15 +71,19 @@ return {
end,
isincindent = function(str)
-- remove "long" comments and escaped slashes (to process \' and \" below)
str = str:gsub('%-%-%[=*%[.-%]=*%]',''):gsub([[\\]],'')
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()","()")
str = (str
:gsub('%[=*%[.-%]=*%]','') -- remove long strings
:gsub('%[=*%[.*','') -- remove partial long strings
:gsub('%-%-.*','') -- strip comments after strings are processed
:gsub("%b()","()") -- remove all function calls
)
local term = str:match("^%s*(%w+)%W*")
local terminc = term and incindent[term] and 1 or 0
@@ -140,8 +144,8 @@ return {
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)
-- check for assignments
local sep = editor.spec.sep
@@ -160,10 +164,16 @@ return {
local var,typ = tx:match("%s*"..identifier.."%s*=%s*([^;]+)")
var = var and var:gsub("local",""):gsub("%s","")
-- handle `require` as a special case that returns a type that matches its parameter
-- (this is without deeper analysis on loaded files and should work most of the time)
local req = typ and typ:match("^require%s*%(?%s*['\"](.+)['\"]%s*%)?")
typ = req or typ
typ = (typ and typ
:gsub("%b()","")
:gsub("%b{}","")
:gsub("%b[]",".0")
-- replace concatenation with addition to avoid misidentifying types
:gsub("%.%.+","+")
-- remove comments; they may be in strings, but that's okay here
:gsub("%-%-.*",""))
if (typ and (typ:match(",") or typ:match("%sor%s") or typ:match("%sand%s"))) then
@@ -187,7 +197,7 @@ return {
if (var and typ) then
local class,func = typ:match(varname.."["..q(sep).."]"..varname)
if (assigns[typ]) then
if (assigns[typ] and not req) then
assigns[var] = assigns[typ]
elseif (func) then
local added
@@ -251,6 +261,7 @@ return {
[[bit32.arshift bit32.band bit32.bnot bit32.bor bit32.btest bit32.bxor bit32.extract
bit32.lrotate bit32.lshift bit32.replace bit32.rrotate bit32.rshift
coroutine.create coroutine.resume coroutine.running coroutine.status coroutine.wrap coroutine.yield
coroutine.isyieldable
debug.debug debug.getfenv debug.gethook debug.getinfo debug.getlocal
debug.getmetatable debug.getregistry debug.getupvalue debug.getuservalue debug.setfenv
debug.sethook debug.setlocal debug.setmetatable debug.setupvalue debug.setuservalue
@@ -260,6 +271,7 @@ return {
math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.cosh math.deg math.exp
math.floor math.fmod math.frexp math.ldexp math.log math.log10 math.max math.min math.modf
math.pow math.rad math.random math.randomseed math.sin math.sinh math.sqrt math.tan math.tanh
math.type math.tointeger math.maxinteger math.mininteger math.ult
os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname
package.loadlib package.searchpath package.seeall package.config
package.cpath package.loaded package.loaders package.path package.preload package.searchers

View File

@@ -1,10 +1,8 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
local ide = ide
local statusBar = ide.frame.statusBar
local q = EscapeMagic
-- api loading depends on Lua interpreter
@@ -189,7 +187,7 @@ 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
@@ -226,8 +224,19 @@ local function resolveAssign(editor,tx)
local c
if (assigns) then
-- find assign
local change = true
local change, n, refs, stopat = true, 0, {}, os.clock() + 0.2
while (change) do
-- abort the check if the auto-complete is taking too long
if n > 50 and os.clock() > stopat then
if ide.config.acandtip.warning then
DisplayOutputLn("Warning: Auto-complete was aborted after taking too long to complete."
.. " Please report this warning along with the text you were typing to support@zerobrane.com.")
end
break
else
n = n + 1
end
local classname = nil
c = ""
change = false
@@ -244,7 +253,12 @@ local function resolveAssign(editor,tx)
c = c..w..s
end
end
-- check for loops in type assignment
if refs[tx] then break end
refs[tx] = c
tx = c
-- if there is any class duplication, abort the loop
if classname and select(2, c:gsub(classname, classname)) > 1 then break end
end
else
c = tx
@@ -402,6 +416,7 @@ function DynamicWordsRem(editor,content,line,numlines)
end
function DynamicWordsRemoveAll(editor)
if ide.config.acandtip.nodynwords then return end
DynamicWordsRem(editor,editor:GetText())
end
@@ -453,7 +468,7 @@ local function getAutoCompApiList(childs,fragment,method)
return ret
end
if cache[childs] then
if cache[childs] and cache[childs][fragment] then
return cache[childs][fragment]
end
@@ -513,8 +528,8 @@ function CreateAutoCompList(editor,key,pos)
local tab,rest = resolveAssign(editor,key)
local progress = tab and tab.childs
statusBar:SetStatusText(progress and tab.classname or "",1)
if not (progress) then return end
ide:SetStatusFor(progress and tab.classname and ("Auto-completing '%s'..."):format(tab.classname) or "")
if not progress then return end
if (tab == ac) then
local _, krest = rest:match("([%w_]+)["..q(sep).."]([%w_]*)%s*$")
@@ -528,33 +543,6 @@ function CreateAutoCompList(editor,key,pos)
rest = rest:gsub("[^%w_]","")
end
local last = key:match("([%w_]+)%s*$")
-- build dynamic word list
-- only if api search couldnt descend
-- ie we couldnt find matching sub items
local dw = ""
if (last and #last >= (ide.config.acandtip.startat or 2)) then
last = last:lower()
if dynamicwords[last] then
local list = dynamicwords[last]
table.sort(list,function(a,b)
local ma,mb = a:sub(1,#last)==last, b:sub(1,#last)==last
if (ma and mb) or (not ma and not mb) then return a<b end
return ma
end)
-- ignore if word == last and sole user
for i,v in ipairs(list) do
if (v:lower() == last and dywordentries[v] == 1) then
table.remove(list,i)
break
end
end
dw = table.concat(list," ")
end
end
-- list from api
local apilist = getAutoCompApiList(tab.childs or tab,rest,method)
@@ -586,7 +574,9 @@ function CreateAutoCompList(editor,key,pos)
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 var:find(key, 1, true) == 1
-- skip the variable formed by what's being typed
and (not token.fpos or not pos or token.fpos < pos-#key) then
-- if it's a global variable, store in the auto-complete list,
-- but if it's local, store separately as it needs to be checked
table.insert(token.context[var] and vars or apilist, var)
@@ -599,33 +589,42 @@ function CreateAutoCompList(editor,key,pos)
end
end
local compstr = ""
-- include dynamic words
local last = key:match("([%w_]+)%s*$")
if (last and #last >= (ide.config.acandtip.startat or 2)) then
last = last:lower()
for i,v in ipairs(dynamicwords[last] or {}) do
-- ignore if word == last and sole user
if (v:lower() == last and dywordentries[v] == 1) then break end
table.insert(apilist, v)
end
end
local li
if apilist then
if (#rest > 0) then
local strategy = ide.config.acandtip.strategy
if (strategy == 2 and #apilist < 128) then
local pat = rest:gsub(".",function(c)
local l = c:lower()..c:upper()
return "["..l.."]([^"..l.." ]*)"
end)
local g = string.gsub
-- when matching "ret": "ret." < "re.t" < "r.et"
local patany = rest:gsub(".", function(c) return "["..c:lower()..c:upper().."](.-)" end)
local patcase = rest:gsub(".", function(c) return c.."(.-)" end)
local weights = {}
local penalty = 0.1
local function weight(str)
if not weights[str] then
local w = 0
str:gsub(patany,function(...)
local l = {...}
-- penalize gaps between matches, more so at the beginning
for n, v in ipairs(l) do w = w + #v * (1 + (#l-n)*penalty) end
end)
weights[str] = w + (str:find(patcase) and 0 or penalty)
end
return weights[str]
end
table.sort(apilist,function(a,b)
local ma,mb = 0,0
g(a,pat,function(...)
local l = {...}
for _, v in ipairs(l) do
ma = ma + ((v=="") and 0 or 1)
end
end)
g(b,pat,function(...)
local l = {...}
for _, v in ipairs(l) do
mb = mb + ((v=="") and 0 or 1)
end
end)
local ma, mb = weight(a), weight(b)
if (ma == mb) then return a:lower()<b:lower() end
return ma<mb
end)
@@ -647,11 +646,7 @@ function CreateAutoCompList(editor,key,pos)
else prev = apilist[i] end
end
compstr = table.concat(apilist," ")
li = table.concat(apilist," ")
end
-- concat final, list complete first
local li = compstr .. (#compstr > 0 and #dw > 0 and " " or "") .. dw
return li ~= "" and (#li > 1024 and li:sub(1,1024).."..." or li) or nil
return li and #li > 1024 and li:sub(1,1024).."..." or li
end

View File

@@ -1,34 +1,44 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
---------------------------------------------------------
local maxlines = 8
local row_height = 46
local row_width = 450
local win = ide.osname == 'Windows'
function CommandBarShow(params)
local onDone, onUpdate, onItem, onSelection, defaultText, selectedText =
params.onDone, params.onUpdate, params.onItem, params.onSelection,
params.defaultText, params.selectedText
local row_width = ide.config.commandbar.width or 0
if row_width < 1 then
row_width = math.max(450, math.floor(row_width * ide:GetMainFrame():GetClientSize():GetWidth()))
end
local lines = {}
local linesnow = #lines
local linenow = 0
local ed = ide:GetEditor()
local pos = ed and ed:GetScreenPosition() or ide:GetEditorNotebook():GetScreenPosition()
local nb = ide:GetEditorNotebook()
local pos = nb:GetScreenPosition()
if pos then
pos:SetX(pos:GetX()+ide:GetEditorNotebook():GetClientSize():GetWidth()-row_width-16)
pos:SetY(pos:GetY()+2)
if not win then pos = ide:GetMainFrame():ScreenToClient(pos) end
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 = win and wx.wxFrame(ide:GetMainFrame(), wx.wxID_ANY, "Command Bar",
local frame = wx.wxFrame(ide:GetMainFrame(), wx.wxID_ANY, "Command Bar",
pos, wx.wxDefaultSize,
wx.wxFRAME_TOOL_WINDOW + wx.wxFRAME_FLOAT_ON_PARENT + wx.wxNO_BORDER)
wx.wxFRAME_NO_TASKBAR + wx.wxFRAME_FLOAT_ON_PARENT + wx.wxNO_BORDER)
local panel = wx.wxPanel(frame or ide:GetMainFrame(), wx.wxID_ANY,
win and wx.wxDefaultPosition or pos, wx.wxDefaultSize, wx.wxFULL_REPAINT_ON_RESIZE)
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
@@ -37,8 +47,6 @@ function CommandBarShow(params)
local results = wx.wxScrolledWindow(panel, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxSize(0, 0))
if not frame then frame = panel end
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))
@@ -81,7 +89,7 @@ function CommandBarShow(params)
-- needed because KILL_FOCUS handler can be called after closing window
local function onExit(index)
onExit = function() end
onDone(index and lines[index], index ~= nil, search:GetValue())
onDone(index and lines[index], index, search:GetValue())
frame:Close()
end
@@ -172,7 +180,10 @@ function CommandBarShow(params)
local function onKeyDown(event)
local keycode = event:GetKeyCode()
if event:GetModifiers() ~= wx.wxMOD_NONE then
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
@@ -195,7 +206,7 @@ function CommandBarShow(params)
if linenow <= 0 then linenow = 1 end
end
elseif keycode == wx.WXK_ESCAPE then
onExit()
onExit(false)
return
else
event:Skip()
@@ -252,6 +263,8 @@ function CommandBarShow(params)
search:Connect(wx.wxEVT_KILL_FOCUS, function() onExit() end)
frame:Show(true)
frame:Update()
frame:Refresh()
search:SetValue((defaultText or "")..(selectedText or ""))
search:SetSelection(#(defaultText or ""), -1)
@@ -306,21 +319,36 @@ 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("%.%*$","")
local prefilter = ide.config.commandbar and ide.config.commandbar.prefilter
-- anchor for 1-2 symbol patterns to speed up search
local needanchor = prefilter and prefilter * 4 <= #t and plen <= 2
local filter = prefilter and prefilter <= #t
-- expand `abc` into `a.*b.*c`, but limit the prefix to avoid penalty for `s.*s.*s.*....`
and pattern:gsub("[^%w_]+",""):sub(1,4):lower():gsub(".", "%1.*"):gsub("%.%*$","")
or nil
for _, v in ipairs(t) do
if #v >= plen 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}
if #v >= plen then
local match = filter and v:lower():find(filter)
-- check if the current name needs to be prefiltered or anchored (for better performance);
-- if it needs to be anchored, then anchor it at the beginning of the string or the word
if not filter or (match and (not needanchor or match == 1 or v:find("^[%p%s]", match-1))) then
local p = score(pattern, v)
maxp = math.max(p, maxp)
if p > 1 and p > maxp / 4 then
num = num + 1
r[num] = {v, p}
end
end
end
end
table.sort(r, function(a, b) return a[2] > b[2] end)
if limit then r[limit] = nil end -- limit the list to be displayed
-- limit the list to be displayed
-- `r[limit+1] = nil` is not desired as the resulting table may be sorted incorrectly
if tonumber(limit) and limit < #r then
local tmp = r
r = {}
for i = 1, limit do r[i] = tmp[i] end
end
return r
end

View File

@@ -40,10 +40,14 @@ local function findUnusedEditor()
end
function LoadFile(filePath, editor, file_must_exist, skipselection)
local filePath = wx.wxFileName(filePath)
filePath = filePath:gsub("%s+$","")
filePath = wx.wxFileName(filePath)
filePath:Normalize() -- make it absolute and remove all .. and . if possible
filePath = filePath:GetFullPath()
-- if the file name is empty or is a directory, don't do anything
if filePath == '' or wx.wxDirExists(filePath) then return nil end
-- prevent files from being reopened again
if (not editor) then
local doc = ide:FindDocument(filePath)
@@ -57,54 +61,69 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
end
end
-- if not opened yet, try open now
local file_text = FileRead(filePath)
if file_text then
if GetConfigIOFilter("input") then
file_text = GetConfigIOFilter("input")(filePath,file_text)
end
elseif file_must_exist then
return nil
end
local filesize = FileSize(filePath)
if not filesize and file_must_exist then return nil end
local current = editor and editor:GetCurrentPos()
editor = editor or findUnusedEditor() or CreateEditor()
editor:Freeze()
editor:SetupKeywords(GetFileExt(filePath))
editor:MarkerDeleteAll(-1)
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
if filesize then editor:Allocate(filesize) end
editor:SetText("")
editor.bom = string.char(0xEF,0xBB,0xBF)
if file_text and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8
and file_text:find("^"..editor.bom) then
file_text = file_text:gsub("^"..editor.bom, "")
else
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
editor.bom = false
end
editor:SetText(file_text or "")
-- check the editor as it can be empty if the file has malformed UTF8;
-- skip binary files with unknown extensions as they may have any sequences;
-- can't show them anyway.
if file_text and #file_text > 0 and #(editor:GetText()) == 0
and (editor.spec ~= ide.specs.none or not isBinary(file_text)) then
local replacement, invalid = "\022"
file_text, invalid = FixUTF8(file_text, replacement)
if #invalid > 0 then
editor:AppendText(file_text)
local lastline = nil
for _, n in ipairs(invalid) do
local line = editor:LineFromPosition(n)
if line ~= lastline then
DisplayOutputLn(("%s:%d: %s")
:format(filePath, line+1, TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
lastline = line
local inputfilter = GetConfigIOFilter("input")
local file_text
ide:PushStatus("")
FileRead(filePath, 1024*1024, function(s)
if not file_text then
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
if s and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and s:find("^"..editor.bom) then
s = s:gsub("^"..editor.bom, "")
else
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
editor.bom = false
end
file_text = s
end
if inputfilter then s = inputfilter(filePath, s) end
local expected = editor:GetLength() + #s
editor:AppendText(s)
-- if the length is not as expected, then either it's a binary file or invalid UTF8
if editor:GetLength() ~= expected then
-- skip binary files with unknown extensions as they may have any sequences
if editor.spec == ide.specs.none and IsBinary(s) then
DisplayOutputLn(("%s: %s"):format(filePath,
TR("Binary file is shown as read-only as it is only partially loaded.")))
file_text = ''
editor:SetReadOnly(true)
return false
end
-- handle invalid UTF8 characters
-- fix: doesn't handle characters split by callback buffer
local replacement, invalid = "\022"
s, invalid = FixUTF8(s, replacement)
if #invalid > 0 then
editor:AppendText(s)
local lastline = nil
for _, n in ipairs(invalid) do
local line = editor:LineFromPosition(n)
if line ~= lastline then
DisplayOutputLn(("%s:%d: %s"):format(filePath, line+1,
TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
lastline = line
end
end
end
end
end
end
if filesize and filesize > 0 then
ide:PopStatus()
ide:PushStatus(TR("%s%% loaded..."):format(math.floor(100*editor:GetLength()/filesize)))
end
end)
ide:PopStatus()
editor:Colourise(0, -1)
editor:ResetTokenList() -- reset list of tokens if this is a reused editor
@@ -128,7 +147,7 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
DisplayOutputLn(("%s: %s")
:format(filePath, TR("Mixed end-of-line encodings detected.")..' '..
TR("Use '%s' to show line endings and '%s' to convert them.")
:format("GetEditor():SetViewEOL(1)", "GetEditor():ConvertEOLs(GetEditor():GetEOLMode())")))
:format("ide:GetEditor():SetViewEOL(1)", "ide:GetEditor():ConvertEOLs(ide:GetEditor():GetEOLMode())")))
elseif foundcrlf then
editor:SetEOLMode(wxstc.wxSTC_EOL_CRLF)
elseif foundlf then
@@ -138,18 +157,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.
@@ -201,9 +221,7 @@ end
function ActivateFile(filename)
local name, suffix, value = filename:match('(.+):([lLpP]?)(%d+)$')
if name and not wx.wxFileExists(filename) and not wx.wxIsAbsolutePath(filename) then
filename = name
end
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
@@ -267,8 +285,8 @@ function SaveFile(editor, filePath)
end
end
local st = (editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
.. editor:GetText()
local st = ((editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
.. editor:GetText())
if GetConfigIOFilter("output") then
st = GetConfigIOFilter("output")(filePath,st)
end
@@ -276,12 +294,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)
@@ -336,7 +356,6 @@ 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
@@ -426,6 +445,11 @@ end
function ClosePage(selection)
local editor = GetEditor(selection)
local id = editor:GetId()
if PackageEventHandle("onEditorPreClose", editor) == false then
return false
end
if SaveModifiedDialog(editor, true) ~= wx.wxID_CANCEL then
DynamicWordsRemoveAll(editor)
local debugger = ide.debugger
@@ -445,7 +469,9 @@ function ClosePage(selection)
-- disable full screen if the last tab is closed
if not (notebook:GetSelection() >= 0) then ShowFullScreen(false) end
return true
end
return false
end
function CloseAllPagesExcept(selection)
@@ -501,62 +527,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)
@@ -600,6 +577,7 @@ function CompileProgram(editor, params)
:format(compileOk/compileTotal*100, compileOk, compileTotal))
end
else
ActivateOutput()
DisplayOutputLn(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
DisplayOutputLn((err:gsub("\n$", "")))
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
@@ -736,21 +714,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 findUnusedEditor() or NewFile(doc.filename))
local opendoc = openDocuments[editor:GetId()]
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 +740,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()
@@ -816,8 +796,7 @@ local function saveAutoRecovery(force)
ide.settings:Flush()
end
ide.session.lastsaved = now
ide.frame.statusBar:SetStatusText(
TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")), 1)
ide:SetStatus(TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")))
end
local function fastWrap(func, ...)
@@ -874,8 +853,9 @@ function StoreRestoreProjectTabs(curdir, newdir)
fastWrap(SetOpenFiles, files, {index = #files + notebook:GetPageCount()})
end
if params and params.interpreter then
ProjectSetInterpreter(params.interpreter) -- set the interpreter
-- either interpreter is chosen for the project or the default value is set
if (params and params.interpreter) or (not params and ide.config.interpreter) then
ProjectSetInterpreter(params and params.interpreter or ide.config.interpreter)
end
if ide.osname ~= 'Macintosh' then notebook:Thaw() end
@@ -963,7 +943,9 @@ ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
local class = win:GetClassInfo():GetClassName()
-- don't set focus on the main frame or toolbar
if ide.infocus and (class == 'wxAuiToolBar' or class == 'wxFrame') then
pcall(function() ide.infocus:SetFocus() end)
-- check if the window is shown before returning focus to it,
-- as it may lead to a recursion in event handlers on OSX (wxwidgets 2.9.5).
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
return
end
@@ -1007,14 +989,12 @@ ide.editorApp:Connect(wx.wxEVT_ACTIVATE_APP,
-- 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() ide.infocus:SetFocus() end)
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
end
local active = event:GetActive()
-- save auto-recovery record when making the app inactive
if not active then saveAutoRecovery(true) end
-- also collect all the garbage
if not active then collectgarbage() end
-- disable UI refresh when app is inactive, but only when not running
wx.wxUpdateUIEvent.SetUpdateInterval(
@@ -1042,3 +1022,28 @@ function PaneFloatToggle(window)
end
uimgr:Update()
end
local cma, cman = 0, 1
frame:Connect(wx.wxEVT_IDLE,
function(event)
local debugger = ide.debugger
if (debugger.update) then debugger.update() end
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
if IndicateIfNeeded() then event:RequestMore(true) end
PackageEventHandleOnce("onIdleOnce", event)
PackageEventHandle("onIdle", event)
-- process onidle events if any
if #ide.onidle > 0 then table.remove(ide.onidle)() end
if #ide.onidle > 0 then event:RequestMore(true) end -- request more if anything left
if ide.config.showmemoryusage then
local mem = collectgarbage("count")
local alpha = math.max(tonumber(ide.config.showmemoryusage) or 0, 1/cman)
cman = cman + 1
cma = alpha * mem + (1-alpha) * cma
ide:SetStatus(("cur: %sKb; avg: %sKb"):format(math.floor(mem), math.floor(cma)))
end
event:Skip() -- let other EVT_IDLE handlers to work on the event
end)

View File

@@ -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
@@ -20,6 +20,7 @@ debugger.stackCtrl = nil -- the stack ctrl that shows stack information
debugger.toggleview = {
bottomnotebook = true, -- output/console is "on" by default
stackpanel = false, watchpanel = false, toolbar = false }
debugger.needrefresh = {} -- track components that may need a refresh
debugger.hostname = ide.config.debugger.hostname or (function()
local hostname = socket.dns.gethostname()
return hostname and socket.dns.toip(hostname) and hostname or "localhost"
@@ -65,8 +66,9 @@ local function updateWatchesSync(onlyitem)
local watchCtrl = debugger.watchCtrl
local pane = ide.frame.uimgr:GetPane("watchpanel")
local shown = watchCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and watchCtrl:IsShown())
if shown and debugger.server and not debugger.running
and not debugger.scratchpad and not (debugger.options or {}).noeval then
local canupdate = (debugger.server and not debugger.running and not debugger.scratchpad
and not (debugger.options or {}).noeval)
if shown and canupdate then
local bgcl = watchCtrl:GetBackgroundColour()
local hicl = wx.wxColour(math.floor(bgcl:Red()*.9),
math.floor(bgcl:Green()*.9), math.floor(bgcl:Blue()*.9))
@@ -114,6 +116,8 @@ local function updateWatchesSync(onlyitem)
if onlyitem then break end
item = watchCtrl:GetNextSibling(item)
end
elseif not shown and canupdate then
debugger.needrefresh.watches = true
end
end
@@ -124,8 +128,8 @@ local function updateStackSync()
local stackCtrl = debugger.stackCtrl
local pane = ide.frame.uimgr:GetPane("stackpanel")
local shown = stackCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and stackCtrl:IsShown())
if shown and debugger.server and not debugger.running
and not debugger.scratchpad then
local canupdate = debugger.server and not debugger.running and not debugger.scratchpad
if shown and canupdate then
local stack, _, err = debugger.stack()
if not stack or #stack == 0 then
stackCtrl:DeleteAll()
@@ -196,12 +200,14 @@ local function updateStackSync()
stackCtrl:EnsureVisible(stackCtrl:GetFirstChild(root))
stackCtrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
stackCtrl:Thaw()
elseif not shown and canupdate then
debugger.needrefresh.stack = true
end
end
local function updateStackAndWatches()
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateStackSync() updateWatchesSync() end)
@@ -210,14 +216,29 @@ end
local function updateWatches(item)
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateWatchesSync(item) end)
end
end
local function updateStack()
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateStackSync() end)
end
end
local function debuggerToggleViews(show)
-- don't toggle if the current state is the same as the new one
local shown = debugger.toggleview.shown
if (show and shown) or (not show and not shown) then return end
debugger.toggleview.shown = nil
local mgr = ide.frame.uimgr
local refresh = false
for view, needed in pairs(debugger.toggleview) do
@@ -239,6 +260,7 @@ local function debuggerToggleViews(show)
end
end
if refresh then mgr:Update() end
if show then debugger.toggleview.shown = true end
end
local function killClient()
@@ -304,6 +326,13 @@ 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)
@@ -393,7 +422,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
@@ -556,9 +585,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
@@ -622,10 +652,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)
@@ -634,7 +668,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()
@@ -672,9 +706,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,
@@ -682,7 +715,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
@@ -708,6 +745,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,11 +762,8 @@ end
debugger.handle = function(command, server, options)
local verbose = ide.config.debugger.verbose
local osexit, gprint
osexit, os.exit = os.exit, function () end
gprint, _G.print = _G.print, function (...)
if verbose then DisplayOutputLn(...) end
end
local gprint = _G.print
_G.print = function (...) if verbose then DisplayOutputLn(...) end end
nameOutputTab(TR("Output (running)"))
debugger.running = true
@@ -735,14 +774,15 @@ debugger.handle = function(command, server, options)
-- only set suspended if the debugging hasn't been terminated
if debugger.server then nameOutputTab(TR("Output (suspended)")) end
os.exit = osexit
_G.print = gprint
return file, line, err
end
debugger.exec = function(command)
debugger.exec = function(command, func)
if debugger.server and not debugger.running then
copas.addthread(function ()
-- execute a custom function (if any) in the context of this thread
if type(func) == 'function' then func() end
local out
local attempts = 0
while true do
@@ -778,7 +818,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
@@ -849,6 +889,7 @@ do
-- if there is any pending activation
if debugger.activate then
local file, line, content = unpack(debugger.activate)
debugger.activate = nil
if content then
local editor = NewFile()
editor:SetText(content)
@@ -865,11 +906,16 @@ do
activateDocument(file, line)
end
end
debugger.activate = nil
end
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
@@ -885,10 +931,53 @@ debugger.trace = function()
debugger.loop = true
debugger.exec("step")
end
debugger.runto = function(editor, line)
-- check if the location is valid for a breakpoint
if isemptyline(editor, line+1) then return end
local ed, ln = unpack(debugger.runtocursor or {})
local same = ed and ln and ed:GetId() == editor:GetId() and ln == line
-- check if there is already a breakpoint in the "run to" location;
-- if so, don't mark the location as "run to" as it will stop there anyway
if bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0
and not same then
debugger.runtocursor = nil
debugger.run()
return
end
-- save the location of the breakpoint
debugger.runtocursor = {editor, line}
-- set breakpoint and execute run
debugger.exec("run", function()
-- if run-to-cursor location is already set, then remove the breakpoint,
-- but only if this location is different
if ed and ln and not same then
DebuggerToggleBreakpoint(ed, ln)
debugger.wait()
end
if not same then
DebuggerToggleBreakpoint(editor, line)
debugger.wait()
end
end)
end
debugger.wait = function()
-- wait for all results to come back
while debugger.running do debugger.update() end
end
debugger.over = function() debugger.exec("over") end
debugger.out = function() debugger.exec("out") end
debugger.run = function() debugger.exec("run") end
debugger.detach = function() debugger.exec("done") end
debugger.detach = function()
if debugger.running then
debugger.handleDirect("done")
debugger.server = nil
else
debugger.exec("done")
end
end
debugger.evaluate = function(expression) return debugger.handle('eval ' .. expression) end
debugger.execute = function(expression) return debugger.handle('exec ' .. expression) end
debugger.stack = function() return debugger.handle('stack') end
@@ -997,6 +1086,13 @@ local function debuggerCreateStackWindow()
return true
end)
stackCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
if debugger.needrefresh.stack then
updateStack()
debugger.needrefresh.stack = false
end
end)
-- register navigation callback
stackCtrl:Connect(wx.wxEVT_LEFT_DCLICK, function (event)
local item_id = stackCtrl:HitTest(event:GetPosition())
@@ -1011,7 +1107,7 @@ 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)
@@ -1081,9 +1177,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)
@@ -1094,6 +1189,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
@@ -1101,9 +1215,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)
@@ -1139,6 +1253,14 @@ local function debuggerCreateWatchWindow()
names[value] = nil
end)
watchCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
if debugger.needrefresh.watches then
updateWatches()
debugger.needrefresh.watches = false
end
end)
local item
-- wx.wxEVT_CONTEXT_MENU is only triggered over tree items on OSX,
-- but it needs to be also triggered below any item to add a watch,
@@ -1148,11 +1270,14 @@ local function debuggerCreateWatchWindow()
-- store the item to be used in edit/delete actions
item = watchCtrl:HitTest(watchCtrl:ScreenToClient(wx.wxGetMousePosition()))
local editlabel = watchCtrl:IsWatch(item) and TR("&Edit Watch") or TR("&Edit Value")
watchCtrl:PopupMenu(wx.wxMenu {
local menu = wx.wxMenu {
{ ID_ADDWATCH, TR("&Add Watch")..KSC(ID_ADDWATCH) },
{ ID_EDITWATCH, editlabel..KSC(ID_EDITWATCH) },
{ ID_DELETEWATCH, TR("&Delete Watch")..KSC(ID_DELETEWATCH) },
})
{ ID_COPYWATCHVALUE, TR("&Copy Value")..KSC(ID_COPYWATCHVALUE) },
}
PackageEventHandle("onMenuWatch", menu, watchCtrl, event)
watchCtrl:PopupMenu(menu)
item = nil
end)
@@ -1169,6 +1294,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)
@@ -1253,6 +1386,10 @@ function DebuggerStop(resetpid)
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
@@ -1270,13 +1407,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

View File

@@ -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 editorID = 100 -- window id to create editor pages with, incremented for new editors
local openDocuments = ide.openDocuments
local statusBar = ide.frame.statusBar
local notebook = ide.frame.notebook
local edcfg = ide.config.editor
local styles = ide.config.styles
@@ -14,7 +13,7 @@ local unpack = table.unpack or unpack
local q = EscapeMagic
local margin = { LINENUMBER = 0, MARKER = 1, FOLD = 2 }
local linenummask = "99999"
local linenumlen = 4 + 0.5
local foldtypes = {
[0] = { wxstc.wxSTC_MARKNUM_FOLDEROPEN, wxstc.wxSTC_MARKNUM_FOLDER,
wxstc.wxSTC_MARKNUM_FOLDERSUB, wxstc.wxSTC_MARKNUM_FOLDERTAIL, wxstc.wxSTC_MARKNUM_FOLDEREND,
@@ -57,7 +56,7 @@ local function updateStatusText(editor)
if ide.frame then
for n in ipairs(texts) do
if (texts[n] ~= statusTextTable[n]) then
statusBar:SetStatusText(texts[n], n+1)
ide:SetStatus(texts[n], n)
statusTextTable[n] = texts[n]
end
end
@@ -168,7 +167,6 @@ end
function SetEditorSelection(selection)
local editor = GetEditor(selection)
updateStatusText(editor) -- update even if nil
statusBar:SetStatusText("",1)
ide.frame:SetTitle(ExpandPlaceholders(ide.config.format.apptitle))
if editor then
@@ -208,17 +206,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
@@ -247,15 +234,10 @@ function EditorAutoComplete(editor)
-- know now which string is to be completed
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
-- don't show if what's typed so far matches one of the options
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(" +"," ")
end
-- don't show the list if it only suggests what's already typed
if userList and #userList > 0 and not lt:find(userList.."$") then
local left = lt:match("[%w_]*$") -- extract one word on the left (without separators)
if userList and #userList > 0 and not userList:find("%f[%w_]"..left..(right or "").."%f[^%w_]") then
editor:UserListShow(1, userList)
elseif editor:AutoCompActive() then
editor:AutoCompCancel()
@@ -421,8 +403,13 @@ function EditorIsModified(editor)
end
-- Indicator handling for functions and local/global variables
-- 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}
local indicator = {
FNCALL = ide:GetIndicator("core.fncall"),
LOCAL = ide:GetIndicator("core.varlocal"),
GLOBAL = ide:GetIndicator("core.varglobal"),
MASKING = ide:GetIndicator("core.varmasking"),
MASKED = ide:GetIndicator("core.varmasked"),
}
function IndicateFunctionsOnly(editor, lines, linee)
local sindic = styles.indicator
@@ -517,7 +504,7 @@ function IndicateAll(editor, lines)
-- 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
@@ -582,7 +569,9 @@ function IndicateAll(editor, lines)
end
local cleared = {}
for indic = 0, indicator.MAX do cleared[indic] = pos end
for _, indic in ipairs {indicator.FNCALL, indicator.LOCAL, indicator.GLOBAL, indicator.MASKING} do
cleared[indic] = pos
end
local function IndicateOne(indic, pos, length)
editor:SetIndicatorCurrent(indic)
@@ -629,8 +618,10 @@ function IndicateAll(editor, lines)
if indic.varmasking then IndicateOne(indicator.MASKING, lineinfo, #name) end
end
if lineinfo and not nobreak and (op == 'Statement' or op == 'String') and TimeGet()-s > canwork then
delayed[editor] = {lineinfo, 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
@@ -641,11 +632,11 @@ function IndicateAll(editor, lines)
-- 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.
-- 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)
for _, indic in ipairs {indicator.FNCALL, indicator.LOCAL, indicator.GLOBAL, indicator.MASKING} do
-- don't clear "funccall" indicators as those can be set based on
-- IndicateFunctionsOnly processing, which is dealt with separately
if indic ~= indicator.FNCALL or not funconly then IndicateOne(indic, pos, 0) end
end
local needmore = delayed[editor] ~= nil
@@ -660,19 +651,19 @@ end
-- ----------------------------------------------------------------------------
-- Create an editor
function CreateEditor(bare)
local editor = wxstc.wxStyledTextCtrl(notebook, editorID,
wx.wxDefaultPosition, wx.wxSize(0, 0),
wx.wxBORDER_NONE)
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.updated = 0
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
@@ -701,7 +692,7 @@ function CreateEditor(bare)
editor:SetTabWidth(tonumber(edcfg.tabwidth) or 2)
editor:SetIndent(tonumber(edcfg.tabwidth) or 2)
editor:SetUseTabs(edcfg.usetabs and true or false)
editor:SetIndentationGuides(edcfg.indentguide and true or false)
editor:SetIndentationGuides(tonumber(edcfg.indentguide) or (edcfg.indentguide and true or false))
editor:SetViewWhiteSpace(edcfg.whitespace and true or false)
if (edcfg.usewrap) then
@@ -736,7 +727,7 @@ function CreateEditor(bare)
editor:SetMarginType(margin.LINENUMBER, wxstc.wxSTC_MARGIN_NUMBER)
editor:SetMarginMask(margin.LINENUMBER, 0)
editor:SetMarginWidth(margin.LINENUMBER,
editor:TextWidth(wxstc.wxSTC_STYLE_DEFAULT, linenummask))
math.floor(linenumlen * editor:TextWidth(wxstc.wxSTC_STYLE_DEFAULT, "8")))
editor:SetMarginWidth(margin.MARKER, 18)
editor:SetMarginType(margin.MARKER, wxstc.wxSTC_MARGIN_SYMBOL)
@@ -786,32 +777,14 @@ function CreateEditor(bare)
editor:AutoCompStops([[ \n\t=-+():.,;*/!"'$%&~'#°^@?´`<>][|}{]])
end
function editor:GotoPosEnforcePolicy(pos)
self:GotoPos(pos)
self:EnsureVisibleEnforcePolicy(self:LineFromPosition(pos))
end
local function getMarginWidth(editor)
local width = 0
for m = 0, 7 do width = width + editor:GetMarginWidth(m) end
return width
end
function editor:ShowPosEnforcePolicy(pos)
local line = self:LineFromPosition(pos)
self:EnsureVisibleEnforcePolicy(line)
if edcfg.usewrap then return end -- skip the rest if line wrapping is on
local xwidth = self:GetClientSize():GetWidth() - getMarginWidth(editor)
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: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,
-- so its LinesOnScreen method returns 0/-1, which skews the calculations.
@@ -850,13 +823,12 @@ function CreateEditor(bare)
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)
@@ -867,14 +839,25 @@ function CreateEditor(bare)
editor.assignscache = false
end
local evtype = event:GetModificationType()
if bit.band(evtype, wxstc.wxSTC_MOD_CHANGEMARKER) == 0 then
-- this event is being called on OSX too frequently, so skip these notifications
editor.updated = TimeGet()
end
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})
-- collate events if they are for the same line
local events = #editor.ev
if events == 0 or editor.ev[events][1] ~= firstLine then
editor.ev[events+1] = {firstLine, linesChanged}
elseif events > 0 and editor.ev[events][1] == firstLine then
editor.ev[events][2] = math.max(editor.ev[events][2], linesChanged)
end
DynamicWordsAdd(editor, nil, firstLine, linesChanged)
end
@@ -883,29 +866,37 @@ function CreateEditor(bare)
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
if editor:CallTipActive() then editor:CallTipCancel() end
if editor:AutoCompActive() then editor:AutoCompCancel() end
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)
@@ -943,7 +934,9 @@ function CreateEditor(bare)
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)
@@ -976,9 +969,9 @@ function CreateEditor(bare)
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)
@@ -1018,17 +1011,39 @@ function CreateEditor(bare)
editor:Connect(wx.wxEVT_KILL_FOCUS,
function (event)
if editor:AutoCompActive() then editor:AutoCompCancel() end
-- on OSX clicking on scrollbar in the popup is causing the editor to lose focus,
-- which causes canceling of auto-complete, which later cause crash because
-- the window is destroyed in wxwidgets after already being closed. Skip on OSX.
if ide.osname ~= 'Macintosh' and editor:AutoCompActive() then editor:AutoCompCancel() end
PackageEventHandle("onEditorFocusLost", editor)
event:Skip()
end)
local eol = {
[wxstc.wxSTC_EOL_CRLF] = "\r\n",
[wxstc.wxSTC_EOL_LF] = "\n",
[wxstc.wxSTC_EOL_CR] = "\r",
}
local function addOneLine(editor, adj)
local pos = editor:GetLineEndPosition(editor:LineFromPosition(editor:GetCurrentPos())+(adj or 0))
local added = eol[editor:GetEOLMode()] or "\n"
editor:InsertText(pos, added)
editor:SetCurrentPos(pos+#added)
local ev = wxstc.wxStyledTextEvent(wxstc.wxEVT_STC_CHARADDED)
ev:SetKey(string.byte("\n"))
editor:AddPendingEvent(ev)
end
editor:Connect(wxstc.wxEVT_STC_USERLISTSELECTION,
function (event)
if PackageEventHandle("onEditorUserlistSelection", editor, event) == false then
return
end
-- if used Shift-Enter, then skip auto complete and just do Enter
if wx.wxGetKeyState(wx.WXK_SHIFT) then return addOneLine(editor) end
if ide.wxver >= "2.9.5" and editor:GetSelections() > 1 then
local text = event:GetText()
-- capture all positions as the selection may change
@@ -1043,14 +1058,14 @@ function CreateEditor(bare)
editor:BeginUndoAction()
for s = #positions, 1, -1 do
local pos = positions[s]
local start_pos = editor:WordStartPosition(pos, true)
editor:SetSelection(start_pos, pos)
local startpos = editor:WordStartPosition(pos, true)
editor:SetSelection(startpos, pos)
editor:ReplaceSelection(text)
-- if this is the main position, save new cursor position to restore
if pos == mainpos then mainpos = editor:GetCurrentPos()
elseif pos < mainpos then
-- adjust main position as earlier changes may affect it
mainpos = mainpos + #text - (pos - start_pos)
mainpos = mainpos + #text - (pos - startpos)
end
end
editor:EndUndoAction()
@@ -1058,20 +1073,23 @@ function CreateEditor(bare)
editor:GotoPos(mainpos)
else
local pos = editor:GetCurrentPos()
local start_pos = editor:WordStartPosition(pos, true)
editor:SetSelection(start_pos, pos)
local startpos = editor:WordStartPosition(pos, true)
local endpos = editor:WordEndPosition(pos, true)
editor:SetSelection(startpos, ide.config.acandtip.droprest and endpos or pos)
editor:ReplaceSelection(event:GetText())
end
end)
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
@@ -1099,11 +1117,21 @@ function CreateEditor(bare)
editor:Refresh()
end
end
-- adjust line number margin, but only if it's already shown
local linecount = #tostring(editor:GetLineCount()) + 0.5
local mwidth = editor:GetMarginWidth(margin.LINENUMBER)
if mwidth > 0 then
local width = math.max(linecount, linenumlen) * editor:TextWidth(wxstc.wxSTC_STYLE_DEFAULT, "8")
if mwidth ~= width then editor:SetMarginWidth(margin.LINENUMBER, math.floor(width)) end
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
@@ -1119,20 +1147,20 @@ function CreateEditor(bare)
end
alreadyProcessed = alreadyProcessed + 1
PackageEventHandle("onEditorUpdateUI", editor, event)
if ide.osname ~= 'Windows' then updateStatusText(editor) end
editor:GotoPosDelayed()
updateBraceMatch(editor)
local minupdated
for _,iv in ipairs(editor.ev) do
local line = editor:LineFromPosition(iv[1])
local line = iv[1]
if not minupdated or line < minupdated then minupdated = line end
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
if minupdated then
local ok, res = pcall(IndicateAll, editor, minupdated)
if not ok then DisplayOutputLn("Internal error: ",res,minupdated) end
end
local firstvisible = editor:DocLineFromVisible(editor:GetFirstVisibleLine())
local lastline = math.min(editor:GetLineCount(),
firstvisible + editor:LinesOnScreen())
@@ -1145,11 +1173,7 @@ function CreateEditor(bare)
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,
@@ -1204,8 +1228,14 @@ function CreateEditor(bare)
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))
@@ -1228,18 +1258,7 @@ function CreateEditor(bare)
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
@@ -1283,6 +1302,9 @@ function CreateEditor(bare)
or (keycode == wx.WXK_INSERT and mod == wx.wxMOD_CONTROL) then
ide.frame:AddPendingEvent(wx.wxCommandEvent(
wx.wxEVT_COMMAND_MENU_SELECTED, keycode == wx.WXK_INSERT and ID_COPY or ID_CUT))
elseif (keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER)
and (mod == wx.wxMOD_CONTROL or mod == (wx.wxMOD_CONTROL + wx.wxMOD_SHIFT)) then
addOneLine(editor, mod == (wx.wxMOD_CONTROL + wx.wxMOD_SHIFT) and -1 or 0)
elseif ide.osname == "Unix" and ide.wxver >= "2.9.5"
and mod == wx.wxMOD_CONTROL and editor.ctrlcache[keycode] then
ide.frame:AddPendingEvent(wx.wxCommandEvent(
@@ -1334,8 +1356,6 @@ function CreateEditor(bare)
editor:Connect(wxstc.wxEVT_STC_ZOOM,
function(event)
editor:SetMarginWidth(margin.LINENUMBER,
editor:TextWidth(wxstc.wxSTC_STYLE_DEFAULT, linenummask))
-- if Shift+Zoom is used, then zoom all editors, not just the current one
if wx.wxGetKeyState(wx.WXK_SHIFT) then
local zoom = editor:GetZoom()
@@ -1377,6 +1397,7 @@ function CreateEditor(bare)
{ ID_QUICKADDWATCH, TR("Add Watch Expression") },
{ ID_QUICKEVAL, TR("Evaluate In Console") },
{ ID_ADDTOSCRATCHPAD, TR("Add To Scratchpad") },
{ ID_RUNTO, TR("Run To Cursor") },
}
menu:Enable(ID_GOTODEFINITION, instances and instances[0])
@@ -1403,6 +1424,13 @@ function CreateEditor(bare)
editor:SetMouseDwellTime(dwelltime) -- restore dwelling
end)
editor:Connect(ID_RUNTO, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
if pos ~= wxstc.wxSTC_INVALID_POSITION then
ide:GetDebugger().runto(editor, editor:LineFromPosition(pos))
end
end)
editor:Connect(ID_GOTODEFINITION, wx.wxEVT_COMMAND_MENU_SELECTED,
function(event)
if value and instances[0] then

View File

@@ -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)
---------------------------------------------------------
@@ -12,25 +12,34 @@ ide.filetree = {
projdirlist = {},
projdirpartmap = {},
projtreeCtrl = nil,
imglist = ide:CreateImageList("PROJECT", "FOLDER", "FILE-KNOWN", "FILE-NORMAL"),
settings = {extensionignore = {}},
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 }
local image = {
DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2, FILEOTHERSTART = 3,
DIRECTORYMAPPED = 4,
}
do
local settings = ide:AddPackage('core.filetree', {}):GetSettings()
for setting in pairs(filetree.settings) do
if settings[setting] then filetree.settings[setting] = settings[setting] end
end
end
MergeSettings(filetree.settings, ide:AddPackage('core.filetree', {}):GetSettings())
-- generic tree
-- ------------
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)
local items = {}
local item, cookie = tree:GetFirstChild(parent_id)
@@ -41,14 +50,27 @@ local function treeAddDir(tree,parent_id,rootdir)
local cache = {}
local curr
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(FileSysGetRecursive(rootdir)) do
for _, file in ipairs(files) do
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
local isdir = #dir>0
local ext = GetFileExt(name)
if isdir or not filetree.settings.extensionignore[ext] then
local known = GetSpec(ext)
local icon = isdir and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
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
@@ -145,8 +167,10 @@ 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)
@@ -204,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
@@ -213,11 +237,36 @@ local function treeSetConnectorsAndIcons(tree)
end
end
local function unMapDir(dir)
local project = FileTreeGetDir()
local mapped = filetree.settings.mapped[project] or {}
for k, m in ipairs(mapped) do
if m == dir then table.remove(mapped, k) end
end
filetree.settings.mapped[project] = mapped
refreshAncestors(tree:GetRootItem())
end
local function mapDir()
local project = FileTreeGetDir()
local dirPicker = wx.wxDirDialog(ide.frame, TR("Choose a directory to map"),
project ~= "" and project or wx.wxGetCwd(), wx.wxDIRP_DIR_MUST_EXIST)
if dirPicker:ShowModal(true) ~= wx.wxID_OK then return end
local dir = wx.wxFileName.DirName(FixDir(dirPicker:GetPath())):GetFullPath()
local mapped = filetree.settings.mapped[project] or {}
for _, m in ipairs(mapped) do
if m == dir then return end -- already on the list
end
table.insert(mapped, dir)
filetree.settings.mapped[project] = mapped
refreshAncestors(tree:GetRootItem())
end
local empty = ""
local function renameItem(itemsrc, target)
local isdir = tree:GetItemImage(itemsrc) == image.DIRECTORY
local isnew = tree:GetItemText(itemsrc) == empty
local source = tree:GetItemFullName(itemsrc)
local cache = type(itemsrc) == 'table' and itemsrc or nil
local isdir = not cache and tree:IsDirectory(itemsrc) or cache and cache.isdir or false
local isnew = not cache and tree:GetItemText(itemsrc) == empty or cache and cache.isnew or false
local source = cache and cache.fullname or tree:GetItemFullName(itemsrc)
local fn = wx.wxFileName(target)
-- check if the target is the same as the source;
@@ -239,9 +288,9 @@ local function treeSetConnectorsAndIcons(tree)
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
local overwrite = ((wx.wxFileExists(target) or wx.wxDirExists(target))
and not wx.wxFileName(source):SameAs(fn))
if overwrite and not ApproveFileOverwrite() then return false end
if not fn:Mkdir(tonumber(755,8), wx.wxPATH_MKDIR_FULL) then
ReportError(TR("Unable to create directory '%s'."):format(target))
@@ -263,7 +312,7 @@ local function treeSetConnectorsAndIcons(tree)
end
end
refreshAncestors(tree:GetItemParent(itemsrc))
refreshAncestors(cache and cache.parent or tree:GetItemParent(itemsrc))
-- load file(s) into the same editor (if any); will also refresh the tree
if #docs > 0 then
for _, doc in ipairs(docs) do
@@ -273,8 +322,12 @@ local function treeSetConnectorsAndIcons(tree)
-- /foo/baz/bar/file.lua, so change /foo/bar to /foo/baz/bar
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
local editor = LoadFile(path)
-- check if the file was loaded into another editor;
-- this is possible is "foo" is renamed to "bar" and both are opened;
-- if this happens, then "bar" is refreshed and "foo" can be closed.
if doc.editor:GetId() ~= editor:GetId() then ClosePage(doc.index) end
if not isdir and editor then PackageEventHandle("onEditorSave", editor) end
end
else -- refresh the tree and select the new item
local itemdst = tree:FindItem(target)
@@ -285,10 +338,23 @@ local function treeSetConnectorsAndIcons(tree)
tree:SetScrollPos(wx.wxHORIZONTAL, 0, true)
end
end
-- refresh the target if it's open and has been overwritten
if overwrite and not isdir then
local doc = ide:FindDocument(target)
if doc then LoadFile(doc:GetFilePath(), doc:GetEditor()) end
end
return true
end
local function deleteItem(item_id)
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
-- if delete is for mapped directory, unmap it instead
if tree:IsDirMapped(item_id) then
unMapDir(tree:GetItemText(item_id))
return
end
local isdir = tree:IsDirectory(item_id)
local source = tree:GetItemFullName(item_id)
if isdir and FileDirHasContent(source..pathsep) then return false end
@@ -305,7 +371,10 @@ local function treeSetConnectorsAndIcons(tree)
else
local doc = ide:FindDocument(source)
if doc then ClosePage(doc.index) end
wx.wxRemoveFile(source)
if not wx.wxRemoveFile(source) then
ReportError(TR("Unable to delete file '%s': %s")
:format(source, wx.wxSysErrorMsg()))
end
end
refreshAncestors(tree:GetItemParent(item_id))
return true
@@ -324,9 +393,12 @@ local function treeSetConnectorsAndIcons(tree)
tree:ActivateItem(event:GetItem())
end)
-- save configuration and refresh the tree
local function saveSettingsAndRefresh()
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()
@@ -335,7 +407,7 @@ local function treeSetConnectorsAndIcons(tree)
-- 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
@@ -348,6 +420,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))
@@ -361,13 +452,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())
@@ -389,18 +474,43 @@ 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
saveSettingsAndRefresh()
saveSettings()
refreshChildren()
end)
tree:Connect(ID_SHOWEXTENSIONALL, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
filetree.settings.extensionignore = {}
saveSettingsAndRefresh()
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,
@@ -413,15 +523,22 @@ local function treeSetConnectorsAndIcons(tree)
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") },
@@ -435,10 +552,13 @@ local function treeSetConnectorsAndIcons(tree)
table.insert(extlist, 1, {id, '.'..ext})
menu:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED, function()
filetree.settings.extensionignore[ext] = nil
saveSettingsAndRefresh()
saveSettings()
refreshChildren()
end)
end
menu:Insert(7, wx.wxMenuItem(menu, ID_SHOWEXTENSION,
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)))
@@ -449,11 +569,17 @@ 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(9, 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))
@@ -464,11 +590,26 @@ local function treeSetConnectorsAndIcons(tree)
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)
-- stopping/restarting garbage collection is generally not needed,
-- but on Linux not stopping is causing crashes (wxwidgets 2.9.5 and 3.1.0)
-- when symbol indexing is done while popup menu is open (with gc methods in the trace).
-- this only happens when EVT_IDLE is called when popup menu is open.
collectgarbage("stop")
-- stopping UI updates is generally not needed as well,
-- but it's causing a crash on OSX (wxwidgets 2.9.5 and 3.1.0)
-- when symbol indexing is done while popup menu is open, so it's disabled
local interval = wx.wxUpdateUIEvent.GetUpdateInterval()
wx.wxUpdateUIEvent.SetUpdateInterval(-1) -- don't update
tree:PopupMenu(menu)
wx.wxUpdateUIEvent.SetUpdateInterval(interval)
collectgarbage("restart")
end)
tree:Connect(wx.wxEVT_RIGHT_DOWN,
@@ -494,7 +635,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
@@ -511,7 +652,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)
@@ -525,19 +666,36 @@ local function treeSetConnectorsAndIcons(tree)
local label = event:GetLabel():gsub("^%s+$","") -- clean all spaces
-- edited the root element; set the new project directory if needed
local cancelled = event:IsEditCancelled()
if tree:IsRoot(itemsrc) then
if not event:IsEditCancelled() and wx.wxDirExists(label) then
if not cancelled and wx.wxDirExists(label) then
ProjectUpdateProjectDir(label)
end
return
end
if not parent or not parent:IsOk() then return end
local sourcedir = tree:GetItemFullName(parent)
local target = MergeFullPath(sourcedir, label)
if event:IsEditCancelled() or label == empty
or target and not renameItem(itemsrc, target)
then refreshAncestors(parent) end
local target = MergeFullPath(tree:GetItemFullName(parent), label)
if cancelled or label == empty then refreshAncestors(parent)
elseif target then
-- normally, none of this caching would be needed as `renameItem`
-- would be called to check if the item can be renamed;
-- however, as it may open a dialog box, on Linux it's causing a crash
-- (caused by the same END_LABEL_EDIT even triggered one more time),
-- so to protect from that, `renameItem` is called from IDLE event.
-- Unfortunately, by that time, the filetree item (`itemsrc`) may
-- already have incorrect state (as it's removed from the tree),
-- so its properties need to be cached to be used from IDLE event.
local cache = {
isdir = tree:IsDirectory(itemsrc),
isnew = tree:GetItemText(itemsrc) == empty,
fullname = tree:GetItemFullName(itemsrc),
parent = parent,
}
ide:DoWhenIdle(function()
if not renameItem(cache, target) then refreshAncestors(parent) end
end)
end
end)
local itemsrc
@@ -693,7 +851,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
@@ -701,7 +859,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

View File

@@ -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)
---------------------------------------------------------
@@ -44,16 +44,27 @@ local function createFrame()
end)
local menuBar = wx.wxMenuBar()
local statusBar = frame:CreateStatusBar(6)
local statusBar = frame:CreateStatusBar(5)
local section_width = statusBar:GetTextExtent("OVRW")
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT,
wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
statusBar:SetStatusWidths(
{-1, section_width*6, section_width, section_width, section_width*5, section_width*4})
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
statusBar:SetStatusWidths({-1, section_width, section_width, section_width*5, section_width*4})
statusBar:SetStatusText(GetIDEString("statuswelcome"))
statusBar:Connect(wx.wxEVT_LEFT_DOWN, function (event)
local rect = wx.wxRect()
statusBar:GetFieldRect(4, rect)
if rect:Contains(event:GetPosition()) then -- click on the interpreter
local menuitem = ide:FindMenuItem(ID.INTERPRETER)
if menuitem then
local menu = menuitem:GetSubMenu()
if menu then statusBar:PopupMenu(menu) end
end
end
end)
local mgr = wxaui.wxAuiManager()
mgr:SetManagedWindow(frame)
-- allow the panes to be larger than the defalt 1/3 of the main window size
mgr:SetDockSizeConstraint(0.8,0.8)
frame.menuBar = menuBar
frame.statusBar = statusBar
@@ -74,8 +85,9 @@ local function menuDropDownPosition(event)
end
local function tbIconSize()
-- use large icons by default on OSX and on large screens
local iconsize = (tonumber(ide.config.toolbar and ide.config.toolbar.iconsize)
or (ide.osname == 'Macintosh' and 24 or 16))
or ((ide.osname == 'Macintosh' or wx.wxGetClientDisplayRect():GetWidth() >= 1500) and 24 or 16))
if iconsize ~= 24 then iconsize = 16 end
return iconsize
end
@@ -100,7 +112,7 @@ local function createToolBar(frame)
local icon, description = unpack(iconmap)
local isbitmap = type(icon) == "userdata" and icon:GetClassInfo():GetClassName() == "wxBitmap"
local bitmap = isbitmap and icon or ide:GetBitmap(icon, "TOOLBAR", toolBmpSize)
toolBar:AddTool(id, "", bitmap, TR(description)..SCinB(id))
toolBar:AddTool(id, "", bitmap, (TR)(description)..SCinB(id))
end
end
prev = id
@@ -201,6 +213,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()
@@ -273,11 +287,7 @@ 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
@@ -297,6 +307,7 @@ local function addDND(notebook)
if winid == ide:GetOutput():GetId()
or winid == ide:GetConsole():GetId()
or winid == ide:GetProjectTree():GetId()
or ide.findReplace:IsPreview(win) -- search results preview
then return end
local mgr = ide.frame.uimgr
@@ -390,17 +401,37 @@ local function createBottomNotebook(frame)
addDND(bottomnotebook)
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED,
function (event)
if not ide.findReplace then return end
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
local preview = ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection()))
local flags = nb:GetWindowStyleFlag()
if preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) == 0 then
nb:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
elseif not preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) ~= 0 then
nb:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
end
end)
-- disallow tabs closing
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
function (event) event:Veto() end)
function (event)
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
if ide.findReplace
and ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection())) then
event:Skip()
else
event:Veto()
end
end)
local errorlog = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
local errorlog = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
errorlog:Connect(wx.wxEVT_CONTEXT_MENU,
function (event)
errorlog:PopupMenu(
wx.wxMenu {
local menu = wx.wxMenu {
{ ID_UNDO, TR("&Undo") },
{ ID_REDO, TR("&Redo") },
{ },
@@ -411,13 +442,14 @@ local function createBottomNotebook(frame)
{ },
{ ID_CLEAROUTPUT, TR("C&lear Output Window") },
}
)
PackageEventHandle("onMenuOutput", menu, errorlog, event)
errorlog:PopupMenu(menu)
end)
errorlog:Connect(ID_CLEAROUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED,
function(event) ClearOutput(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)

View File

@@ -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,12 +25,6 @@ ID_NEWFILE = NewID()
ID_NEWDIRECTORY = NewID()
ID_RENAMEFILE = NewID()
ID_DELETEFILE = NewID()
ID_HIDEEXTENSION = NewID()
ID_SHOWEXTENSION = NewID()
ID_SHOWEXTENSIONALL = NewID()
ID_OPENEXTENSION = NewID()
ID_COPYFULLPATH = NewID()
ID_SHOWLOCATION = NewID()
ID_SAVE = linux and NewID() or wx.wxID_SAVE
ID_SAVEAS = linux and NewID() or wx.wxID_SAVEAS
ID_SAVEALL = NewID()
@@ -109,6 +103,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()
@@ -129,6 +124,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()
@@ -136,6 +132,41 @@ ID_REPLACEALLSELECTIONS = NewID()
ID_QUICKADDWATCH = NewID()
ID_QUICKEVAL = NewID()
ID_ADDTOSCRATCHPAD = NewID()
-- filetree menu
ID_HIDEEXTENSION = NewID()
ID_SETSTARTFILE = NewID()
ID_UNSETSTARTFILE = NewID()
ID_SHOWEXTENSION = NewID()
ID_SHOWEXTENSIONALL = NewID()
ID_MAPDIRECTORY = NewID()
ID_UNMAPDIRECTORY = NewID()
ID_OPENEXTENSION = NewID()
ID_COPYFULLPATH = NewID()
ID_SHOWLOCATION = NewID()
ID_REFRESH = NewID()
ID_SYMBOLDIRREFRESH = NewID()
ID_SYMBOLDIRINDEX = NewID()
ID_SYMBOLDIRDISABLE = NewID()
ID_SYMBOLDIRENABLE = NewID()
-- outline menu
ID_OUTLINESORT = NewID()
-- 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 IDgen (name)

View File

@@ -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,11 +15,6 @@ local function init()
LA = require "luainspect.ast"
LI = require "luainspect.init"
T = require "luainspect.types"
if FAST then
LI.eval_comments = function () end
LI.infer_values = function () end
end
end
function M.pos2line(pos)
@@ -33,16 +27,25 @@ function M.warnings_from_string(src, file)
local ast, err, linenum, colnum = LA.ast_from_string(src, file)
if not ast and err then return nil, err, linenum, colnum end
if FAST then
LI.inspect(ast, nil, src)
LA.ensure_parents_marked(ast)
else
LI.uninspect(ast)
if ide.config.staticanalyzer.infervalue then
local tokenlist = LA.ast_to_tokenlist(ast, src)
LI.clear_cache()
LI.inspect(ast, tokenlist, src)
LI.mark_related_keywords(ast, tokenlist, src)
else
-- stub out LI functions that depend on tokenlist,
-- which is not built in the "fast" mode
local ec, iv = LI.eval_comments, LI.infer_values
LI.eval_comments, LI.infer_values = function() end, function() end
LI.inspect(ast, nil, src)
LA.ensure_parents_marked(ast)
LI.eval_comments, LI.infer_values = ec, iv
end
local globinit = {}
local globinit = {arg = true} -- skip `arg` global variable
local spec = GetSpec(wx.wxFileName(file):GetExt())
for k in pairs(spec and GetApi(spec.apitype or "none").ac.childs or {}) do
globinit[k] = true
@@ -57,12 +60,15 @@ local function cleanError(err)
end
function AnalyzeFile(file)
local warn, err, line, pos = M.warnings_from_string(FileRead(file), file)
local src, err = FileRead(file)
if not src and err then return nil, TR("Can't open file '%s': %s"):format(file, err) end
local warn, err, line, pos = M.warnings_from_string(src, file)
return warn, cleanError(err), line, pos
end
function AnalyzeString(src)
local warn, err, line, pos = M.warnings_from_string(src, "<string>")
function AnalyzeString(src, file)
local warn, err, line, pos = M.warnings_from_string(src, file or "<string>")
return warn, cleanError(err), line, pos
end
@@ -73,7 +79,10 @@ function M.show_warnings(top_ast, globinit)
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
@@ -126,7 +135,7 @@ function M.show_warnings(top_ast, globinit)
line, path)
end
else
if parent.tag == 'Localrec' then -- local function foo...
if parent and parent.tag == 'Localrec' then -- local function foo...
warn("unused local function '" .. name .. "'", line, path)
else
warn("unused local variable '" .. name .. "'; "..
@@ -134,16 +143,24 @@ function M.show_warnings(top_ast, globinit)
end
end
end
-- added check for FAST as ast.seevalue relies on value evaluation,
-- added check for "fast" mode as ast.seevalue relies on value evaluation,
-- which is very slow even on simple and short scripts
if not FAST and ast.isfield and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
if ide.config.staticanalyzer.infervalue and ast.isfield
and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
if not fieldseen[name] then
fieldseen[name] = true
local parent = ast.parent
and (" in '"..index(ast.parent):gsub("%."..name.."$","").."'")
local var = index(ast.parent)
local parent = ast.parent and var
and (" in '"..var:gsub("%."..name.."$","").."'")
or ""
warn("first use of unknown field '" .. name .."'"..parent,
ast.lineinfo and 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
@@ -191,10 +208,10 @@ if compilepos then
menu:Insert(compilepos+1, ID_ANALYZE, TR("Analyze")..KSC(ID_ANALYZE), TR("Analyze the source code"))
end
local debugger = ide.debugger
local function analyzeProgram(editor)
ClearOutput()
-- save all files (if requested) for "infervalue" analysis to keep the changes on disk
if ide.config.editor.saveallonrun and ide.config.staticanalyzer.infervalue then SaveAll(true) end
if ide:GetLaunchedProcess() == nil and not ide:GetDebugger():IsConnected() then ClearOutput() end
DisplayOutput("Analyzing the source code")
frame:Update()
@@ -203,13 +220,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
@@ -223,7 +240,4 @@ frame:Connect(ID_ANALYZE, wx.wxEVT_COMMAND_MENU_SELECTED,
end
end)
frame:Connect(ID_ANALYZE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
end)
function (event) event:Enable(GetEditor() ~= nil) end)

View File

@@ -25,87 +25,89 @@ listed below (again, case doesn't matter):
ide.config.keymap = {
-- File menu
[ID_NEW] = "Ctrl-N",
[ID_OPEN] = "Ctrl-O",
[ID_CLOSE] = "Ctrl-W",
[ID_SAVE] = "Ctrl-S",
[ID_SAVEAS] = "Alt-Shift-S",
[ID_SAVEALL] = "",
[ID_RECENTFILES] = "",
[ID_RECENTFILESPREV] = "Ctrl-,",
[ID_RECENTFILESNEXT] = "Ctrl-.",
[ID_EXIT] = "Ctrl-Q",
[ID_RECENTPROJECTSPREV] = "Ctrl-Shift-<",
[ID.NEW] = "Ctrl-N",
[ID.OPEN] = "Ctrl-O",
[ID.CLOSE] = "Ctrl-W",
[ID.SAVE] = "Ctrl-S",
[ID.SAVEAS] = "Alt-Shift-S",
[ID.SAVEALL] = "",
[ID.RECENTFILES] = "",
[ID.RECENTFILESPREV] = "Ctrl-,",
[ID.RECENTFILESNEXT] = "Ctrl-.",
[ID.EXIT] = "Ctrl-Q",
[ID.RECENTPROJECTSPREV] = "Ctrl-Shift-<",
-- Edit menu
[ID_CUT] = "Ctrl-X",
[ID_COPY] = "Ctrl-C",
[ID_PASTE] = "Ctrl-V",
[ID_SELECTALL] = "Ctrl-A",
[ID_UNDO] = "Ctrl-Z",
[ID_REDO] = "Ctrl-Y",
[ID_SHOWTOOLTIP] = "Ctrl-T",
[ID_AUTOCOMPLETE] = "Ctrl-K",
[ID_AUTOCOMPLETEENABLE] = "",
[ID_COMMENT] = "Ctrl-U",
[ID_FOLD] = "F12",
[ID_CLEARDYNAMICWORDS] = "",
[ID_REINDENT] = "Ctrl-I",
[ID_BOOKMARKTOGGLE] = "Ctrl-F2",
[ID_BOOKMARKNEXT] = "F2",
[ID_BOOKMARKPREV] = "Shift-F2",
[ID_NAVIGATETOFILE] = "Ctrl-P",
[ID_NAVIGATETOLINE] = "Ctrl-G",
[ID_NAVIGATETOSYMBOL] = "Ctrl-B",
[ID_NAVIGATETOMETHOD] = "Ctrl-;",
[ID.CUT] = "Ctrl-X",
[ID.COPY] = "Ctrl-C",
[ID.PASTE] = "Ctrl-V",
[ID.SELECTALL] = "Ctrl-A",
[ID.UNDO] = "Ctrl-Z",
[ID.REDO] = "Ctrl-Y",
[ID.SHOWTOOLTIP] = "Ctrl-T",
[ID.AUTOCOMPLETE] = "Ctrl-K",
[ID.AUTOCOMPLETEENABLE] = "",
[ID.COMMENT] = "Ctrl-U",
[ID.FOLD] = "F12",
[ID.CLEARDYNAMICWORDS] = "",
[ID.REINDENT] = "Ctrl-I",
[ID.BOOKMARKTOGGLE] = "Ctrl-F2",
[ID.BOOKMARKNEXT] = "F2",
[ID.BOOKMARKPREV] = "Shift-F2",
[ID.NAVIGATETOFILE] = "Ctrl-P",
[ID.NAVIGATETOLINE] = "Ctrl-G",
[ID.NAVIGATETOSYMBOL] = "Ctrl-B",
[ID.NAVIGATETOMETHOD] = "Ctrl-;",
-- Search menu
[ID_FIND] = "Ctrl-F",
[ID_FINDNEXT] = "F3",
[ID_FINDPREV] = "Shift-F3",
[ID_FINDSELECTNEXT] = "Ctrl-F3",
[ID_FINDSELECTPREV] = "Ctrl-Shift-F3",
[ID_REPLACE] = "Ctrl-R",
[ID_FINDINFILES] = "Ctrl-Shift-F",
[ID_REPLACEINFILES] = "Ctrl-Shift-R",
[ID_SORT] = "",
[ID.FIND] = "Ctrl-F",
[ID.FINDNEXT] = "F3",
[ID.FINDPREV] = "Shift-F3",
[ID.FINDSELECTNEXT] = "Ctrl-F3",
[ID.FINDSELECTPREV] = "Ctrl-Shift-F3",
[ID.REPLACE] = "Ctrl-R",
[ID.FINDINFILES] = "Ctrl-Shift-F",
[ID.REPLACEINFILES] = "Ctrl-Shift-R",
[ID.SORT] = "",
-- View menu
[ID_VIEWFILETREE] = "Ctrl-Shift-P",
[ID_VIEWOUTPUT] = "Ctrl-Shift-O",
[ID_VIEWWATCHWINDOW] = "Ctrl-Shift-W",
[ID_VIEWCALLSTACK] = "Ctrl-Shift-S",
[ID_VIEWDEFAULTLAYOUT] = "",
[ID_VIEWFULLSCREEN] = "Ctrl-Shift-A",
[ID_ZOOMRESET] = "Ctrl-0",
[ID_ZOOMIN] = "Ctrl-+",
[ID_ZOOMOUT] = "Ctrl--",
[ID.VIEWFILETREE] = "Ctrl-Shift-P",
[ID.VIEWOUTPUT] = "Ctrl-Shift-O",
[ID.VIEWWATCHWINDOW] = "Ctrl-Shift-W",
[ID.VIEWCALLSTACK] = "Ctrl-Shift-S",
[ID.VIEWDEFAULTLAYOUT] = "",
[ID.VIEWFULLSCREEN] = "Ctrl-Shift-A",
[ID.ZOOMRESET] = "Ctrl-0",
[ID.ZOOMIN] = "Ctrl-+",
[ID.ZOOMOUT] = "Ctrl--",
-- Project menu
[ID_RUN] = "F6",
[ID_RUNNOW] = "Ctrl-F6",
[ID_COMPILE] = "F7",
[ID_ANALYZE] = "Shift-F7",
[ID_STARTDEBUG] = "F5",
[ID_ATTACHDEBUG] = "",
[ID_STOPDEBUG] = "Shift-F5",
[ID_STEP] = "F10",
[ID_STEPOVER] = "Shift-F10",
[ID_STEPOUT] = "Ctrl-F10",
[ID_TRACE] = "",
[ID_BREAK] = "Shift-F9",
[ID_TOGGLEBREAKPOINT] = "F9",
[ID_CLEAROUTPUT] = "",
[ID_INTERPRETER] = "",
[ID_PROJECTDIR] = "",
[ID.RUN] = "F6",
[ID.RUNNOW] = "Ctrl-F6",
[ID.COMPILE] = "F7",
[ID.ANALYZE] = "Shift-F7",
[ID.STARTDEBUG] = "F5",
[ID.ATTACHDEBUG] = "",
[ID.DETACHDEBUG] = "",
[ID.STOPDEBUG] = "Shift-F5",
[ID.STEP] = "F10",
[ID.STEPOVER] = "Shift-F10",
[ID.STEPOUT] = "Ctrl-F10",
[ID.RUNTO] = "Ctrl-Shift-F10",
[ID.TRACE] = "",
[ID.BREAK] = "Shift-F9",
[ID.TOGGLEBREAKPOINT] = "F9",
[ID.CLEAROUTPUT] = "",
[ID.INTERPRETER] = "",
[ID.PROJECTDIR] = "",
-- Help menu
[ID_ABOUT] = "F1",
[ID.ABOUT] = "F1",
-- Watch window menu items
[ID_ADDWATCH] = "Ins",
[ID_EDITWATCH] = "F2",
[ID_DELETEWATCH] = "Del",
[ID.ADDWATCH] = "Ins",
[ID.EDITWATCH] = "F2",
[ID.DELETEWATCH] = "Del",
-- Editor popup menu items
[ID_QUICKADDWATCH] = "",
[ID_QUICKEVAL] = "",
[ID.QUICKADDWATCH] = "",
[ID.QUICKEVAL] = "",
-- Filetree popup menu items
[ID_RENAMEFILE] = "F2",
[ID_DELETEFILE] = "Del",
[ID.RENAMEFILE] = "F2",
[ID.DELETEFILE] = "Del",
}
function KSC(id, default)

View File

@@ -1,4 +1,4 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- styles for comment markup
---------------------------------------------------------
@@ -14,13 +14,13 @@ local MD_MARK_BOXD = '|' -- highlight
local MD_MARK_MARK = ' ' -- separator
local MD_LINK_NEWWINDOW = '+' -- indicator to open a new window for links
local markup = {
[MD_MARK_BOXD] = {st=25, fg={127,0,127}, b=true},
[MD_MARK_CODE] = {st=26, fg={127,127,127}, fs=10},
[MD_MARK_HEAD] = {st=27, fn="Lucida Console", b=true},
[MD_MARK_LINK] = {st=28, u=true, hs={32,32,127}},
[MD_MARK_BOLD] = {st=29, b=true},
[MD_MARK_ITAL] = {st=30, i=true},
[MD_MARK_MARK] = {st=31, v=false},
[MD_MARK_BOXD] = {st=ide:AddIndicator("markup.boxd", 25), fg={127,0,127}, b=true},
[MD_MARK_CODE] = {st=ide:AddIndicator("markup.code", 26), fg={127,127,127}, fs=10},
[MD_MARK_HEAD] = {st=ide:AddIndicator("markup.head", 27), fn="Lucida Console", b=true},
[MD_MARK_LINK] = {st=ide:AddIndicator("markup.link", 28), u=true, hs={32,32,127}},
[MD_MARK_BOLD] = {st=ide:AddIndicator("markup.bold", 29), b=true},
[MD_MARK_ITAL] = {st=ide:AddIndicator("markup.ital", 30), i=true},
[MD_MARK_MARK] = {st=ide:AddIndicator("markup.mark", 31), v=false},
}
-- allow other editor features to recognize this special markup
@@ -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

View File

@@ -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)
---------------------------------------------------------
@@ -46,22 +46,41 @@ menuBar:Append(editMenu, TR("&Edit"))
editMenu:Check(ID_AUTOCOMPLETEENABLE, ide.config.autocomplete)
local function getCtrlWithFocus(edType)
local ctrl = ide:GetMainFrame():FindFocus()
return ctrl and ctrl:GetClassInfo():GetClassName() == edType and ctrl:DynamicCast(edType) or nil
end
local function onUpdateUIEditorInFocus(event)
event:Enable(GetEditorWithFocus(GetEditor()) ~= nil)
end
local function onUpdateUIEditMenu(event)
local menu_id = event:GetId()
local editor = GetEditorWithFocus()
if editor == nil then event:Enable(false); return end
if editor == nil then
local editor = getCtrlWithFocus("wxTextCtrl")
event:Enable(editor and (
menu_id == ID_PASTE and editor:CanPaste() or
menu_id == ID_UNDO and editor:CanUndo() or
menu_id == ID_REDO and editor:CanRedo() or
menu_id == ID_CUT and editor:CanCut() or
menu_id == ID_COPY and editor:CanCopy() or
menu_id == ID_SELECTALL and true
) or false)
return
end
local alwaysOn = {
[ID_SELECTALL] = true,
-- allow Cut and Copy commands as these work on a line if no selection
[ID_COPY] = true, [ID_CUT] = true,
}
local menu_id = event:GetId()
local enable =
menu_id == ID_PASTE and editor:CanPaste() or
-- pasting is allowed when the document is not read-only and the selection
-- (if any) has no protected text; since pasting handles protected text,
-- use GetReadOnly() instead of CanPaste()
menu_id == ID_PASTE and (not editor:GetReadOnly()) or
menu_id == ID_UNDO and editor:CanUndo() or
menu_id == ID_REDO and editor:CanRedo() or
alwaysOn[menu_id]
@@ -69,14 +88,26 @@ local function onUpdateUIEditMenu(event)
end
local function onEditMenu(event)
local menu_id = event:GetId()
local editor = GetEditorWithFocus()
if editor == nil then event:Skip(); return end
if editor == nil then
local editor = getCtrlWithFocus("wxTextCtrl")
if not editor or not (
menu_id == ID_PASTE and editor:Paste() or
menu_id == ID_UNDO and editor:Undo() or
menu_id == ID_REDO and editor:Redo() or
menu_id == ID_CUT and editor:Cut() or
menu_id == ID_COPY and editor:Copy() or
menu_id == ID_SELECTALL and editor:SetSelection(-1, -1) or
true
) then event:Skip() end
return
end
if PackageEventHandle("onEditorAction", editor, event) == false then
return
end
local menu_id = event:GetId()
local copytext
if (menu_id == ID_CUT or menu_id == ID_COPY)
and ide.wxver >= "2.9.5" and editor:GetSelections() > 1 then
@@ -90,13 +121,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()
@@ -117,12 +157,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())
@@ -133,7 +167,7 @@ frame:Connect(ID_COMMENT, wx.wxEVT_UPDATE_UI,
local function generateConfigMessage(type)
return ([==[--[[--
Use this file to specify %s preferences.
Use this file to specify **%s** preferences.
Review [examples](+%s) or check [online documentation](%s) for details.
--]]--
]==])
@@ -144,14 +178,14 @@ end
frame:Connect(ID_PREFERENCESSYSTEM, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = LoadFile(ide.configs.system)
if editor and #editor:GetText() == 0 then
if editor and editor:GetLength() == 0 then
editor:AddText(generateConfigMessage("System")) end
end)
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = LoadFile(ide.configs.user)
if editor and #editor:GetText() == 0 then
if editor and editor:GetLength() == 0 then
editor:AddText(generateConfigMessage("User")) end
end)
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_UPDATE_UI,
@@ -212,14 +246,13 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
-- go last to first as selection positions we captured may be affected
-- by text changes
for line = eline, sline, -1 do
local pos = sel and (sline == eline or rect)
and ssel-editor:PositionFromLine(sline)+1 or 1
local pos = sel and (sline == eline or rect) and ssel-editor:PositionFromLine(sline)+1 or 1
local text = editor:GetLine(line)
local validline = (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0)
local _, cpos = text:find("^%s*"..qlc, pos)
if not comment and cpos then
if not comment and cpos and validline then
editor:DeleteRange(cpos-#lc+editor:PositionFromLine(line), #lc)
elseif comment and text:find("%S")
and (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0) then
elseif comment and text:find("%S") and validline then
editor:SetTargetStart(pos+editor:PositionFromLine(line)-1)
editor:SetTargetEnd(editor:GetTargetStart())
editor:ReplaceTarget(lc)
@@ -267,11 +300,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
@@ -283,9 +316,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)
@@ -320,8 +356,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

View File

@@ -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)
---------------------------------------------------------
@@ -185,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,
@@ -220,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,

View File

@@ -1,4 +1,4 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
---------------------------------------------------------
local ide = ide
@@ -32,7 +32,7 @@ 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 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 ""
@@ -46,7 +46,7 @@ local function DisplayAbout(event)
<tr>
<td>
<b>ZeroBrane Studio (%s; MobDebug %s)</b><br>
<b>Copyright &copy; 2011-2014 ZeroBrane LLC</b><br>
<b>Copyright &copy; 2011-2015 ZeroBrane LLC</b><br>
Paul Kulchenko<br>
Licensed under the MIT License.
</td>
@@ -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)

View File

@@ -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,22 +61,28 @@ local function selectInterpreter(id)
local changed = ide.interpreter ~= interpreters[id]
if ide.interpreter and changed then
PackageEventHandle("onInterpreterClose", ide.interpreter) end
PackageEventHandle("onInterpreterClose", ide.interpreter)
end
if interpreters[id] and changed then
PackageEventHandle("onInterpreterLoad", interpreters[id]) end
PackageEventHandle("onInterpreterLoad", interpreters[id])
end
ide.interpreter = interpreters[id]
DebuggerShutdown()
ide.frame.statusBar:SetStatusText(ide.interpreter.name or "", 5)
ide:SetStatus(ide.interpreter.name or "", 4)
if changed then ReloadLuaAPI() end
end
function ProjectSetInterpreter(name)
local id = IDget("debug.interpreter."..name)
if (not interpreters[id]) then return end
selectInterpreter(id)
if id and interpreters[id] then
selectInterpreter(id)
else
DisplayOutputLn(("Can't find interpreter '%s'; using the default interpreter instead.")
:format(name))
end
end
local function evSelectInterpreter(event)
@@ -96,7 +103,7 @@ function ProjectUpdateInterpreters()
table.sort(names)
interpreters = {}
for i, file in ipairs(names) do
for _, file in ipairs(names) do
local inter = ide.interpreters[file]
local id = ID("debug.interpreter."..file)
inter.fname = file
@@ -109,8 +116,8 @@ function ProjectUpdateInterpreters()
local id = (
-- interpreter is set and is (still) on the list of known interpreters
IDget("debug.interpreter."
..(ide.interpreter and ide.interpreters[ide.interpreter.fname]
and ide.interpreter.fname or ide.config.interpreter)) or
..(ide.interpreter and ide.interpreters[ide.interpreter.fname] and ide.interpreter.fname
or ide.config.interpreter or ide.config.default.interpreter)) or
-- otherwise use default interpreter
ID("debug.interpreter."..ide.config.default.interpreter)
)
@@ -121,17 +128,19 @@ end
-- Project directory handling
function ProjectUpdateProjectDir(projdir,skiptree)
-- strip trailing spaces as this may create issues with "path/ " on Windows
projdir = projdir:gsub("%s+$","")
local dir = wx.wxFileName.DirName(FixDir(projdir))
dir:Normalize() -- turn into absolute path if needed
if not wx.wxDirExists(dir:GetFullPath()) then return end
projdir = dir:GetPath(wx.wxPATH_GET_VOLUME) -- no trailing slash
ide.config.path.projectdir = projdir ~= "" and projdir or nil
frame:SetStatusText(projdir)
ide:SetStatus(projdir)
frame:SetTitle(ExpandPlaceholders(ide.config.format.apptitle))
if (not skiptree) then
ide.filetree:updateProjectDir(projdir)
end
if (not skiptree) then ide.filetree:updateProjectDir(projdir) end
return true
end
local function projChoose(event)
@@ -144,13 +153,12 @@ local function projChoose(event)
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()
@@ -176,6 +184,7 @@ frame:Connect(ID_PROJECTDIRFROMFILE, wx.wxEVT_UPDATE_UI,
local function getNameToRun(skipcheck)
local editor = GetEditor()
if not editor then return end
-- test compile it before we run it, if successful then ask to save
-- only compile if lua api
@@ -187,19 +196,20 @@ local function getNameToRun(skipcheck)
return
end
local id = editor:GetId()
if not openDocuments[id].filePath then SetDocumentModified(id, true) end
local doc = ide:GetDocument(editor)
local name = ide:GetProjectStartFile() or doc:GetFilePath()
if not name then doc:SetModified(true) end
if not SaveIfModified(editor) then return end
if ide.config.editor.saveallonrun then SaveAll(true) end
return wx.wxFileName(openDocuments[id].filePath)
return wx.wxFileName(name or doc:GetFilePath())
end
function ActivateOutput()
if not ide.config.activateoutput then return end
-- show output/errorlog pane
if not uimgr:GetPane("bottomnotebook"):IsShown() then
uimgr:GetPane("bottomnotebook"):Show(true)
if not uimgr:GetPane(bottomnotebook):IsShown() then
uimgr:GetPane(bottomnotebook):Show(true)
uimgr:Update()
end
-- activate output/errorlog window
@@ -267,15 +277,13 @@ frame:Connect(ID_TOGGLEBREAKPOINT, wx.wxEVT_UPDATE_UI,
frame:Connect(ID_COMPILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
ActivateOutput()
CompileProgram(editor)
CompileProgram(GetEditor(), {
keepoutput = ide:GetLaunchedProcess() ~= nil or ide:GetDebugger():IsConnected()
})
end)
frame:Connect(ID_COMPILE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
end)
function (event) event:Enable(GetEditor() ~= nil) end)
frame:Connect(ID_RUN, wx.wxEVT_COMMAND_MENU_SELECTED, function () ProjectRun() end)
frame:Connect(ID_RUN, wx.wxEVT_UPDATE_UI,
@@ -320,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)
@@ -356,8 +363,19 @@ frame:Connect(ID_DETACHDEBUG, wx.wxEVT_COMMAND_MENU_SELECTED,
function () debugger.detach() end)
frame:Connect(ID_DETACHDEBUG, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable((debugger.server ~= nil) and (not debugger.scratchpad))
end)
frame:Connect(ID_RUNTO, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
debugger.runto(editor, editor:GetCurrentLine())
end)
frame:Connect(ID_RUNTO, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server ~= nil) and (not debugger.running)
and (not debugger.scratchpad))
and (editor ~= nil) and (not debugger.scratchpad))
end)
frame:Connect(ID_STEP, wx.wxEVT_COMMAND_MENU_SELECTED,
@@ -423,13 +441,3 @@ frame:Connect(ID_COMMANDLINEPARAMETERS, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable(ide.interpreter and ide.interpreter.takeparameters and true or false)
end)
frame:Connect(wx.wxEVT_IDLE,
function(event)
if (debugger.update) then debugger.update() end
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
if IndicateIfNeeded() then event:RequestMore(true) end
PackageEventHandleOnce("onIdleOnce", event)
PackageEventHandle("onIdle", event)
event:Skip() -- let other EVT_IDLE handlers to work on the event
end)

View File

@@ -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)
---------------------------------------------------------
@@ -15,8 +15,8 @@ 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") },
@@ -64,8 +64,8 @@ frame:Connect(ID_FINDNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
editor:SetMainSelection(selection)
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
@@ -82,8 +82,8 @@ frame:Connect(ID_FINDPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
editor:SetMainSelection(selection)
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
@@ -94,43 +94,18 @@ 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)
@@ -139,6 +114,11 @@ local markername = "commandbar.background"
local mac = ide.osname == 'Macintosh'
local win = ide.osname == 'Windows'
local special = {SYMBOL = '@', LINE = ':', METHOD = ';'}
local tabsep = "\0"
local function name2index(name)
local p = name:find(tabsep)
return p and tonumber(name:sub(p + #tabsep)) or nil
end
local function navigateTo(default, selected)
local styles = ide.config.styles
local marker = ide:AddMarker(markername,
@@ -146,6 +126,7 @@ local function navigateTo(default, selected)
local nb = ide:GetEditorNotebook()
local selection = nb:GetSelection()
local maxitems = ide.config.commandbar.maxitems
local files, preview, origline, functions, methods
local function markLine(ed, toline)
@@ -167,18 +148,31 @@ local function navigateTo(default, selected)
local ed = ide:GetEditor()
if ed and origline then
ed:MarkerDeleteAll(marker)
ed:EnsureVisibleEnforcePolicy(origline-1)
-- 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 {})
local ed = ide:GetEditor()
-- 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
if text and text:find(special.SYMBOL) then
if sline and tabindex then
local index = name2index(sline)
local editor = index and nb:GetPage(index):DynamicCast("wxStyledTextCtrl")
if not editor then
local doc = ide:FindDocument(sline)
-- reload the file (including the preview to refresh its symbols in the outline)
editor = LoadFile(sline, (not doc or doc:GetTabIndex() == pindex) and preview or nil)
end
if editor then
if pindex and pindex ~= ide:GetDocument(editor):GetTabIndex() then ClosePage(pindex) end
editor:SetFocus() -- in case the focus is on some other panel
editor:GotoPos(tabindex-1)
editor:EnsureVisibleEnforcePolicy(editor:LineFromPosition(tabindex-1))
end
end
-- insert selected method
elseif text and text:find('^%s*'..special.METHOD) then
if ed then -- clean up text and insert at the current location
@@ -195,7 +189,7 @@ local function navigateTo(default, selected)
end
end
-- set line position in the (current) editor if requested
elseif text and text:find(special.LINE) then
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)
@@ -204,16 +198,27 @@ local function navigateTo(default, selected)
end
elseif tabindex then -- switch to existing tab
SetEditorSelection(tabindex)
if preview then -- close preview if not selected
local pindex = nb:GetPageIndex(preview)
if pindex ~= tabindex then ClosePage(pindex) end
if pindex and pindex ~= tabindex then ClosePage(pindex) end
-- load a new file (into preview if set)
elseif sline or text then
-- 1. use "text" if Ctrl/Cmd-Enter is used
-- 2. otherwise use currently selected file
-- 3. otherwise use "text"
local file = (wx.wxGetKeyState(wx.WXK_CONTROL) and text) or sline or text
local fullPath = MergeFullPath(ide:GetProject(), file)
local doc = ide:FindDocument(fullPath)
-- if the document is already opened (not in the preview)
-- or can't be opened as a file or folder, then close the preview
if doc and doc.index ~= pindex
or not LoadFile(fullPath, preview or nil) and not ProjectUpdateProjectDir(fullPath) then
if pindex then ClosePage(pindex) end
end
elseif sline then -- load a new file (into preview if set)
LoadFile(MergeFullPath(ide:GetProject(), sline), preview or nil, true)
end
elseif enter == nil then -- changed focus
-- do nothing; keep everything as is
else
-- close preview
if preview then ClosePage(nb:GetPageIndex(preview)) end
if pindex then ClosePage(pindex) end
-- restore original selection if canceled
if nb:GetSelection() ~= selection then nb:SetSelection(selection) end
end
@@ -237,24 +242,45 @@ local function navigateTo(default, selected)
-- 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 text and text:find(special.SYMBOL) then
local file, symbol = text:match('^(.*)'..special.SYMBOL..'(.*)')
if not functions then
local funcs, nums = OutlineFunctions(ed), {}
local nums, paths = {}, {}
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
local function populateSymbols(path, symbols)
for _, func in ipairs(symbols) do
table.insert(functions, func.name)
nums[func.name] = (nums[func.name] or 0) + 1
local num = nums[func.name]
functions.src[func.name..num] = path
functions.pos[func.name..num] = func.pos
end
end
local currentonly = #file > 0 and ed
local outline = ide:GetOutline()
for _, doc in pairs(currentonly and {ide:GetDocument(ed)} or ide:GetDocuments()) do
local path, editor = doc:GetFilePath(), doc:GetEditor()
if path then paths[path] = true end
populateSymbols(path or doc:GetFileName()..tabsep..doc:GetTabIndex(), outline:GetEditorSymbols(editor))
end
-- now add all other files in the project
if not currentonly and ide.config.commandbar.showallsymbols then
local n = 0
outline:RefreshSymbols(projdir, function(path)
local symbols = outline:GetFileSymbols(path)
if not paths[path] and symbols then populateSymbols(path, symbols) end
if not symbols then n = n + 1 end
end)
if n > 0 then ide:SetStatusFor(TR("Queued %d files to index."):format(n)) end
end
end
local symbol = text:match(special.SYMBOL..'(.*)')
local nums = {}
if #symbol > 0 then
local topscore
for _, item in ipairs(CommandBarScoreItems(functions, symbol, 100)) do
for _, item in ipairs(CommandBarScoreItems(functions, symbol, maxitems)) do
local func, score = unpack(item)
topscore = topscore or score
nums[func] = (nums[func] or 0) + 1
@@ -266,6 +292,7 @@ local function navigateTo(default, selected)
end
else
for n, name in ipairs(functions) do
if n > maxitems then break end
nums[name] = (nums[name] or 0) + 1
local num = nums[name]
lines[n] = {name, functions.src[name..num], functions.pos[name..num]}
@@ -291,7 +318,7 @@ local function navigateTo(default, selected)
local method = text:match(special.METHOD..'(.*)')
if #method > 0 then
local topscore
for _, item in ipairs(CommandBarScoreItems(methods, method, 100)) do
for _, item in ipairs(CommandBarScoreItems(methods, method, maxitems)) do
local method, score = unpack(item)
topscore = topscore or score
if score > topscore / 4 and score > 1 then
@@ -299,23 +326,15 @@ local function navigateTo(default, selected)
end
end
end
elseif text and text:find(special.LINE) then
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
if not files then
files = FileSysGetRecursive(projdir, true)
for k = #files, 1, -1 do
if IsDirectory(files[k]) then
table.remove(files, k)
else
files[k] = files[k]:gsub("^"..q(projdir), "")
end
end
end
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
for _, item in ipairs(CommandBarScoreItems(files, text, maxitems)) do
local file, score = unpack(item)
topscore = topscore or score
if score > topscore / 4 and score > 1 then
@@ -342,10 +361,9 @@ local function navigateTo(default, selected)
end,
onSelection = function(t, text)
local _, file, tabindex = unpack(t)
local pos
if text and text:find(special.SYMBOL) then
local ed = ide:GetEditor()
if ed then markLine(ed, ed:LineFromPosition(tabindex-1)+1) end
return
pos, tabindex = tabindex, name2index(file)
elseif text and text:find(special.METHOD) then
return
end
@@ -365,7 +383,7 @@ local function navigateTo(default, selected)
elseif file then
-- skip binary files with unknown extensions
if #ide:GetKnownExtensions(GetFileExt(file)) > 0
or not isBinary(FileRead(file, 2048)) then
or not IsBinary(FileRead(file, 2048)) then
preview = preview or NewFile()
preview:SetEvtHandlerEnabled(false)
LoadFile(file, preview, true, true)
@@ -380,6 +398,11 @@ local function navigateTo(default, selected)
end
end
nb:SetEvtHandlerEnabled(true)
if text and text:find(special.SYMBOL) then
local ed = ide:GetEditor()
if ed then markLine(ed, ed:LineFromPosition(pos-1)+1) end
end
end,
})
end

View File

@@ -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)
---------------------------------------------------------

View File

@@ -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)
---------------------------------------------------------
@@ -61,8 +61,10 @@ local panels = {
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

View File

@@ -1,11 +1,20 @@
-- Copyright 2014 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2014-15 Paul Kulchenko, ZeroBrane LLC
local ide = ide
ide.outline = {
outlineCtrl = nil,
imglist = ide:CreateImageList("OUTLINE", "FILE-NORMAL", "VALUE-LCALL",
"VALUE-GCALL", "VALUE-ACALL", "VALUE-SCALL", "VALUE-MCALL"),
settings = {
symbols = {},
ignoredirs = {},
},
needsaving = false,
indexqueue = {[0] = {}},
indexpurged = false, -- flag that the index has been purged from old records; once per session
}
local outline = ide.outline
local image = { FILE = 0, LFUNCTION = 1, GFUNCTION = 2, AFUNCTION = 3,
SMETHOD = 4, METHOD = 5,
}
@@ -20,22 +29,59 @@ local function setData(ctrl, item, value)
end
end
local function resetOutlineTimer()
if ide.config.outlineinactivity then
ide.timers.outline:Start(ide.config.outlineinactivity*1000, wx.wxTIMER_ONE_SHOT)
end
end
local function resetIndexTimer(interval)
if ide.config.symbolindexinactivity and not ide.timers.symbolindex:IsRunning() then
ide.timers.symbolindex:Start(interval or ide.config.symbolindexinactivity*1000, wx.wxTIMER_ONE_SHOT)
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 funcs = {updated = TimeGet()}
local var = {}
local outcfg = ide.config.outline or {}
local scopes = {}
local funcnum = 0
local SCOPENUM, FUNCNUM = 1, 2
local text
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 outcfg.showcurrentfunction and op == 'Scope' then
local fundepth = #scopes
if token.name == '(' then -- a function starts a new scope
funcnum = funcnum + 1 -- increment function count
local nested = fundepth == 0 or scopes[fundepth][SCOPENUM] > 0
scopes[fundepth + (nested and 1 or 0)] = {1, funcnum}
elseif fundepth > 0 then
scopes[fundepth][SCOPENUM] = scopes[fundepth][SCOPENUM] + 1
end
elseif outcfg.showcurrentfunction and op == 'EndScope' then
local fundepth = #scopes
if fundepth > 0 and scopes[fundepth][SCOPENUM] > 0 then
scopes[fundepth][SCOPENUM] = scopes[fundepth][SCOPENUM] - 1
if scopes[fundepth][SCOPENUM] == 0 then
local funcnum = scopes[fundepth][FUNCNUM]
if funcs[funcnum] then
funcs[funcnum].poe = token.fpos + (token.name and #token.name or 0)
end
table.remove(scopes)
end
end
elseif op == 'Function' then
local depth = token.context['function'] or 1
local name, pos = token.name, token.fpos
text = text or editor:GetText()
local _, _, rname, params = text:find('([^%(]*)(%b())', pos)
if name and rname:find(token.name, 1, true) ~= 1 then
name = rname:gsub("%s+$","")
@@ -59,23 +105,25 @@ local function outlineRefresh(editor, force)
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
name = name or outcfg.showanonymous
funcs[#funcs+1] = {
name = ((name or '~')..params):gsub("%s+", " "),
skip = (not name) and true or nil,
depth = depth,
image = ftype,
pos = name and pos or token.fpos,
}
end
end
local ctrl = ide.outline.outlineCtrl
if force == nil then return funcs end
local ctrl = outline.outlineCtrl
local cache = caches[editor] or {}
caches[editor] = cache
-- add file
local filename = ide:GetDocument(editor):GetFileName()
local filename = ide:GetDocument(editor):GetTabText()
local fileitem = cache.fileitem
if not fileitem then
local root = ctrl:GetRootItem()
@@ -101,7 +149,7 @@ local function outlineRefresh(editor, force)
func.item = prevfuncs[n].item -- carry over cached items
if func.depth ~= prevfuncs[n].depth then
nochange = false
elseif nochange then
elseif nochange and prevfuncs[n].item 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
@@ -129,18 +177,32 @@ local function outlineRefresh(editor, force)
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 edpos = editor:GetCurrentPos()+1
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
if not func.skip then
local item = ctrl:AppendItem(parent, func.name, func.image)
if ide.config.outline.showcurrentfunction
and edpos >= func.pos and func.poe and edpos <= func.poe then
ctrl:SetItemBold(item, true)
end
if outcfg.sort then resort[parent] = true end
setData(ctrl, item, n)
func.item = item
stack[func.depth+1] = item
end
func.skip = nil
end
if outcfg.sort then -- resort items for all parents that have been modified
for item in pairs(resort) do ctrl:SortChildren(item) end
@@ -158,22 +220,59 @@ local function outlineRefresh(editor, force)
if win and win ~= ide:GetMainFrame():FindFocus() then win:SetFocus() end
end
local function indexFromQueue()
if #outline.indexqueue == 0 then return end
local editor = ide:GetEditor()
local inactivity = ide.config.symbolindexinactivity
if editor and inactivity and editor.updated > TimeGet()-inactivity then
-- reschedule timer for later time
resetIndexTimer()
else
local fname = table.remove(outline.indexqueue, 1)
outline.indexqueue[0][fname] = nil
-- check if fname is already loaded
ide:SetStatusFor(TR("Indexing %d files: '%s'..."):format(#outline.indexqueue+1, fname))
local content, err = FileRead(fname)
if content then
local editor = ide:CreateBareEditor()
editor:SetupKeywords(GetFileExt(fname))
editor:SetText(content)
editor:Colourise(0, -1)
editor:ResetTokenList()
while IndicateAll(editor) do end
outline:UpdateSymbols(fname, outlineRefresh(editor))
editor:Destroy()
else
DisplayOutputLn(TR("Can't open file '%s': %s"):format(fname, err))
end
if #outline.indexqueue == 0 then
outline:SaveSettings()
ide:SetStatusFor(TR("Indexing completed."))
end
ide:DoWhenIdle(indexFromQueue)
end
return
end
local function outlineCreateOutlineWindow()
local REFRESH, REINDEX = 1, 2
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_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS
+ wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
ide.outline.outlineCtrl = ctrl
ide.timers.outline = wx.wxTimer(ctrl)
outline.outlineCtrl = ctrl
ide.timers.outline = wx.wxTimer(ctrl, REFRESH)
ide.timers.symbolindex = wx.wxTimer(ctrl, REINDEX)
ctrl:AddRoot("Outline")
ctrl:SetImageList(ide.outline.imglist)
ctrl:SetImageList(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
@@ -218,13 +317,41 @@ local function outlineCreateOutlineWindow()
return true
end
ctrl:Connect(wx.wxEVT_TIMER, function() outlineRefresh(GetEditor()) end)
ctrl:Connect(wx.wxEVT_TIMER, function(event)
if event:GetId() == REFRESH then outlineRefresh(GetEditor(), false) end
if event:GetId() == REINDEX then ide:DoWhenIdle(indexFromQueue) end
end)
ctrl:Connect(wx.wxEVT_LEFT_DOWN, activateByPosition)
ctrl:Connect(wx.wxEVT_LEFT_DCLICK, activateByPosition)
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_ACTIVATED, function(event)
ctrl:ActivateItem(event:GetItem())
end)
ctrl:Connect(ID_OUTLINESORT, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
ide.config.outline.sort = not ide.config.outline.sort
for editor, cache in pairs(caches) do
ide:SetStatus(("Refreshing '%s'..."):format(ide:GetDocument(editor):GetFileName()))
local isexpanded = ctrl:IsExpanded(cache.fileitem)
outlineRefresh(editor, true)
if not isexpanded then ctrl:Collapse(cache.fileitem) end
end
ide:SetStatus('')
end)
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
function (event)
local menu = wx.wxMenu {
{ ID_OUTLINESORT, TR("Sort By Name"), "", wx.wxITEM_CHECK },
}
menu:Check(ID_OUTLINESORT, ide.config.outline.sort)
PackageEventHandle("onMenuOutline", menu, ctrl, event)
ctrl:PopupMenu(menu)
end)
local function reconfigure(pane)
pane:TopDockable(false):BottomDockable(false)
:MinSize(150,-1):BestSize(300,-1):FloatingSize(200,300)
@@ -238,36 +365,78 @@ local function outlineCreateOutlineWindow()
end
end
local function eachNode(eachFunc, root)
local ctrl = ide.outline.outlineCtrl
local function eachNode(eachFunc, root, recursive)
local ctrl = 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
if recursive and ctrl:ItemHasChildren(item) then eachNode(eachFunc, item, recursive) 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
local pathsep = GetPathSeparator()
local function isInSubDir(name, path)
return #name > #path and path..pathsep == name:sub(1, #path+#pathsep)
end
ide:AddPackage('core.outline', {
local function isIgnoredInIndex(name)
local ignoredirs = outline.settings.ignoredirs
if ignoredirs[name] then return true end
-- check through ignored dirs to see if any of them match the file
for path in pairs(ignoredirs) do
if isInSubDir(name, path) then return true end
end
return false
end
local function purgeIndex(path)
local symbols = outline.settings.symbols
for name in pairs(symbols) do
if isInSubDir(name, path) then outline:UpdateSymbols(name, nil) end
end
end
local function purgeQueue(path)
local curqueue = outline.indexqueue
local newqueue = {[0] = {}}
for _, name in ipairs(curqueue) do
if not isInSubDir(name, path) then
table.insert(newqueue, name)
newqueue[0][name] = true
end
end
outline.indexqueue = newqueue
end
local function disableIndex(path)
outline.settings.ignoredirs[path] = true
outline:SaveSettings(true)
-- purge the path from the index and the (current) queue
purgeIndex(path)
purgeQueue(path)
end
local function enableIndex(path)
outline.settings.ignoredirs[path] = nil
outline:SaveSettings(true)
outline:RefreshSymbols(path)
end
local package = 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
if fileitem then outline.outlineCtrl:Delete(fileitem) end
end,
-- handle rename of the file in the current editor
@@ -276,25 +445,30 @@ ide:AddPackage('core.outline', {
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:GetFileName() then
ctrl:SetItemText(fileitem, doc:GetFileName())
local ctrl = outline.outlineCtrl
if doc and fileitem and ctrl:GetItemText(fileitem) ~= doc:GetTabText() then
ctrl:SetItemText(fileitem, doc:GetTabText())
end
local path = doc and doc:GetFilePath()
if path and cache and cache.funcs then
outline:UpdateSymbols(path, cache.funcs.updated > editor.updated and cache.funcs or nil)
outline:SaveSettings()
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 then
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):GetFileName()
local ctrl = outline.outlineCtrl
local itemname = ide:GetDocument(editor):GetTabText()
-- fix file name if it changed in the editor
-- update file name if it changed in the editor
if fileitem and ctrl:GetItemText(fileitem) ~= itemname then
ctrl:SetItemText(fileitem, itemname)
end
@@ -302,9 +476,8 @@ ide:AddPackage('core.outline', {
-- 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
if not cache then resetOutlineTimer() end
resetIndexTimer()
eachNode(function(ctrl, item)
local found = fileitem and item:GetValue() == fileitem:GetValue()
@@ -321,4 +494,177 @@ ide:AddPackage('core.outline', {
ctrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
end
end,
onMenuFiletree = function(self, menu, tree, event)
local item_id = event:GetItem()
local name = tree:GetItemFullName(item_id)
local symboldirmenu = wx.wxMenu {
{ID_SYMBOLDIRREFRESH, TR("Refresh Index"), TR("Refresh indexed symbols from files in the selected directory")},
{ID_SYMBOLDIRDISABLE, TR("Disable Indexing For '%s'"):format(name), TR("Ignore and don't index symbols from files in the selected directory")},
}
local _, _, projdirpos = ide:FindMenuItem(ID_PROJECTDIR, menu)
if projdirpos then
local ignored = isIgnoredInIndex(name)
local enabledirmenu = wx.wxMenu()
local paths = {}
for path in pairs(outline.settings.ignoredirs) do table.insert(paths, path) end
table.sort(paths)
for i, path in ipairs(paths) do
local id = ID("file.enablesymboldir."..i)
enabledirmenu:Append(id, path, "")
tree:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED, function() enableIndex(path) end)
end
symboldirmenu:Append(wx.wxMenuItem(symboldirmenu, ID_SYMBOLDIRENABLE,
TR("Enable Indexing"), "", wx.wxITEM_NORMAL, enabledirmenu))
menu:Insert(projdirpos+1, wx.wxMenuItem(menu, ID_SYMBOLDIRINDEX,
TR("Symbol Index"), "", wx.wxITEM_NORMAL, symboldirmenu))
-- disable "enable" if it's empty
menu:Enable(ID_SYMBOLDIRENABLE, #paths > 0)
-- disable "refresh" and "disable" if the directory is ignored
-- or if any of the directories above it are ignored
menu:Enable(ID_SYMBOLDIRREFRESH, tree:IsDirectory(item_id) and not ignored)
menu:Enable(ID_SYMBOLDIRDISABLE, tree:IsDirectory(item_id) and not ignored)
tree:Connect(ID_SYMBOLDIRREFRESH, wx.wxEVT_COMMAND_MENU_SELECTED, function()
-- purge files in this directory as some might have been removed;
-- files will be purged based on time, but this is a good time to clean.
purgeIndex(name)
outline:RefreshSymbols(name)
resetIndexTimer(1) -- start after 1ms
end)
tree:Connect(ID_SYMBOLDIRDISABLE, wx.wxEVT_COMMAND_MENU_SELECTED, function()
disableIndex(name)
end)
end
end,
onEditorPainted = function(self, editor)
local ctrl = ide.outline.outlineCtrl
if not ide:IsWindowShown(ctrl) then return end
local cache = caches[editor]
if not cache or not ide.config.outline.showcurrentfunction then return end
local edpos = editor:GetCurrentPos()+1
local edline = editor:LineFromPosition(edpos-1)+1
if cache.pos and cache.pos == edpos then return end
if cache.line and cache.line == edline then return end
cache.pos = edpos
cache.line = edline
local n = 0
local MIN, MAX = 1, 2
local visible = {[MIN] = math.huge, [MAX] = 0}
local needshown = {[MIN] = math.huge, [MAX] = 0}
ctrl:Unselect()
-- scan all items recursively starting from the current file
eachNode(function(ctrl, item)
local func = cache.funcs[ctrl:GetItemData(item):GetData()]
local val = edpos >= func.pos and func.poe and edpos <= func.poe
if edline == editor:LineFromPosition(func.pos)+1
or (func.poe and edline == editor:LineFromPosition(func.poe)+1) then
cache.line = nil
end
ctrl:SetItemBold(item, val)
if val then ctrl:SelectItem(item, val) end
if not ide.config.outline.jumptocurrentfunction then return end
n = n + 1
-- check that this and the items around it are all visible;
-- this is to avoid the situation when the current item is only partially visible
local isvisible = ctrl:IsVisible(item) and ctrl:GetNextVisible(item):IsOk() and ctrl:GetPrevVisible(item):IsOk()
if val and not isvisible then
needshown[MIN] = math.min(needshown[MIN], n)
needshown[MAX] = math.max(needshown[MAX], n)
elseif isvisible then
visible[MIN] = math.min(visible[MIN], n)
visible[MAX] = math.max(visible[MAX], n)
end
end, cache.fileitem, true)
if not ide.config.outline.jumptocurrentfunction then return end
if needshown[MAX] > visible[MAX] then
ctrl:ScrollLines(needshown[MAX]-visible[MAX]) -- scroll forward to the last hidden line
elseif needshown[MIN] < visible[MIN] then
ctrl:ScrollLines(needshown[MIN]-visible[MIN]) -- scroll backward to the first hidden line
end
end,
})
local function queuePath(path)
-- only queue if symbols inactivity is set, so files will be indexed
if ide.config.symbolindexinactivity and not outline.indexqueue[0][path] then
outline.indexqueue[0][path] = true
table.insert(outline.indexqueue, 1, path)
end
end
function outline:GetFileSymbols(path)
local symbols = self.settings.symbols[path]
-- queue path to process when appropriate
if not symbols then queuePath(path) end
return symbols
end
function outline:GetEditorSymbols(editor)
-- force token refresh (as these may be not updated yet)
if #editor:GetTokenList() == 0 then
while IndicateAll(editor) do end
end
-- only refresh the functions when none is present
if not caches[editor] or #caches[editor].funcs == 0 then outlineRefresh(editor, true) end
return caches[editor].funcs
end
function outline:RefreshSymbols(path, callback)
if isIgnoredInIndex(path) then return end
local exts = {}
for _, ext in pairs(ide:GetKnownExtensions()) do
local spec = GetSpec(ext)
if spec and spec.marksymbols then table.insert(exts, ext) end
end
local opts = {sort = false, folder = false, skipbinary = true, yield = true,
-- skip those directories that are on the "ignore" list
ondirectory = function(name) return outline.settings.ignoredirs[name] == nil end
}
local nextfile = coroutine.wrap(function() FileSysGetRecursive(path, true, table.concat(exts, ";"), opts) end)
while true do
local file = nextfile()
if not file then break end
if not isIgnoredInIndex(file) then (callback or queuePath)(file) end
end
end
function outline:UpdateSymbols(fname, symb)
local symbols = self.settings.symbols
symbols[fname] = symb
-- purge outdated records
local threshold = TimeGet() - 60*60*24*7 -- cache for 7 days
if not self.indexpurged then
for k, v in pairs(symbols) do
if v.updated < threshold then symbols[k] = nil end
end
self.indexpurged = true
end
self.needsaving = true
end
function outline:SaveSettings(force)
if self.needsaving or force then
ide:PushStatus(TR("Updating symbol index and settings..."))
package:SetSettings(self.settings, {keyignore = {depth = true, image = true, poe = true, item = true, skip = true}})
ide:PopStatus()
self.needsaving = false
end
end
MergeSettings(outline.settings, package:GetSettings())

View File

@@ -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)
---------------------------------------------------------
@@ -318,10 +318,9 @@ errorlog:Connect(wx.wxEVT_END_PROCESS, function(event)
-- check if editor still exists; it may not if the window is closed
if editor then editor:SetFocus() end
end
nameTab(errorlog, TR("Output"))
unHideWindow(0)
DebuggerStop(true)
nameTab(errorlog, TR("Output"))
DisplayOutputLn(TR("Program completed in %.2f seconds (pid: %d).")
:format(TimeGet() - customprocs[pid].started, pid))
customprocs[pid] = nil

View File

@@ -1,4 +1,4 @@
-- Copyright 2013-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2013-15 Paul Kulchenko, ZeroBrane LLC
---------------------------------------------------------
local ide = ide
@@ -66,23 +66,23 @@ function PackageRegister(file, ...)
end
function ide:GetRootPath(path)
return MergeFullPath(GetPathWithSep(ide.editorFilename), path or '')
return MergeFullPath(GetPathWithSep(self.editorFilename), path or '')
end
function ide:GetPackagePath(packname)
return MergeFullPath(
ide.oshome and MergeFullPath(ide.oshome, '.'..ide:GetAppName()..'/') or ide:GetRootPath(),
self.oshome and MergeFullPath(self.oshome, '.'..self:GetAppName()..'/') or self:GetRootPath(),
MergeFullPath('packages', packname or '')
)
end
function ide:GetApp() return self.editorApp end
function ide:GetAppName() return ide.appname end
function ide:GetAppName() return self.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 (pcall(function() ide.infocus:GetId() end)
and ide.infocus:GetClassInfo():GetClassName() == "wxStyledTextCtrl"
and ide.infocus:DynamicCast("wxStyledTextCtrl") or nil)
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
@@ -94,7 +94,7 @@ 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 _, spec in pairs(self.specs) do
for _, ext in ipairs(spec.exts or {}) do
if not extmatch or extmatch == ext:lower() then
table.insert(knownexts, ext)
@@ -104,12 +104,14 @@ function ide:GetKnownExtensions(ext)
return knownexts
end
function ide:DoWhenIdle(func) table.insert(self.onidle, func) end
function ide:FindTopMenu(item)
local index = ide:GetMenuBar():FindMenu(TR(item))
return ide:GetMenuBar():GetMenu(index), index
local index = self:GetMenuBar():FindMenu((TR)(item))
return self:GetMenuBar():GetMenu(index), index
end
function ide:FindMenuItem(itemid, menu)
local item, imenu = ide:GetMenuBar():FindItem(itemid, menu)
local item, imenu = self:GetMenuBar():FindItem(itemid, menu)
if menu and not item then item = menu:FindItem(itemid) end
if not item then return end
menu = menu or imenu
@@ -124,7 +126,7 @@ end
function ide:FindDocument(path)
local fileName = wx.wxFileName(path)
for _, doc in pairs(ide.openDocuments) do
for _, doc in pairs(self:GetDocuments()) do
if doc.filePath and fileName:SameAs(wx.wxFileName(doc.filePath)) then
return doc
end
@@ -139,7 +141,7 @@ function ide:FindDocumentsByPartialPath(path)
local lpattern = pattern:lower()
local docs = {}
for _, doc in pairs(ide.openDocuments) do
for _, doc in pairs(self:GetDocuments()) do
if doc.filePath
and (doc.filePath:find(pattern)
or iscaseinsensitive and doc.filePath:lower():find(lpattern)) then
@@ -155,17 +157,153 @@ 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:GetOutline() return self.outline end
function ide:GetProjectNotebook() return self.frame.projnotebook end
function ide:GetProject() return FileTreeGetDir() end
function ide:GetProjectStartFile()
local projectdir = FileTreeGetDir()
local startfile = self.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.projtreeCtrl end
function ide:GetOutlineTree() return ide.outline.outlineCtrl end
function ide:GetProjectTree() return self.filetree.projtreeCtrl end
function ide:GetOutlineTree() return self.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
local statusreset
function ide:SetStatusFor(text, interval, field)
field = field or 0
interval = interval or 2
local statusbar = self:GetStatusBar()
if not ide.timers.status then
ide.timers.status = wx.wxTimer(statusbar)
statusbar:Connect(wx.wxEVT_TIMER, function(event) if statusreset then statusreset() end end)
end
statusreset = function()
if statusbar:GetStatusText(field) == text then statusbar:SetStatusText("", field) end
end
ide.timers.status:Start(interval*1000, wx.wxTIMER_ONE_SHOT)
statusbar:SetStatusText(text, field)
end
function ide:SetStatus(text, field) self:GetStatusBar():SetStatusText(text, field or 0) end
function ide:GetStatus(field) return self:GetStatusBar():GetStatusText(field or 0) end
function ide:PushStatus(text, field) self:GetStatusBar():PushStatusText(text, field or 0) end
function ide:PopStatus(field) self:GetStatusBar():PopStatusText(field or 0) 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
local curpath = settings:GetPath()
@@ -176,10 +314,10 @@ function ide:GetSetting(path, setting)
end
function ide:RemoveMenuItem(id, menu)
local _, menu, pos = ide:FindMenuItem(id, menu)
local _, menu, pos = self: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)
self:GetMainFrame():Disconnect(id, wx.wxID_ANY, wx.wxEVT_COMMAND_MENU_SELECTED)
self: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)
@@ -196,7 +334,7 @@ function ide:RemoveMenuItem(id, menu)
end
function ide:ExecuteCommand(cmd, wdir, callback, endcallback)
local proc = wx.wxProcess(ide:GetOutput())
local proc = wx.wxProcess(self:GetOutput())
proc:Redirect()
local cwd
@@ -215,7 +353,7 @@ function ide:ExecuteCommand(cmd, wdir, callback, endcallback)
end
function ide:CreateImageList(group, ...)
local log = wx.wxLogNull() -- disable error reporting in popup
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
@@ -228,49 +366,78 @@ function ide:CreateImageList(group, ...)
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 im = self.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]
if im[id.."-"..client] then keyclient = width.."/"..im[id.."-"..client]
elseif im[keyclient] then keyclient = im[keyclient]
elseif im[id] then
-- 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 fileClient = self:GetAppName() .. "/res/" .. keyclient .. ".png"
local fileKey = self:GetAppName() .. "/res/" .. key .. ".png"
local isImage = type(mapped) == 'userdata' and mapped:GetClassInfo():GetClassName() == 'wxImage'
local file
if mapped and wx.wxFileName(mapped):FileExists() then file = mapped
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 wx.wxBitmap(file)
local icon = icons[file] or iconFilter(wx.wxBitmap(file), self.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]
self.packages[name] = setmetatable(package, self.proto.Plugin)
self.packages[name].fname = name
return self.packages[name]
end
function ide:RemovePackage(name) ide.packages[name] = nil end
function ide:RemovePackage(name) self.packages[name] = nil end
function ide:AddWatch(watch, value)
local mgr = ide.frame.uimgr
local mgr = self.frame.uimgr
local pane = mgr:GetPane("watchpanel")
if (pane:IsOk() and not pane:IsShown()) then
pane:Show()
mgr:Update()
end
local watchCtrl = ide.debugger.watchCtrl
local watchCtrl = self.debugger.watchCtrl
if not watchCtrl then return end
local root = watchCtrl:GetRootItem()
@@ -292,7 +459,7 @@ function ide:AddWatch(watch, value)
end
function ide:AddInterpreter(name, interpreter)
self.interpreters[name] = setmetatable(interpreter, ide.proto.Interpreter)
self.interpreters[name] = setmetatable(interpreter, self.proto.Interpreter)
ProjectUpdateInterpreters()
end
function ide:RemoveInterpreter(name)
@@ -319,18 +486,37 @@ function ide:AddMarker(...) return StylesAddMarker(...) end
function ide:GetMarker(marker) return StylesGetMarker(marker) end
function ide:RemoveMarker(marker) StylesRemoveMarker(marker) end
local indicators = {}
function ide:AddIndicator(indic, num)
num = num or indicators[indic]
if not num then -- new indicator; find the smallest available number
local nums = {}
for _, indicator in pairs(indicators) do
if indicator >= wxstc.wxSTC_INDIC_CONTAINER then
nums[indicator-wxstc.wxSTC_INDIC_CONTAINER+1] = true
end
end
num = #nums + wxstc.wxSTC_INDIC_CONTAINER
if num > wxstc.wxSTC_INDIC_MAX then return end
end
indicators[indic] = num
return num
end
function ide:GetIndicator(indic) return indicators[indic] end
function ide:RemoveIndicator(indic) indicators[indic] = nil end
-- this provides a simple stack for saving/restoring current configuration
local configcache = {}
function ide:AddConfig(name, files)
if not name or configcache[name] then return end -- don't overwrite existing slots
configcache[name] = require('mobdebug').dump(ide.config, {nocode = true})
configcache[name] = require('mobdebug').dump(self.config, {nocode = true})
for _, file in pairs(files) do LoadLuaConfig(MergeFullPath(name, file)) end
ReApplySpecAndStyles() -- apply current config to the UI
end
function ide:RemoveConfig(name)
if not name or not configcache[name] then return end
local ok, res = LoadSafe(configcache[name])
if ok then ide.config = res
if ok then self.config = res
else
DisplayOutputLn(("Error while restoring configuration: '%s'."):format(res))
end
@@ -341,7 +527,7 @@ end
local panels = {}
function ide:AddPanel(ctrl, panel, name, conf)
local width, height = 360, 200
local notebook = wxaui.wxAuiNotebook(ide.frame, wx.wxID_ANY,
local notebook = wxaui.wxAuiNotebook(self.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)
@@ -351,7 +537,7 @@ function ide:AddPanel(ctrl, panel, name, conf)
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
function(event) event:Veto() end)
local mgr = ide.frame.uimgr
local mgr = self.frame.uimgr
mgr:AddPane(notebook, wxaui.wxAuiPaneInfo():
Name(panel):Float():CaptionVisible(false):PaneBorder(false):
MinSize(width/2,height/2):
@@ -370,13 +556,25 @@ function ide:AddPanelDocked(notebook, ctrl, panel, name, conf, activate)
return notebook
end
function ide:IsPanelDocked(panel)
local layout = ide:GetSetting("/view", "uimgrlayout")
local layout = self: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:IsWindowShown(win)
while win do
if not win:IsShown() then return false end
win = win:GetParent()
end
return true
end
function ide:RestorePanelByLabel(name)
if not panels[name] then return end
return ide:AddPanel(unpack(panels[name]))
return self:AddPanel(unpack(panels[name]))
end
function ide:AddTool(name, command, updateui)

View File

@@ -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,10 +12,21 @@ 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
Save = function(self) return SaveFile(self.editor, self.filePath) end,
Close = function(self) return ClosePage(self.index) end,
}}
ide.proto.Plugin = {__index = {
@@ -20,7 +34,7 @@ ide.proto.Plugin = {__index = {
GetFileName = function(self) return self.fname end,
GetConfig = function(self) return ide.config[self.fname] or {} end,
GetSettings = function(self) return SettingsRestorePackage(self.fname) end,
SetSettings = function(self, settings) SettingsSavePackage(self.fname, settings) end,
SetSettings = function(self, settings, opts) SettingsSavePackage(self.fname, settings, opts) end,
}}
ide.proto.Interpreter = {__index = {
@@ -44,6 +58,6 @@ ide.proto.Debugger = {__index = {
}}
ide.proto.ID = {
__index = function(t, id) return _G['ID_'..id] end,
__call = function(t, id) return IDgen(id) end,
__index = function(_, id) return _G['ID_'..id] end,
__call = function(_, id) return IDgen(id) end,
}

View File

@@ -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)
---------------------------------------------------------
@@ -18,8 +18,24 @@ local layoutlabel = {
-- ----------------------------------------------------------------------------
-- Initialize the wxConfig for loading/saving the preferences
local settings = wx.wxFileConfig(GetIDEString("settingsapp"),
GetIDEString("settingsvendor"), ide.config.ini or "")
local ini = ide.config.ini
-- if ini path is relative and includes a directory name, make it relative to the IDE location
ini = ini and (not wx.wxIsAbsolutePath(ini) and wx.wxFileName(ini):GetDirCount() > 0
and MergeFullPath(GetPathWithSep(ide.editorFilename), ini) or ini)
-- check that the ini file doesn't point to a directory
if ini and (wx.wxFileName(ini):IsDir() or wx.wxIsAbsolutePath(ini) and wx.wxDirExists(ini)) then
print(("Can't use 'ini' configuration setting '%s' that points to a directory instead of a file; ignored.")
:format(ini))
ini = nil
end
-- check that the directory is writable
if ini and wx.wxIsAbsolutePath(ini) and not wx.wxFileName(ini):IsDirWritable() then
print(("Can't use 'ini' configuration setting '%s' that points to a non-writable directory; ignored.")
:format(ini))
ini = nil
end
local settings = wx.wxFileConfig(GetIDEString("settingsapp"), GetIDEString("settingsvendor"), ini or "")
ide.settings = settings
local function settingsReadSafe(settings,what,default)
@@ -238,13 +254,18 @@ function SettingsRestorePackage(package)
local path = settings:GetPath()
settings:SetPath(packagename)
local outtab = {}
local report = DisplayOutputLn or print
local ismore, key, index = settings:GetFirstEntry("", 0)
while (ismore) do
local couldread, value = settings:Read(key, "")
if couldread then
local ok, res = LoadSafe("return "..value)
if ok then outtab[key] = res
else outtab[key] = nil end
else
outtab[key] = nil
report(("Couldn't load and ignored '%s' settings for package '%s': %s")
:format(key, package, res))
end
end
ismore, key, index = settings:GetNextEntry(index)
end
@@ -252,16 +273,41 @@ function SettingsRestorePackage(package)
return outtab
end
function SettingsSavePackage(package, values)
local function plaindump(val, opts, done)
local keyignore = opts and opts.keyignore or {}
local final = done == nil
opts, done = opts or {}, done or {}
local t = type(val)
if t == "table" then
done[#done+1] = '{'
done[#done+1] = ''
for key, value in pairs (val) do
if not keyignore[key] then
done[#done+1] = '['
plaindump(key, opts, done)
done[#done+1] = ']='
plaindump(value, opts, done)
done[#done+1] = ","
end
end
done[#done] = '}'
elseif t == "string" then
done[#done+1] = ("%q"):format(val):gsub("\010","n"):gsub("\026","\\026")
elseif t == "number" then
done[#done+1] = ("%.17g"):format(val)
else
done[#done+1] = tostring(val)
end
return final and table.concat(done, '')
end
function SettingsSavePackage(package, values, opts)
local packagename = "/package/"..package
local path = settings:GetPath()
local mdb = require('mobdebug')
settings:DeleteGroup(packagename)
settings:SetPath(packagename)
for k,v in pairs(values or {}) do
settings:Write(k, mdb.line(v, {comment = false, nocode = true}))
end
for k,v in pairs(values or {}) do settings:Write(k, plaindump(v, opts)) end
settings:SetPath(path)
end
@@ -416,7 +462,7 @@ function SettingsRestoreView()
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
@@ -520,8 +566,9 @@ function SettingsRestoreEditorSettings()
local path = settings:GetPath()
settings:SetPath(listname)
ide.config.interpreter = settingsReadSafe(settings,"interpreter",ide.config.interpreter)
ProjectSetInterpreter(ide.config.interpreter)
local interpreter = settingsReadSafe(settings, "interpreter",
ide.config.interpreter or ide.config.default.interpreter)
ProjectSetInterpreter(interpreter)
settings:SetPath(path)
end

View File

@@ -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)
---------------------------------------------------------

View File

@@ -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)
---------------------------------------------------------
@@ -50,9 +50,7 @@ if success then -- ok, server was started, we are solo
if filename then
RequestAttention()
if wx.wxDirExists(filename) then
local dir = wx.wxFileName.DirName(filename)
dir:Normalize() -- turn into absolute path if needed
ProjectUpdateProjectDir(dir:GetFullPath())
ProjectUpdateProjectDir(filename)
elseif not ActivateFile(filename) then
DisplayOutputLn(TR("Can't open file '%s': %s"):format(filename, wx.wxSysErrorMsg()))
end

View File

@@ -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)
---------------------------------------------------------
----------
@@ -75,15 +75,17 @@ function StylesGetDefault()
output = {},
prompt = {},
error = {},
searchmatchfile = {},
},
-- indicators
indicator = {
fncall = {st = wxstc.wxSTC_INDIC_HIDDEN}, -- hide by default
fncall = {},
varlocal = {},
varglobal = {},
varmasking = {},
varmasked = {},
searchmatch = {},
},
}
end
@@ -96,6 +98,7 @@ local markers = {
output = {4, wxstc.wxSTC_MARK_BACKGROUND, wx.wxBLACK, wx.wxColour(240, 240, 240)},
prompt = {5, wxstc.wxSTC_MARK_ARROWS, wx.wxBLACK, wx.wxColour(220, 220, 220)},
error = {6, wxstc.wxSTC_MARK_BACKGROUND, wx.wxBLACK, wx.wxColour(255, 220, 220)},
searchmatchfile = {7, wxstc.wxSTC_MARK_EMPTY, wx.wxBLACK, wx.wxColour(196, 0, 0)},
}
function StylesGetMarker(marker) return unpack(markers[marker] or {}) end
function StylesRemoveMarker(marker) markers[marker] = nil end
@@ -236,6 +239,8 @@ local specialmapping = {
auxwindow = function(editor,style)
if not style then return end
-- don't color toolbars as they have their own color/style
local skipcolor = {wxAuiToolBar = true, wxToolBar = true}
local default = wxstc.wxSTC_STYLE_DEFAULT
local bg = style.bg and wx.wxColour(unpack(style.bg)) or editor:StyleGetBackground(default)
local fg = style.fg and wx.wxColour(unpack(style.fg)) or editor:StyleGetForeground(default)
@@ -253,7 +258,7 @@ local specialmapping = {
for child = 0, children:GetCount()-1 do
local data = children:Item(child):GetData()
local _, window = pcall(function() return data:DynamicCast("wxWindow") end)
if window and panes:Item(index).name ~= 'toolbar' then
if window and not skipcolor[window:GetClassInfo():GetClassName()] then
window:SetBackgroundColour(bg)
window:SetForegroundColour(fg)
window:Refresh()
@@ -355,16 +360,25 @@ function StylesApplyToEditor(styles,editor,font,fontitalic,lexerconvert)
if type(styles.fncall) == 'table' and next(styles.fncall)
and not (type(indic.fncall) == 'table' and next(indic.fncall)) then indic.fncall = styles.fncall end
editor:IndicatorSetStyle(0, indic.fncall and indic.fncall.st or ide.wxver >= "2.9.5" and wxstc.wxSTC_INDIC_ROUNDBOX or wxstc.wxSTC_INDIC_TT)
editor:IndicatorSetForeground(0, wx.wxColour(unpack(indic.fncall and indic.fncall.fg or {128, 128, 255})))
editor:IndicatorSetStyle(1, indic.varlocal and indic.varlocal.st or wxstc.wxSTC_INDIC_DOTS or wxstc.wxSTC_INDIC_TT)
editor:IndicatorSetForeground(1, wx.wxColour(unpack(indic.varlocal and indic.varlocal.fg or defaultfg)))
editor:IndicatorSetStyle(2, indic.varglobal and indic.varglobal.st or wxstc.wxSTC_INDIC_PLAIN)
editor:IndicatorSetForeground(2, wx.wxColour(unpack(indic.varglobal and indic.varglobal.fg or defaultfg)))
editor:IndicatorSetStyle(3, indic.varmasking and indic.varmasking.st or wxstc.wxSTC_INDIC_DASH or wxstc.wxSTC_INDIC_DIAGONAL)
editor:IndicatorSetForeground(3, wx.wxColour(unpack(indic.varmasking and indic.varmasking.fg or defaultfg)))
editor:IndicatorSetStyle(4, indic.varmasked and indic.varmasked.st or wxstc.wxSTC_INDIC_STRIKE)
editor:IndicatorSetForeground(4, wx.wxColour(unpack(indic.varmasked and indic.varmasked.fg or defaultfg)))
local fncall = ide:AddIndicator("core.fncall")
local varlocal = ide:AddIndicator("core.varlocal")
local varglobal = ide:AddIndicator("core.varglobal")
local varmasking = ide:AddIndicator("core.varmasking")
local varmasked = ide:AddIndicator("core.varmasked")
local searchmatch = ide:AddIndicator("core.searchmatch")
editor:IndicatorSetStyle(fncall, indic.fncall and indic.fncall.st or ide.wxver >= "2.9.5" and wxstc.wxSTC_INDIC_ROUNDBOX or wxstc.wxSTC_INDIC_TT)
editor:IndicatorSetForeground(fncall, wx.wxColour(unpack(indic.fncall and indic.fncall.fg or {128, 128, 255})))
editor:IndicatorSetStyle(varlocal, indic.varlocal and indic.varlocal.st or wxstc.wxSTC_INDIC_DOTS or wxstc.wxSTC_INDIC_TT)
editor:IndicatorSetForeground(varlocal, wx.wxColour(unpack(indic.varlocal and indic.varlocal.fg or defaultfg)))
editor:IndicatorSetStyle(varglobal, indic.varglobal and indic.varglobal.st or wxstc.wxSTC_INDIC_PLAIN)
editor:IndicatorSetForeground(varglobal, wx.wxColour(unpack(indic.varglobal and indic.varglobal.fg or defaultfg)))
editor:IndicatorSetStyle(varmasking, indic.varmasking and indic.varmasking.st or wxstc.wxSTC_INDIC_DASH or wxstc.wxSTC_INDIC_DIAGONAL)
editor:IndicatorSetForeground(varmasking, wx.wxColour(unpack(indic.varmasking and indic.varmasking.fg or defaultfg)))
editor:IndicatorSetStyle(varmasked, indic.varmasked and indic.varmasked.st or wxstc.wxSTC_INDIC_STRIKE)
editor:IndicatorSetForeground(varmasked, wx.wxColour(unpack(indic.varmasked and indic.varmasked.fg or defaultfg)))
editor:IndicatorSetStyle(searchmatch, indic.searchmatch and indic.searchmatch.st or wxstc.wxSTC_INDIC_BOX)
editor:IndicatorSetForeground(searchmatch, wx.wxColour(unpack(indic.searchmatch and indic.searchmatch.fg or {196, 0, 0})))
end
end

View File

@@ -1,37 +1,54 @@
-- Copyright 2014 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2014-15 Paul Kulchenko, ZeroBrane LLC
local TR = function(...) return ... end
ide.config.toolbar.icons = {
ID_NEW, ID_OPEN, ID_SAVE, ID_SAVEALL, ID_PROJECTDIRFROMFILE, ID_PROJECTDIRCHOOSE,
ID_SEPARATOR,
ID_FIND, ID_REPLACE, ID_FINDINFILES,
ID_SEPARATOR,
ID_RUN, ID_STARTDEBUG, ID_RUNNOW, ID_STOPDEBUG, ID_DETACHDEBUG, ID_BREAK, ID_STEP, ID_STEPOVER, ID_STEPOUT,
ID_SEPARATOR,
ID_TOGGLEBREAKPOINT, ID_BOOKMARKTOGGLE, ID_VIEWCALLSTACK, ID_VIEWWATCHWINDOW,
[ID_FINDINFILES] = false,
ID.NEW, ID.OPEN, ID.SAVE, ID.SAVEALL, ID.PROJECTDIRFROMFILE, ID.PROJECTDIRCHOOSE,
ID.SEPARATOR,
ID.FIND, ID.REPLACE, ID.FINDINFILES,
ID.SEPARATOR,
ID.RUN, ID.STARTDEBUG, ID.RUNNOW, ID.STOPDEBUG, ID.DETACHDEBUG, ID.BREAK,
ID.STEP, ID.STEPOVER, ID.STEPOUT, ID.RUNTO,
ID.SEPARATOR,
ID.TOGGLEBREAKPOINT, ID.BOOKMARKTOGGLE, ID.VIEWCALLSTACK, ID.VIEWWATCHWINDOW,
[ID.FINDINFILES] = false,
}
ide.config.toolbar.iconmap = {
[ID_NEW] = {"FILE-NEW", "Create an empty document"},
[ID_OPEN] = {"FILE-OPEN", "Open an existing document"},
[ID_SAVE] = {"FILE-SAVE", "Save the current document"},
[ID_SAVEALL] = {"FILE-SAVE-ALL", "Save all open documents"},
[ID_PROJECTDIRFROMFILE]= {"DIR-SETUP-FILE", "Set project directory from current file"},
[ID_PROJECTDIRCHOOSE] = {"DIR-SETUP", "Choose a project directory"},
[ID_FIND] = {"FIND", "Find text"},
[ID_REPLACE] = {"FIND-AND-REPLACE", "Find and replace text"},
[ID_FINDINFILES] = {"FIND-IN-FILES", "Find in files"},
[ID_RUN] = {"RUN", "Execute the current project/file"},
[ID_RUNNOW] = {"RUN-NOW", "Run as Scratchpad"},
[ID_STARTDEBUG] = {"DEBUG-START", "Start or continue debugging"},
[ID_STOPDEBUG] = {"DEBUG-STOP", "Stop the currently running process"},
[ID_DETACHDEBUG]= {"DEBUG-DETACH", "Stop debugging and continue running the process"},
[ID_BREAK] = {"DEBUG-BREAK", "Break execution at the next executed line of code"},
[ID_STEP] = {"DEBUG-STEP-INTO", "Step into"},
[ID_STEPOVER] = {"DEBUG-STEP-OVER", "Step over"},
[ID_STEPOUT] = {"DEBUG-STEP-OUT", "Step out of the current function"},
[ID_TOGGLEBREAKPOINT] = {"DEBUG-BREAKPOINT-TOGGLE", "Toggle breakpoint"},
[ID_BOOKMARKTOGGLE] = {"BOOKMARK-TOGGLE", "Toggle bookmark"},
[ID_VIEWCALLSTACK] = {"DEBUG-CALLSTACK", "View the stack window"},
[ID_VIEWWATCHWINDOW] = {"DEBUG-WATCH", "View the watch window"},
[ID.NEW] = {"FILE-NEW", TR("Create an empty document")},
[ID.OPEN] = {"FILE-OPEN", TR("Open an existing document")},
[ID.SAVE] = {"FILE-SAVE", TR("Save the current document")},
[ID.SAVEALL] = {"FILE-SAVE-ALL", TR("Save all open documents")},
[ID.PROJECTDIRFROMFILE]= {"DIR-SETUP-FILE", TR("Set project directory from current file")},
[ID.PROJECTDIRCHOOSE] = {"DIR-SETUP", TR("Choose a project directory")},
[ID.FIND] = {"FIND", TR("Find text")},
[ID.REPLACE] = {"FIND-AND-REPLACE", TR("Find and replace text")},
[ID.FINDINFILES] = {"FIND-IN-FILES", TR("Find in files")},
[ID.RUN] = {"RUN", TR("Execute the current project/file")},
[ID.RUNNOW] = {"RUN-NOW", TR("Run as Scratchpad")},
[ID.STARTDEBUG] = {"DEBUG-START", TR("Start or continue debugging")},
[ID.STOPDEBUG] = {"DEBUG-STOP", TR("Stop the currently running process")},
[ID.DETACHDEBUG]= {"DEBUG-DETACH", TR("Stop debugging and continue running the process")},
[ID.BREAK] = {"DEBUG-BREAK", TR("Break execution at the next executed line of code")},
[ID.RUNTO] = {"DEBUG-RUN-TO", TR("Run to cursor")},
[ID.STEP] = {"DEBUG-STEP-INTO", TR("Step into")},
[ID.STEPOVER] = {"DEBUG-STEP-OVER", TR("Step over")},
[ID.STEPOUT] = {"DEBUG-STEP-OUT", TR("Step out of the current function")},
[ID.TOGGLEBREAKPOINT] = {"DEBUG-BREAKPOINT-TOGGLE", TR("Toggle breakpoint")},
[ID.BOOKMARKTOGGLE] = {"BOOKMARK-TOGGLE", TR("Toggle bookmark")},
[ID.VIEWCALLSTACK] = {"DEBUG-CALLSTACK", TR("View the stack window")},
[ID.VIEWWATCHWINDOW] = {"DEBUG-WATCH", TR("View the watch window")},
-- search toolbar
[ID.FINDNEXT] = {"FIND", TR("Find")},
[ID.FINDREPLACENEXT] = {"FIND-REPLACE-NEXT", TR("Replace next instance")},
[ID.FINDREPLACEALL] = {"FIND-AND-REPLACE", TR("Replace all")},
[ID.FINDSETDIR] = {"FIND-OPT-SETDIR", TR("Set search directory")},
[ID.FINDOPTDIRECTION] = {"FIND-OPT-DOWN", TR("Search direction")},
[ID.FINDOPTWRAPWROUND] = {"FIND-OPT-WRAP-AROUND", TR("Wrap around")},
[ID.FINDOPTWORD] = {"FIND-OPT-WORD", TR("Match whole word")},
[ID.FINDOPTCASE] = {"FIND-OPT-CASE-SENSITIVE", TR("Match case")},
[ID.FINDOPTREGEX] = {"FIND-OPT-REGEX", TR("Regular expression")},
[ID.FINDOPTCONTEXT] = {"FIND-OPT-CONTEXT", TR("Show context")},
[ID.FINDOPTSUBDIR] = {"FIND-OPT-SUBDIR", TR("Search in subdirectories")},
[ID.FINDOPTMULTIRESULTS] = {"FIND-OPT-MULTI-RESULTS", TR("Show multiple result windows")},
}

View File

@@ -1,11 +1,16 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
-- put bin/ and lualibs/ first to avoid conflicts with included modules
-- that may have other versions present somewhere else in path/cpath.
local function isproc()
local file = io.open("/proc")
if file then file:close() end
return file ~= nil
end
local iswindows = os.getenv('WINDIR') or (os.getenv('OS') or ''):match('[Ww]indows')
local islinux = not iswindows and not os.getenv('DYLD_LIBRARY_PATH') and io.open("/proc")
local islinux = not iswindows and isproc()
local arch = "x86" -- use 32bit by default
local unpack = table.unpack or unpack
@@ -29,6 +34,8 @@ package.path = 'lualibs/?.lua;lualibs/?/?.lua;lualibs/?/init.lua;lualibs/?/?/?.
require("wx")
require("bit")
require("mobdebug")
if jit and jit.on then jit.on() end -- turn jit "on" as "mobdebug" may turn it off for LuaJIT
dofile "src/util.lua"
@@ -36,17 +43,20 @@ dofile "src/util.lua"
-- IDE
--
ide = {
MODPREF = "* ",
MAXMARGIN = 4,
config = {
path = {
projectdir = "",
app = nil,
},
editor = {
autoactivate = false,
foldcompact = true,
checkeol = true,
saveallonrun = false,
caretline = true,
showfncall = true,
showfncall = false,
autotabs = false,
usetabs = false,
tabwidth = 2,
@@ -64,6 +74,7 @@ ide = {
port = nil,
runonstart = nil,
redirect = nil,
requestattention = true,
maxdatalength = 400,
maxdatanum = 400,
maxdatalevel = 3,
@@ -80,7 +91,9 @@ ide = {
mousemove = true,
},
outline = {
jumptocurrentfunction = true,
showanonymous = '~',
showcurrentfunction = true,
showflat = false,
showmethodindicator = false,
showonefile = false,
@@ -88,6 +101,20 @@ ide = {
},
commandbar = {
prefilter = 250, -- number of records after which to apply filtering
maxitems = 30, -- max number of items to show
width = 0.35, -- <1 -- size in proportion to the app frame width; >1 -- size in pixels
showallsymbols = true,
},
staticanalyzer = {
infervalue = false, -- off by default as it's a slower mode
},
search = {
autocomplete = true,
contextlinesbefore = 2,
contextlinesafter = 2,
showaseditor = false,
zoom = 0,
autohide = false,
},
toolbar = {
@@ -112,9 +139,11 @@ ide = {
nodynwords = true,
ignorecase = false,
symbols = true,
droprest = true,
strategy = 2,
width = 60,
maxlength = 450,
warning = true,
},
arg = {}, -- command line arguments
api = {}, -- additional APIs to load
@@ -130,15 +159,19 @@ ide = {
projectautoopen = true,
autorecoverinactivity = 10, -- seconds
outlineinactivity = 0.250, -- seconds
symbolindexinactivity = 2, -- seconds
filehistorylength = 20,
projecthistorylength = 20,
bordersize = 2,
savebak = false,
singleinstance = false,
singleinstanceport = 0xe493,
interpreter = "luadeb",
showmemoryusage = false,
hidpi = false, -- HiDPI/Retina display support
hotexit = false,
-- file exclusion lists
excludelist = {".svn/", ".git/", ".hg/", "CVS/", "*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db"},
binarylist = {"*.jpg", "*.jpeg", "*.png", "*.gif", "*.ttf", "*.tga", "*.dds", "*.ico", "*.eot", "*.pdf", "*.swf", "*.jar", "*.zip", ".gz", ".rar"},
},
specs = {
none = {
@@ -151,6 +184,7 @@ ide = {
packages = {},
apis = {},
timers = {},
onidle = {},
proto = {}, -- prototypes for various classes
@@ -361,15 +395,14 @@ local function loadPackages(filter)
end
-- check dependencies and assign file names to each package
local report = DisplayOutputLn or print
local unload = {}
for fname, package in pairs(ide.packages) do
if type(package.dependencies) == 'table'
and package.dependencies.osname
and not package.dependencies.osname:find(ide.osname, 1, true) then
(DisplayOutputLn or print)(
("Package '%s' not loaded: requires %s platform, but you are running %s.")
:format(fname, package.dependencies.osname, ide.osname)
)
report(("Package '%s' not loaded: requires %s platform, but you are running %s.")
:format(fname, package.dependencies.osname, ide.osname))
table.insert(unload, fname)
end
@@ -378,10 +411,8 @@ local function loadPackages(filter)
or -1
local isversion = tonumber(ide.VERSION)
if isversion and needsversion > isversion then
(DisplayOutputLn or print)(
("Package '%s' not loaded: requires version %s, but you are running version %s.")
:format(fname, needsversion, ide.VERSION)
)
report(("Package '%s' not loaded: requires version %s, but you are running version %s.")
:format(fname, needsversion, ide.VERSION))
table.insert(unload, fname)
end
package.fname = fname
@@ -444,9 +475,13 @@ end
-- set ide.config environment
setmetatable(ide.config, {__index = {os = os, wxstc = wxstc, wx = wx, ID = ID}})
ide.config.load = { interpreters = loadInterpreters, specs = loadSpecs,
tools = loadTools }
ide.config.load = {interpreters = loadInterpreters, specs = loadSpecs, tools = loadTools}
do
ide.configs = {
system = MergeFullPath("cfg", "user.lua"),
user = ide.oshome and MergeFullPath(ide.oshome, "."..ide.appname.."/user.lua"),
}
local num = 0
ide.config.package = function(p)
if p then
@@ -455,6 +490,18 @@ do
ide.packages[name] = setmetatable(p, ide.proto.Plugin)
end
end
local includes = {}
ide.config.include = function(c)
if c then
for _, config in ipairs({ide.configs.system, ide.configs.user}) do
local p = config and MergeFullPath(config.."/../", c)
includes[p] = (includes[p] or 0) + 1
if includes[p] > 1 or LoadLuaConfig(p) then return end
end
print(("Can't find configuration file '%s' to process."):format(c))
end
end
end
LoadLuaConfig(ide.appname.."/config.lua")
@@ -485,11 +532,6 @@ loadSpecs()
loadTools()
do
ide.configs = {
system = MergeFullPath("cfg", "user.lua"),
user = ide.oshome and MergeFullPath(ide.oshome, "."..ide.appname.."/user.lua"),
}
-- process configs
LoadLuaConfig(ide.configs.system)
LoadLuaConfig(ide.configs.user)
@@ -511,6 +553,10 @@ do
if ide.config.language then
LoadLuaFileExt(ide.config.messages, "cfg"..sep.."i18n"..sep..ide.config.language..".lua")
end
-- always load 'en' as it's requires as a fallback for pluralization
if ide.config.language ~= 'en' then
LoadLuaFileExt(ide.config.messages, "cfg"..sep.."i18n"..sep.."en.lua")
end
end
loadPackages()
@@ -519,7 +565,7 @@ loadPackages()
-- Load App
for _, file in ipairs({
"markup", "settings", "singleinstance", "iofilters", "package",
"settings", "singleinstance", "iofilters", "package", "markup",
"gui", "filetree", "output", "debugger", "outline", "commandbar",
"editor", "findreplace", "commands", "autocomplete", "shellbox",
"menu_file", "menu_edit", "menu_search",
@@ -553,17 +599,13 @@ do
for _, filename in ipairs(filenames) do
if filename ~= "--" then
if wx.wxDirExists(filename) then
local dir = wx.wxFileName.DirName(filename)
dir:Normalize() -- turn into absolute path if needed
ProjectUpdateProjectDir(dir:GetFullPath())
ProjectUpdateProjectDir(filename)
elseif not ActivateFile(filename) then
DisplayOutputLn(("Can't open file '%s': %s"):format(filename, wx.wxSysErrorMsg()))
end
end
end
local notebook = ide.frame.notebook
if notebook:GetPageCount() == 0 then NewFile() end
if ide:GetEditorNotebook():GetPageCount() == 0 then NewFile() end
end
if app.postinit then app.postinit() end
@@ -597,7 +639,8 @@ local function remapkey(event)
local keycode = event:GetKeyCode()
local mod = event:GetModifiers()
for id, obj in pairs(remap) do
if obj:FindFocus():GetId() == obj:GetId() then
local focus = obj:FindFocus()
if focus and focus:GetId() == obj:GetId() then
local ae = wx.wxAcceleratorEntry(); ae:FromString(KSC(id))
if ae:GetFlags() == mod and ae:GetKeyCode() == keycode then
rerouteMenuCommand(obj, id)

View File

@@ -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)
-- David Manura
@@ -9,28 +9,6 @@ function iff(cond, a, b) if cond then return a else return b end end
function EscapeMagic(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
-- Does the num have all the bits in value
function HasBit(value, num)
for n = 32, 0, -1 do
local b = 2^n
local num_b = num - b
local value_b = value - b
if num_b >= 0 then
num = num_b
else
return true -- already tested bits in num
end
if value_b >= 0 then
value = value_b
end
if (num_b >= 0) and (value_b < 0) then
return false
end
end
return true
end
function GetPathSeparator()
return string.char(wx.wxFileName.GetPathSeparator())
end
@@ -137,10 +115,14 @@ function GetFileModTime(filePath)
end
function GetFileExt(filePath)
local match = filePath and filePath:match("%.([^./\\]*)$")
local match = filePath and filePath:gsub("%s+$",""):match("%.([^./\\]*)$")
return match and match:lower() or ''
end
function GetFileName(filePath)
return filePath and filePath:gsub("%s+$",""):match("([^/\\]*)$") or ''
end
function IsLuaFile(filePath)
return filePath and (string.len(filePath) > 4) and
(string.lower(string.sub(filePath, -4)) == ".lua")
@@ -156,51 +138,125 @@ function FileDirHasContent(dir)
return #f>0
end
function FileSysGetRecursive(path, recursive, spec, skip)
spec = spec or "*"
function FileSysGetRecursive(path, recursive, spec, opts)
local content = {}
local sep = GetPathSeparator()
local queue = {path}
local pathpatt = "^"..EscapeMagic(path)
local optyield = (opts or {}).yield
local optfolder = (opts or {}).folder ~= false
local optsort = (opts or {}).sort ~= false
local optpath = (opts or {}).path ~= false
local optskipbinary = (opts or {}).skipbinary
local optondirectory = (opts or {}).ondirectory
-- recursion is done in all folders but only those folders that match
-- the spec are returned. This is the pattern that matches the spec.
local specmask = spec:gsub("%.", "%%."):gsub("%*", ".*").."$"
local function spec2list(spec, list)
-- return empty list if no spec is provided
if spec == nil or spec == "*" or spec == "*.*" then return {}, 0 end
-- accept "*.lua" and "*.txt,*.wlua" combinations
if type(spec) == 'table' then spec = table.concat(spec, ",") end
local masknum, list = 0, list or {}
for m in spec:gmatch("[^%s;,]+") do
m = m:gsub("[\\/]", sep)
if m:find("^%*%.%w+"..sep.."?$") then
list[m:sub(2)] = true
else
-- escape all special characters
-- and replace (escaped) ** with .* and (escaped) * with [^\//]*
table.insert(list, EscapeMagic(m)
:gsub("%%%*%%%*", ".*"):gsub("%%%*", "[^/\\]*").."$")
end
masknum = masknum + 1
end
return list, masknum
end
local function getDir(path, spec)
local dir = wx.wxDir(path)
if not dir:IsOpened() then return end
local inmasks, masknum = spec2list(spec)
if masknum >= 2 then spec = nil end
local exmasks = spec2list(ide.config.excludelist or {})
if optskipbinary then -- add any binary files to the list to skip
exmasks = spec2list(type(optskipbinary) == 'table' and optskipbinary
or ide.config.binarylist or {}, exmasks)
end
local function ismatch(file, inmasks, exmasks)
-- convert extension 'foo' to '.foo', as need to distinguish file
-- from extension with the same name
local ext = '.'..GetFileExt(file)
-- check exclusions if needed
if exmasks[file] or exmasks[ext] then return false end
for _, mask in ipairs(exmasks) do
if file:find(mask) then return false end
end
-- return true if none of the exclusions match and no inclusion list
if not inmasks or not next(inmasks) then return true end
-- now check inclusions
if inmasks[file] or inmasks[ext] then return true end
for _, mask in ipairs(inmasks) do
if file:find(mask) then return true end
end
return false
end
local function report(fname)
if optyield then return coroutine.yield(fname) end
table.insert(content, fname)
end
local dir = wx.wxDir()
local function getDir(path)
dir:Open(path)
if not dir:IsOpened() then
if DisplayOutputLn and TR then
DisplayOutputLn(TR("Can't open '%s': %s"):format(path, wx.wxSysErrorMsg()))
end
return
end
-- recursion is done in all folders if requested,
-- but only those folders that match the spec are returned
local _ = wx.wxLogNull() -- disable error reporting; will report as needed
local found, file = dir:GetFirst("*", wx.wxDIR_DIRS)
while found do
if not skip or not file:find(skip) then
local fname = wx.wxFileName(path, file):GetFullPath()
if fname:find(specmask) then table.insert(content, fname..sep) end
-- check if this name already appears in the path earlier;
-- Skip the processing if it does as it could lead to infinite
-- recursion with circular references created by symlinks.
if recursive and select(2, fname:gsub(EscapeMagic(file..sep),'')) <= 2 then
getDir(fname, spec)
end
local fname = wx.wxFileName(path, file):GetFullPath()
if optfolder and ismatch(fname..sep, inmasks, exmasks) then
report((optpath and fname or fname:gsub(pathpatt, ""))..sep)
end
found, file = dir:GetNext()
end
found, file = dir:GetFirst(spec, wx.wxDIR_FILES)
while found do
if not skip or not file:find(skip) then
local fname = wx.wxFileName(path, file):GetFullPath()
table.insert(content, fname)
end
found, file = dir:GetNext()
end
end
getDir(path, spec)
local prefix = '\001' -- prefix to sort directories first
local shadow = {}
for _, v in ipairs(content) do
shadow[v] = (v:sub(-1) == sep and prefix or '')..v:lower()
if recursive and ismatch(fname..sep, nil, exmasks)
and (not optondirectory or optondirectory(fname) ~= false)
-- check if this name already appears in the path earlier;
-- Skip the processing if it does as it could lead to infinite
-- recursion with circular references created by symlinks.
and select(2, fname:gsub(EscapeMagic(file..sep),'')) <= 2 then
table.insert(queue, fname)
end
found, file = dir:GetNext()
end
found, file = dir:GetFirst(spec or "*", wx.wxDIR_FILES)
while found do
local fname = wx.wxFileName(path, file):GetFullPath()
if ismatch(fname, inmasks, exmasks) then
report(optpath and fname or fname:gsub(pathpatt, ""))
end
found, file = dir:GetNext()
end
end
while #queue > 0 do getDir(table.remove(queue)) end
if optyield then return end
if optsort then
local prefix = '\001' -- prefix to sort directories first
local shadow = {}
for _, v in ipairs(content) do
shadow[v] = (v:sub(-1) == sep and prefix or '')..v:lower()
end
table.sort(content, function(a,b) return shadow[a] < shadow[b] end)
end
table.sort(content, function(a,b) return shadow[a] < shadow[b] end)
return content
end
@@ -238,20 +294,45 @@ function FileWrite(file, content)
local file = wx.wxFile(file, wx.wxFile.write)
if not file:IsOpened() then return nil, wx.wxSysErrorMsg() end
file:Write(content, #content)
local ok = file:Write(content, #content) == #content
file:Close()
return true
return ok, not ok and wx.wxSysErrorMsg() or nil
end
function FileRead(file, length)
function FileSize(fname)
if not wx.wxFileExists(fname) then return end
local size = wx.wxFileSize(fname)
-- size can be returned as 0 for symlinks, so check with wxFile:Length();
-- can't use wxFile:Length() as it's reported incorrectly for some non-seekable files
-- (see https://github.com/pkulchenko/ZeroBraneStudio/issues/458);
-- the combination of wxFileSize and wxFile:Length() should do the right thing.
if size == 0 then size = wx.wxFile(fname, wx.wxFile.read):Length() end
return size
end
function FileRead(fname, length, callback)
-- on OSX "Open" dialog allows to open applications, which are folders
if wx.wxDirExists(file) then return nil, "Can't read directory as file." end
if wx.wxDirExists(fname) then return nil, "Can't read directory as file." end
local _ = wx.wxLogNull() -- disable error reporting; will report as needed
local file = wx.wxFile(file, wx.wxFile.read)
local file = wx.wxFile(fname, wx.wxFile.read)
if not file:IsOpened() then return nil, wx.wxSysErrorMsg() end
local _, content = file:Read(length or file:Length())
if type(callback) == 'function' then
length = length or 8192
local pos = 0
while true do
local len, content = file:Read(length)
local res, msg = callback(content) -- may return `false` to signal to stop
if res == false then return false, msg or "Unknown error" end
if len < length then break end
pos = pos + len
file:Seek(pos)
end
return true, wx.wxSysErrorMsg()
end
local _, content = file:Read(length or FileSize(fname))
file:Close()
return content, wx.wxSysErrorMsg()
end
@@ -269,7 +350,7 @@ end
local ok, socket = pcall(require, "socket")
TimeGet = ok and socket.gettime or os.clock
function isBinary(text) return text:find("[^\7\8\9\10\12\13\27\32-\255]") end
function IsBinary(text) return text:find("[^\7\8\9\10\12\13\27\32-\255]") and true or false end
function pairsSorted(t, f)
local a = {}
@@ -288,15 +369,15 @@ end
function FixUTF8(s, repl)
local p, len, invalid = 1, #s, {}
while p <= len do
if p == s:find("[%z\1-\127]", p) then p = p + 1
elseif p == s:find("[\194-\223][\128-\191]", p) then p = p + 2
elseif p == s:find( "\224[\160-\191][\128-\191]", p)
or p == s:find("[\225-\236][\128-\191][\128-\191]", p)
or p == s:find( "\237[\128-\159][\128-\191]", p)
or p == s:find("[\238-\239][\128-\191][\128-\191]", p) then p = p + 3
elseif p == s:find( "\240[\144-\191][\128-\191][\128-\191]", p)
or p == s:find("[\241-\243][\128-\191][\128-\191][\128-\191]", p)
or p == s:find( "\244[\128-\143][\128-\191][\128-\191]", p) then p = p + 4
if s:find("^[%z\1-\127]", p) then p = p + 1
elseif s:find("^[\194-\223][\128-\191]", p) then p = p + 2
elseif s:find( "^\224[\160-\191][\128-\191]", p)
or s:find("^[\225-\236][\128-\191][\128-\191]", p)
or s:find( "^\237[\128-\159][\128-\191]", p)
or s:find("^[\238-\239][\128-\191][\128-\191]", p) then p = p + 3
elseif s:find( "^\240[\144-\191][\128-\191][\128-\191]", p)
or s:find("^[\241-\243][\128-\191][\128-\191][\128-\191]", p)
or s:find( "^\244[\128-\143][\128-\191][\128-\191]", p) then p = p + 4
else
local repl = type(repl) == 'function' and repl(s:sub(p,p)) or repl
s = s:sub(1, p-1)..repl..s:sub(p+1)
@@ -341,14 +422,19 @@ function RequestAttention()
end
end
local messages, lang, counter
function TR(msg, count)
lang = lang or ide.config.language
messages = messages or ide.config.messages
counter = counter or (messages[lang] and messages[lang][0])
local messages = ide.config.messages
local lang = ide.config.language
local counter = messages[lang] and messages[lang][0]
local message = messages[lang] and messages[lang][msg]
-- if there is count and no corresponding message, then
-- get the message from the (default) english language,
-- otherwise the message is not going to be pluralized properly
if count and (not message or type(message) == 'table' and not next(message)) then
message, counter = messages.en[msg], messages.en[0]
end
return count and counter and message and type(message) == 'table'
and message[counter(count)] or message or msg
and message[counter(count)] or (type(message) == 'string' and message or msg)
end
-- wxwidgets 2.9.x may report the last folder twice (depending on how the
@@ -431,6 +517,7 @@ function LoadLuaConfig(filename,isstring)
report(("Error while processing configuration %s: '%s'."):format(msg, err))
end
end
return true
end
function LoadSafe(data)
@@ -464,12 +551,18 @@ function GetEditorWithFocus(...)
return isCtrlFocused(ed) and ed or nil
end
local bnb = ide.frame.bottomnotebook
for _, e in pairs({bnb.shellbox, bnb.errorlog}) do
if isCtrlFocused(e) then return e end
end
local editor = GetEditor()
return isCtrlFocused(editor) and editor or nil
if isCtrlFocused(editor) then return editor end
local nb = ide:GetOutputNotebook()
for p = 0, nb:GetPageCount()-1 do
local ctrl = nb:GetPage(p)
if ctrl:GetClassInfo():GetClassName() == "wxStyledTextCtrl"
and isCtrlFocused(ctrl) then
return ctrl:DynamicCast("wxStyledTextCtrl")
end
end
return nil
end
function GenerateProgramFilesPath(exec, sep)
@@ -516,3 +609,24 @@ function ExpandPlaceholders(msg, ph)
}
return(msg:gsub('%%(%w)', function(p) return ph[p] or def[p] or '?' end))
end
function MergeSettings(localSettings, savedSettings)
for name in pairs(localSettings) do
if savedSettings[name] ~= nil
and type(savedSettings[name]) == type(localSettings[name]) then
if type(localSettings[name]) == 'table'
and next(localSettings[name]) ~= nil then
-- check every value in the table to make sure that it's possible
-- to add new keys to the table and they get correct default values
-- (even though that are absent in savedSettings)
for setting in pairs(localSettings[name]) do
if savedSettings[name][setting] ~= nil then
localSettings[name][setting] = savedSettings[name][setting]
end
end
else
localSettings[name] = savedSettings[name]
end
end
end
end

View File

@@ -8,16 +8,16 @@ local replace = "4"
editor:AppendText(search..search.."\n"..search..search)
ide.frame:ProcessEvent(wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FIND))
ok(findReplace.dialog, "Open Find/Replace dialog.")
ok(findReplace.panel, "Open Find/Replace panel.")
findReplace.findText = search
findReplace:SetFind(search)
ok(findReplace:HasText(), "Update text to search.")
findReplace:FindString()
findReplace:Find()
ok(editor:GetSelectionStart() ~= editor:GetSelectionEnd(), "Find text with Find Next.")
local selend = editor:GetSelectionEnd()
findReplace:FindString()
findReplace:Find()
is(editor:GetSelectionStart(), selend, "Find Next doesn't skip consecutive matches.")
editor:GotoPos(0) -- reset current selection
@@ -32,26 +32,26 @@ ide.frame:ProcessEvent(wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FIND
is(editor:GetSelectionStart(), selend, "Quick Find finds next match.")
-- check that text in "find" control is checked against selection with replacing
findReplace.findText = "something else"
findReplace.replaceText = replace
findReplace:SetFind("something else")
findReplace:SetReplace(replace)
findReplace.foundString = true
findReplace:ReplaceString()
findReplace:Replace()
is(select(2, editor:GetText():gsub(search, search)), 4, "Replace doesn't replace selection that doesn't match 'find' text.")
-- restore position and selection
editor:GotoPos(4) -- reset current selection
findReplace.findText = search
findReplace:FindString()
findReplace:SetFind(search)
findReplace:Find()
-- replace the text once
findReplace:ReplaceString()
findReplace:Replace()
local _, replacements = editor:GetText():gsub(replace, replace)
is(replacements, 1, "Replace replaces once.")
-- replace the current text and to the end of file
editor:GotoPos(3)
findReplace.fWrap = false
findReplace:ReplaceString(true)
findReplace:GetFlags().Wrap = false
findReplace:Replace(true)
local _, replacements = editor:GetText():gsub(replace, replace)
is(replacements, 3, "Replace All without wrapping replaces to the end of file.")
@@ -61,14 +61,41 @@ is(editor:GetText(), expected, "Replace All with Wrap Around result is as expect
-- start after the match to test wrapping
editor:AppendText("\n"..search..search)
editor:GotoPos(3)
findReplace.fWrap = true
findReplace:ReplaceString(true)
findReplace:GetFlags().Wrap = true
findReplace:Replace(true)
ok(not editor:GetText():find(search), "Replace All with Wrap Around replaces everything.")
local expected = replace..replace.."\n"..replace..replace.."\n"..replace..replace
is(editor:GetText(), expected, "Replace All without Wrap Around result is as expected.")
-- check that the replacement only happens in the matched text in preview
editor:SetText("1: 123")
findReplace:SetFind("1")
findReplace:SetReplace("9")
findReplace:Replace(true, editor)
ok(editor:GetText():find("923") ~= nil, "Replace in preview replaces matched text.")
ok(editor:GetText():find("^1:") ~= nil, "Replace in preview doesn't replace line numbers.")
editor:SetText("")
editor:AppendText([[
t/1-findreplace.lua
99999: some text
]])
editor.searchpreview = true
editor.replace = true
local FILE_MARKER = ide:GetMarker("searchmatchfile")
editor:MarkerAdd(0, FILE_MARKER)
ide:GetDocument(editor):Save()
is(editor:GetText():match("Updated %d"), "Updated 0", "Replace fails on invalid line numbers.")
findReplace:SetFind("something")
findReplace:Show() -- set focus on the find
ide.frame:ProcessEvent(wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_CUT))
ok(findReplace:GetFind() == nil, "`Cut` command cuts content of the `Find` control in the search panel.")
-- cleanup
ide.findReplace.dialog:Hide()
findReplace:Hide()
while editor:CanUndo() do editor:Undo() end
ide:GetDocument(editor):SetModified(false)
ClosePage()

View File

@@ -25,6 +25,15 @@ ok(limit(10000, function() CreateAutoCompList(editor, "smth:") end),
ok(pcall(CreateAutoCompList, editor, "%1000"),
"Auto-complete doesn't trigger 'invalid capture index' on '%...'.")
editor:SetText('')
editor:AddText([[
local tweaks = require("tweaks")
local require = tweaks.require
local modules = tweaks.modules]])
ok(limit(10000, function() CreateAutoCompList(editor, "tweaks.modules") end),
"Auto-complete doesn't loop for recursive 'modules'.")
editor:SetText('')
editor:AddText([[
result = result.list[1] --> "does the test" test
@@ -52,6 +61,15 @@ editor:AddText([[
ok(limit(10000, function() EditorAutoComplete(editor) end),
"Auto-complete doesn't loop for classes that reference '...'.")
editor:SetText('')
editor:AddText([[
buf = str
str = buf..str
buf = buf..]])
ok(limit(10000, function() EditorAutoComplete(editor) end),
"Auto-complete doesn't loop for string concatenations with self-reference.")
-- create a valuetype self-reference
-- this is to test "s = Scan(); s:" fragment
ide.apis.lua.baselib.io.valuetype = "io"
@@ -78,8 +96,29 @@ ok(c == 1,
("Auto-complete doesn't offer duplicates with the same name ('%s').")
:format(ac))
for k, v in pairs({
ree = "repeat require",
ret = "return repeat rawget rawset",
}) do
local ac = CreateAutoCompList(editor, k)
is(ac, v,
("Auto-complete for '%s' offers results in the expected order."):format(k))
end
ProjectSetInterpreter(interpreter)
editor:SetText('')
editor:AddText('local t = require("table")\nt.')
local ac = CreateAutoCompList(editor, "t.")
ok(ac ~= nil and ac:find("concat") ~= nil,
"Auto-complete recognizes variables set based on `require`.")
editor:SetText('')
editor:AddText('local table = require("io")\nt = require("table")\nt.')
local ac = CreateAutoCompList(editor, "t.")
ok(ac ~= nil and ac:find("concat") ~= nil,
"Auto-complete recognizes variables set based on `require` even when it's re-assigned.")
editor:SetText('')
editor:AddText('print(1,io.')
@@ -94,6 +133,23 @@ ok(value and value:find("close"), "Auto-complete is shown after comma.")
ok(not (CreateAutoCompList(editor, "pri.") or ""):match('print'),
"Auto-complete doesn't offer 'print' after 'pri.'.")
editor:SetText('')
editor:AddText('local name = "abc"; local namelen = #name')
IndicateAll(editor)
EditorAutoComplete(editor)
local isactive = editor:AutoCompActive()
editor:AutoCompCancel() -- cleanup
ok(not isactive, "Auto-complete is not shown if typed sequence matches one of the options.")
editor:SetText('')
editor:AddText(' -- a = io\na:')
editor:Colourise(0, -1) -- set proper styles
editor.assignscache = false
ok((CreateAutoCompList(editor, "a:") or "") == "",
"Auto-complete doesn't process assignments in comments.")
editor:SetText('')
editor:AddText('-- @tparam string foo\n')
editor.assignscache = false
@@ -108,6 +164,25 @@ editor.assignscache = false
ok((CreateAutoCompList(editor, "foo:") or ""):match('byte'),
"Auto-complete offers methods for variable defined as '@param[type=string]'.")
local strategy = ide.config.acandtip.strategy
ide.config.acandtip.strategy = 1
editor:SetText('')
editor:AddText('local value\nprint(va')
IndicateAll(editor)
local status, res = pcall(CreateAutoCompList, editor, "va")
ok(status and (res or ""):match('value'),
"Auto-complete offers methods for strategy=1' (1/2).")
editor:SetText('')
editor:AddText('local value\nprint(va')
local status, res = pcall(CreateAutoCompList, editor, "va")
ok(status and (res or ""):match('value'),
"Auto-complete offers methods for strategy=1' (2/2).")
-- cleanup
ide.config.acandtip.strategy = strategy
ide:GetDocument(editor).isModified = false
ClosePage()

View File

@@ -8,8 +8,8 @@ editor:AddText(([[
3]]):format(line))
local findReplace = ide.findReplace
findReplace.findText = line
findReplace:FindString()
findReplace:SetFind(line)
findReplace:Find()
ide.frame:ProcessEvent(wx.wxCommandEvent(
wx.wxEVT_COMMAND_MENU_SELECTED, ID_COMMENT))
@@ -18,8 +18,8 @@ local text = editor:GetText()
ok(text:find(comment..line) and not text:find(comment.."3"),
"One-line selection is commented.")
findReplace.findText = "--"..line
findReplace:FindString()
findReplace:SetFind("--"..line)
findReplace:Find()
editor:SetCurrentPos(editor:GetLength())
ide.frame:ProcessEvent(wx.wxCommandEvent(
@@ -29,7 +29,7 @@ text = editor:GetText()
ok(text:find(comment.." "..comment..line) and text:find(comment.."3"),
"Commented and uncommented lines are commented.")
findReplace:FindString()
findReplace:Find()
editor:SetCurrentPos(editor:GetLength())
ide.frame:ProcessEvent(wx.wxCommandEvent(

View File

@@ -1,5 +1,5 @@
local output = ide.frame.bottomnotebook.errorlog
local shell = ide.frame.bottomnotebook.shellbox
local output = ide:GetOutput()
local shell = ide:GetConsole()
local text = output:GetText()
output:SetReadOnly(false)

94
t/8-file.lua Normal file
View File

@@ -0,0 +1,94 @@
ok(not LoadFile(''), "Don't load file with an empty name.")
ok(not LoadFile("\r\n "), "Don't load file with name that only has whitespaces.")
ok(not LoadFile('t'), "Don't load file with directory as the name (1/2).")
ok(not LoadFile('./'), "Don't load file with directory as the name (2/2).")
ok(pcall(function() LoadFile('some-nonexisting-name') end), "Load non-existing files.")
ClosePage()
local fullpath = MergeFullPath(wx.wxFileName.GetCwd(), 't/test.lua')
ok(ActivateFile('t/test.lua:10'), "Load file:line.")
ok(not ActivateFile('t/foo.bar:10'), "Doesn't load non-existent file:line.")
ok(ActivateFile(fullpath..':10'), "Load fullpath/file:line.")
ok(not ActivateFile(fullpath..'/foo.bar:10'), "Doesn't load non-existent fullpath/file:line.")
ClosePage() -- close activated file
local luas = FileSysGetRecursive('.', true, '*.lua')
local more = FileSysGetRecursive('.', true, '*.lua; *.more')
cmp_ok(#luas, '>', 0, "List of files is returned for '.lua' extension")
is(#luas, #more, "List of files is returned for '.lua' and '.lua; .more' is the same.")
local luasnodir = FileSysGetRecursive('.', true, '*.lua', {folder = false})
is(#luas, #luasnodir, "List of files is returned for '.lua' does not include folders.")
local fcopy = "t/copy.lua!"
ok(FileCopy("t/test.lua", fcopy), "File copied successfully.")
local copy = FileRead(fcopy)
ok(copy, "Copied file exists.")
ok(copy == FileRead("t/test.lua"), "Copy matches the original.")
local luasmore = FileSysGetRecursive('.', true, '*.lua')
is(#luasmore, #luas, ("Mask '.lua' doesn't match '%s'"):format(fcopy))
os.remove(fcopy)
ok(not FileRead(fcopy), "File deleted successfully.")
local exlist = ide.config.excludelist
local path = 'zbstudio/res/16'
local bins0 = FileSysGetRecursive(path, true, '*.*')
local bins1 = FileSysGetRecursive(path, true, '*.png')
ok(#bins0 > 1, "'*.*' mask retrieves binary files.")
ide.config.excludelist = ".png/"
local bins = FileSysGetRecursive(path, true, '*.*')
is(#bins, #bins0, "Excluding '.png/' still returns 'png' files.")
ide.config.excludelist = ".png"
bins = FileSysGetRecursive(path, true, '*.*')
is(#bins, 1, "Excluding '.png' skips 'png' files.")
ide.config.excludelist = "*.png"
bins = FileSysGetRecursive(path, true, '*.*')
is(#bins, 1, "Excluding '*.png' skips 'png' files.")
ide.config.excludelist = "FIND*.png"
bins = FileSysGetRecursive(path, true, '*.png')
ok(#bins < #bins1, "Excluding `FIND*.png` filters out files with that mask.")
ide.config.excludelist = "*.png"
bins = FileSysGetRecursive(path, true, 'FIND*.png')
ok(#bins < #bins1, "Requesting `FIND*.png` filters specific files.")
ide.config.excludelist = ""
local bina = FileSysGetRecursive('.', true, '*.lua')
ide.config.excludelist = "src"
bins = FileSysGetRecursive('.', true, '*.lua')
is(#bins, #bina, "Excluding `src` still returns the content of `src` folder.")
ide.config.excludelist = "src/"
bins = FileSysGetRecursive('.', true, '*.lua')
ok(#bins < #bina, "Excluding `src/` skips the content of `src` folder.")
ide.config.excludelist = "src\\"
local nosrc = #bins
bins = FileSysGetRecursive('.', true, '*.lua')
ok(#bins < #bina, "Excluding `src\\` skips the content of `src` folder.")
is(#bins, nosrc, "Excluding `src\\` and `src/` produce the same result.")
nosrc = #FileSysGetRecursive('.', true, '*.lua', {folder = false})
ide.config.excludelist = "src/**.lua"
bins = FileSysGetRecursive('.', true, '*.lua', {folder = false})
is(#bins, nosrc, "Excluding `src/**.lua` skips lua files in subfolders.")
ide.config.excludelist = ""
local editor = #FileSysGetRecursive('src/editor', true, '*.lua', {folder = false})
ide.config.excludelist = "src/*.lua"
bins = FileSysGetRecursive('.', true, '*.lua', {folder = false})
is(#bins, nosrc+editor, "Excluding `src/*.lua` skips lua files only in `src` folder.")
ide.config.excludelist = exlist
bins = FileSysGetRecursive(path, true, '*', {skipbinary = true})
is(#bins, 1, "Default mask excludes `png` files with `skipbinary`.")
bins = FileSysGetRecursive("bin", true, '*.exe', {folder = false})
is(bins, {}, "Default mask excludes `*.exe` files.")

43
t/9-misc.lua Normal file
View File

@@ -0,0 +1,43 @@
for _, ln in ipairs({'cn', 'de', 'eo', 'pt-br', 'es', 'fr', 'it', 'ru'}) do
local func = loadfile(("cfg/i18n/%s.lua"):format(ln))
ok(type(func) == 'function' and func() ~= nil, ("Loaded '%s' language file."):format(ln))
end
local fixed, invalid = FixUTF8("+\128\129\130+\194\127+", "+")
is(fixed, "++++++\127+", "Invalid UTF8 is fixed (1/2).")
is(#invalid, 4, "Invalid UTF8 is fixed (2/2).")
local UTF8s = {
"ABCDE", -- 1 byte codes
"\194\160\194\161\194\162\194\163\194\164", -- 2 byte codes
"\225\160\160\225\161\161\225\162\162\225\163\163\225\164\164", -- 3 byte codes
}
for n, code in ipairs(UTF8s) do
is(FixUTF8(code), code, ("Valid UTF8 code is left unmodified (%d/%d)."):format(n, #UTF8s))
end
local editor = NewFile()
for _, tst in ipairs({
"_ = .1 + 1. + 1.1 + 0xa",
"_ = 1e1 + 0xa.ap1",
"_ = 0xabcULL + 0x1LL + 1LL + 1ULL",
"_ = .1e1i + 0x1.1p1i + 0xa.ap1i",
}) do
ok(AnalyzeString(tst) ~= nil,
("Numeric expression '%s' can be checked with static analysis."):format(tst))
editor:SetText(tst)
editor:ResetTokenList()
while IndicateAll(editor) do end
local defonly = true
for _, token in ipairs(GetEditor():GetTokenList()) do
if token.name ~= '_' then defonly = false end
end
ok(defonly == true, ("Numeric expression '%s' can be checked with inline parser."):format(tst))
end
ide:GetDocument(editor).isModified = false
ClosePage()

View File

@@ -1,2 +1 @@
@echo off
zbstudio -cfg t/test.lua
@zbstudio -cfg t/test.lua

View File

@@ -21,6 +21,10 @@ ide.app.postinit = function()
debug.sethook(function() error("exceeded") end, "", limit)
local ok, res = pcall(func)
debug.sethook()
if ok and ide:GetOutput():GetText():find("Auto-complete was aborted") then
ok, res = false, "Auto-complete was aborted"
ide:GetOutput():SetText('')
end
return ok, res
end

View File

@@ -14,6 +14,7 @@ return binpath and {
local myMenu = wx.wxMenu{
{ ID "glslc.compile.input", "&Custom Args", "when set a popup for custom compiler args will be envoked", wx.wxITEM_CHECK },
{ ID "glslc.compile.separable", "Separable", "when set separable programs are used", wx.wxITEM_CHECK },
{ ID "glslc.compile.preproc", "Preprocess File", "Pre-process the files only, resolving #inlcudes", wx.wxITEM_CHECK },
{ },
{ ID "glslc.compile.ext", "Compile from .ext\tCtrl-1", "Compile based on file extension" },
{ ID "glslc.compile.all", "Link multiple .ext\tCtrl-2", "Tries to link multiple shaders based on filename" },
@@ -31,6 +32,7 @@ return binpath and {
local data = {}
data.customarg = false
data.separable = false
data.preproc = false
data.custom = ""
data.domains = {
[ID "glslc.compile.vertex"] = 1,
@@ -312,7 +314,11 @@ return binpath and {
data.separable = event:IsChecked()
end)
frame:Connect(ID "glslc.compile.preproc",wx.wxEVT_COMMAND_MENU_SELECTED,
function(event)
data.preproc = event:IsChecked()
end)
-- Compile
local function evCompile(event)
local filename,info = GetEditorFileAndCurInfo()
@@ -346,7 +352,11 @@ return binpath and {
end
local function getCompileArg(filename,domain)
return "-profile "..data.domainprofiles[domain]..' "'..filename:GetFullPath()..'" '
local str = ""
if (data.preproc) then
str = '-P "'..filename:GetPath(wx.wxPATH_GET_VOLUME + wx.wxPATH_GET_SEPARATOR).."_"..filename:GetFullName()..'" '
end
return str.."-profile "..data.domainprofiles[domain]..' "'..filename:GetFullPath()..'" '
end
@@ -408,6 +418,7 @@ return binpath and {
local cmdline = binpath.."/glslc.exe "
cmdline = cmdline..(args and args.." " or "")
cmdline = cmdline..(data.preproc and "-E " or "")
cmdline = cmdline..(data.separable and "-separable " or "")
cmdline = cmdline.."-o "..outname.." "
cmdline = cmdline..compileargs
@@ -431,7 +442,7 @@ return binpath and {
return str,postfunc
end
local wdir = filename:GetPath()
local wdir = filename:GetPath(wx.wxPATH_GET_VOLUME)
-- run compiler process
CommandLineRun(cmdline,wdir,true,nil,compilecallback)

Binary file not shown.

View File

@@ -2,7 +2,8 @@
ZBS_PATH=${0%/*/*}
if [ ! -d $ZBS_PATH ]; then ZBS_PATH=${PWD%/*}; fi
export DYLD_LIBRARY_PATH="$ZBS_PATH/ZeroBraneStudio/bin"
if [[ ! -e $DYLD_LIBRARY_PATH/libedit.3.dylib && ! -e /usr/lib/libedit.3.dylib ]]
then ln -s /usr/lib/libedit.2.dylib $DYLD_LIBRARY_PATH/libedit.3.dylib; fi
ZBS_BIN="$ZBS_PATH/ZeroBraneStudio/bin"
if [[ ! -e "$ZBS_BIN/libedit.3.dylib" && ! -e /usr/lib/libedit.3.dylib ]]
then ln -s /usr/lib/libedit.2.dylib "$ZBS_BIN/libedit.3.dylib"; fi
export DYLD_LIBRARY_PATH="$ZBS_BIN:${DYLD_LIBRARY_PATH}"
(cd "$ZBS_PATH/ZeroBraneStudio"; bin/lua src/main.lua zbstudio "$@")

View File

@@ -31,6 +31,7 @@ unhidewindow = { -- allow unhiding of GUI windows
ConsoleWindowClass = 2,
-- ignore the following windows when "showing all"
IME = 0,
wxDisplayHiddenWindow = 0,
['MSCTFIME UI'] = 0,
-- GLUT/opengl/SDL applications (for example, moai or love2d)
GLUT = 1, FREEGLUT = 1, SDL_app = 1,

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Some files were not shown because too many files have changed in this diff Show More