Compare commits

..

911 Commits
0.80 ... 1.30

Author SHA1 Message Date
Paul Kulchenko
a455ed64f7 Updated marker text to strip EOL to show markers as one line on Linux (#419). 2016-01-21 13:34:56 -08:00
Paul Kulchenko
aff0355d7d Updated CHANGELOG for 1.30. 2016-01-21 13:03:30 -08:00
Paul Kulchenko
af16a8a0ee Updated comment with clarification on editor UPDATEUI event handling. 2016-01-20 17:06:01 -08:00
Paul Kulchenko
0b5e5066fd Updated interpreter menu to use a clone to avoid Linux assertion.
Opening the popup menu throws the following assertion (as the shown menu is a submenu):
./src/common/menucmn.cpp(750): assert "!GetParent()" failed in SetInvokingWindow():
should only be called for top level popup menus
2016-01-19 15:30:42 -08:00
Paul Kulchenko
3a52021c82 Fixed error on marker navigation after removing all markers in a file (#419). 2016-01-19 15:29:46 -08:00
Paul Kulchenko
d0f522b283 Added CloneMenu package method (#166). 2016-01-18 21:49:05 -08:00
Leo Bartoloni
4012455795 Updated Italian Translation (closes #586). 2016-01-16 09:47:23 -08:00
Iñigo Sola Núñez
9b426ac548 Spanish translation updated 2016-01-16 12:21:30 +01:00
Paul Kulchenko
371bc771e4 Added Torch and Redis debugging links. 2016-01-15 08:30:58 -08:00
Yonaba
75d9eaae52 Updated french translation as of df381b5 (see #70) 2016-01-15 01:04:09 +00:00
Paul Kulchenko
df381b57b8 Updated Russian translation (#70). 2016-01-14 11:08:33 -08:00
Paul Kulchenko
1d2077007a Updated translation files with new messages (#70). 2016-01-14 10:16:48 -08:00
Paul Kulchenko
06e2b14fd1 Updated LuaForWindows interpreter to accept command line parameters (#582). 2016-01-13 10:37:35 -08:00
Paul Kulchenko
6079ea5038 Updated LuaForWindows interpreter to properly pass arg to the script (closes #582). 2016-01-13 10:36:54 -08:00
Paul Kulchenko
16fc6a75d0 Replaced EditorIsModified with document method calls. 2016-01-12 14:05:17 -08:00
Paul Kulchenko
7e67e38b8e Added IsNew method for documents (#166). 2016-01-12 13:45:00 -08:00
Paul Kulchenko
ba3791bb44 Updated GetDocument to not fail when no editor is passed. 2016-01-12 13:44:24 -08:00
Paul Kulchenko
134a6b8dbb Updated tests to use public API. 2016-01-12 09:50:14 -08:00
Paul Kulchenko
05d2cc8f31 Added breakpoint/bookmark toggling tests. 2016-01-12 09:49:29 -08:00
Paul Kulchenko
481bbfbc26 Fixed showing cursor in search panel fields after file search.
This puts a workaround in place to compensate the cursor not being shown
as the result of earlier commit that destroys the temporary editor object
(45a49246), which should have no impact. Noticed on Windows.
2016-01-11 19:45:56 -08:00
Paul Kulchenko
3e8b2ca3b0 Added Print method and updated core components to use it during launch. 2016-01-10 21:46:37 -08:00
Paul Kulchenko
f1a9d53813 Updated live coding to group number updates together for Undo/Redo purposes.
These are the updates that are done with mouse scroller over numbers and all
these changes between mouse click and release are now grouped together.
2016-01-09 09:44:07 -08:00
Paul Kulchenko
88078076ef Updated CHANGELOG with markers panel and other recent changes. 2016-01-06 17:33:03 -08:00
Paul Kulchenko
f60f545fa5 Merge branch 'markers' 2016-01-06 15:54:39 -08:00
Paul Kulchenko
49d514f321 Added skipping UPDATE_CONTENT events on cursor blinks in UPDATEUI (#419). 2016-01-06 15:49:24 -08:00
Paul Kulchenko
3fafa96849 Switched to per-editor tracking in UPDATEUI event. 2016-01-06 10:01:35 -08:00
Paul Kulchenko
c274424147 Updated breakpoint shortcut message to reference a proper shortcut on OSX (#419). 2016-01-06 08:45:37 -08:00
Paul Kulchenko
e7b81bd36c Fixed accepting explicit value in MarkerToggle (#166). 2016-01-05 20:12:03 -08:00
Paul Kulchenko
4b7471f518 Improved compatibility when running the IDE using Lua 5.2. 2016-01-05 20:02:14 -08:00
Paul Kulchenko
079b1cf22a Added preserving markers after sorting/reindentation operations. 2016-01-05 20:00:06 -08:00
Paul Kulchenko
e21c4b63af Updated string formatting for consistency. 2016-01-05 19:55:17 -08:00
Paul Kulchenko
778d41bb49 Added editor MarkerGetAll method (#166). 2016-01-05 19:46:21 -08:00
Paul Kulchenko
8dbeb2b9c6 Fixed reapplying markers after reloading modified file (#419). 2016-01-05 14:58:09 -08:00
Paul Kulchenko
439b322b14 Fixed setting interpreter after launching with non-existing project. 2016-01-04 16:56:27 -08:00
Paul Kulchenko
be084357fc Updated and cleaned up comments. 2016-01-04 16:54:54 -08:00
Paul Kulchenko
daa8fbd32a Added example on how to set breakpoint shortcuts used in v1.20 or earlier (#419). 2016-01-03 16:55:33 -08:00
Paul Kulchenko
c48c08742a Fixed showing package errors during project switches (#555). 2016-01-03 16:45:34 -08:00
Paul Kulchenko
4f8b51613d Fixed include command not checking needed packages folders to load from (#555). 2016-01-02 22:20:57 -08:00
Paul Kulchenko
aae2cc7d22 Added processing of include command without extension in config (#555). 2016-01-02 22:04:23 -08:00
Paul Kulchenko
090a69e693 Added reporting of missing packages when using package command in config (#555). 2016-01-02 17:15:37 -08:00
Paul Kulchenko
3ea59b261f Added processing of package command without extension in config (#555). 2016-01-02 17:15:30 -08:00
Paul Kulchenko
8f4a87264f Refactored File menu generation to use AttachMenu. 2016-01-01 11:54:27 -08:00
Paul Kulchenko
2239f1d3ab Added hint on using updated breakpoint shortcut (#419). 2015-12-31 20:31:43 -08:00
Paul Kulchenko
6326066d8e Updated Toggle Breakpoint and Break shortcuts for consistency (#419). 2015-12-30 21:06:01 -08:00
Paul Kulchenko
8aac298197 Updated 'Toggle Breakpoint' message for consistency (#419). 2015-12-30 21:05:46 -08:00
Paul Kulchenko
d1836daa92 Added breakpoint prev/next navigation (#419). 2015-12-30 21:05:18 -08:00
Paul Kulchenko
d966117cf3 Added AttachMenu package method (#166). 2015-12-30 19:56:52 -08:00
Paul Kulchenko
e78ef13df7 Added MarkerToggle editor method (#166). 2015-12-30 10:34:19 -08:00
Paul Kulchenko
bc93fc7c27 Added MarkerGotoNext and MarkerGotoPrev editor methods (#166). 2015-12-30 10:31:19 -08:00
Paul Kulchenko
1f5ec24faa Added skipping activating editor tab when removing markers from Markers panel (#419). 2015-12-29 21:48:01 -08:00
Paul Kulchenko
7301184475 Added local menu to the Markers panel to toggle markers (#419). 2015-12-29 10:21:41 -08:00
Paul Kulchenko
88233991ea Added sorting of files in the Markers panel (#419). 2015-12-29 10:21:01 -08:00
Paul Kulchenko
3f938a97b8 Added saving/restoring bookmarks and breakpoints (#419). 2015-12-28 19:10:07 -08:00
Paul Kulchenko
b536ef43e6 Added BookmarkToggle method to the editor (#166). 2015-12-28 18:20:10 -08:00
Paul Kulchenko
41e6739cb0 Added BreakpointToggle method to the editor (#166). 2015-12-28 18:01:32 -08:00
Paul Kulchenko
c7402cbb58 Added toggling of bookmark/breakpoint marker from the Markers panel (#419). 2015-12-27 15:49:08 -08:00
Paul Kulchenko
d39e64c570 Added markers panel to show bookmarks and breakpoints (#419). 2015-12-28 15:32:27 -08:00
Paul Kulchenko
5c10ee8d6f Removed misleading comment. 2015-12-25 15:01:39 -08:00
Paul Kulchenko
029a1bc9f6 Added onEditorMarkerUpdate event (#166). 2015-12-24 18:32:34 -08:00
Paul Kulchenko
fd9395c498 Updated love2d API for v0.10.0 (#247). 2015-12-23 10:07:42 -08:00
Paul Kulchenko
46b42b5726 Updated script to process new love2d API format (with variants). 2015-12-23 10:00:14 -08:00
Paul Kulchenko
073586cbcd Added unfolding fragments that include activated line during debugging (closes #575). 2015-12-22 09:51:29 -08:00
Paul Kulchenko
b1876c13a4 Added skipping comment when none is provided in the Stack (instead of showing nil). 2015-12-20 17:36:29 -08:00
Paul Kulchenko
f436e8748a Fixed resetting the default interpreter after selecting a non-existent one. 2015-12-19 20:39:46 -08:00
Paul Kulchenko
b6eb057091 Updated showing filename of the missing interpreter in the project list (#570). 2015-12-18 12:53:15 -08:00
Paul Kulchenko
e229c2f9b6 Fixed restoring project-specific interpreter when switching projects (#570). 2015-12-18 12:52:03 -08:00
Paul Kulchenko
c46542dbe6 Fixed restoring project-specific interpreter after relaunch (fixes #570). 2015-12-18 12:50:18 -08:00
Paul Kulchenko
97c7bb96e7 Reorganized restoring settings to make current file better visible in the project tree. 2015-12-18 10:38:29 -08:00
Paul Kulchenko
5da31d21a5 Updated CHANGELOG with recent changes. 2015-12-17 12:36:39 -08:00
Paul Kulchenko
e8d459610c Added skipping comments in the lexer to avoid splitting statements (fixes #568). 2015-12-15 12:11:29 -08:00
Paul Kulchenko
68b4b4290c Updated build script to build lfs on Windows (closes #566). 2015-12-14 19:51:22 -08:00
Paul Kulchenko
285f4d18e7 Added GetExePath method for the interpreter (#166). 2015-12-12 17:31:46 -08:00
Paul Kulchenko
78e525533f Added package GetFilePath method (#166). 2015-12-12 17:21:06 -08:00
Paul Kulchenko
46776157af Fixed expanding sub-trees in project directory when set to the disk root on Windows.
This issue was caused by a combination of factors:
(1) the project directory is shown as 'd:\abc\xyz' (without trailing slash),
but root directories are shown as 'd:\' (with trailing slash);
(2) project dir is concatenated with a subdir, which produces 'd:\\abc\xyz' folder;
(3) wxwidgets normalizes that path as 'd:\<insert-current-directory-here>\abc\xyz',
which doesn't exist, and as the result the directory doesn't expand when requested.
2015-12-11 09:06:36 -08:00
Paul Kulchenko
f11715fe0e Updated config sample with a minor fix. 2015-12-09 19:41:14 -08:00
Paul Kulchenko
c3d64c7a76 Fixed search navigation after selecting one variable instance (fixes #565). 2015-12-07 12:54:21 -08:00
Paul Kulchenko
f1bb792287 Fixed editing fragments in folded text (follow-up to d2ddc96a; #564). 2015-12-06 21:28:13 -08:00
Paul Kulchenko
52c2bf4dec Fixed editing multiple selections when selection is in folded fragments (fixes #564). 2015-12-06 21:27:53 -08:00
Paul Kulchenko
6516c6460e Optimized path generation in directory traversal (#260).
This also fixes an issue with results of the traversal with removed path
that produced incorrect results when non-native separators are used (for
example, when `a/b` is used on Windows).
2015-12-05 15:20:56 -08:00
Paul Kulchenko
c621c66177 Added showhiddenfiles option to show hidden files in the filetree (closes #561). 2015-12-04 16:09:50 -08:00
Paul Kulchenko
074eead909 Added package RemovePanel method (#166). 2015-12-02 11:10:34 -08:00
Paul Kulchenko
8a8210272b Added loading of custom package from the config file (closes #555).
Packages can be loaded as `package "file.lua"` or `package "directory/"`.
2015-12-01 21:50:36 -08:00
Paul Kulchenko
b5e6f50f53 Added Alt-Enter to "replace all" when replace field is selected in the search panel. 2015-11-30 23:12:17 -08:00
Paul Kulchenko
4261d4927e Added setting project directory to the selected directory to the project tree menu. 2015-11-29 22:26:27 -08:00
Paul Kulchenko
ca87b9a721 Updated build scripts to use own wxwidgets repository to better sync build versions (#260). 2015-11-28 21:50:07 -08:00
Paul Kulchenko
927a7535a0 Updated build scripts to remove an error from the check for missing methods in wxlua.
The check is not necessary and it leads to a memory leak in wxlua.
2015-11-26 15:56:36 -08:00
Paul Kulchenko
a62f5ff309 Removed a workaround for wxlua build issue as it's no longer needed. 2015-11-26 15:54:11 -08:00
Paul Kulchenko
d0e403c5eb Updated README to remove outdated .ini reference from Estrela section. 2015-11-25 17:33:37 -08:00
Paul Kulchenko
cedf05d94a Updated instructions in the estrela configuration file to reference include command. 2015-11-25 17:32:21 -08:00
Paul Kulchenko
8c25559745 Added ignoring Ctrl-CapsLock in the editor that was shrinking the font. 2015-11-24 19:51:24 -08:00
Paul Kulchenko
cece22a490 Updated luasec build script to use the latest openSSL version (1.0.2d). 2015-11-24 13:54:44 -08:00
Paul Kulchenko
924c7c09dc Added recursive processing of configuration files with relative names (#555). 2015-11-23 16:58:11 -08:00
Paul Kulchenko
b0d806a17b Merge branch 'wxstc-raw' 2015-11-23 15:45:02 -08:00
Paul Kulchenko
018dbd73a2 Updated UTF-8 validation to use wxwidgets libraries for better performance (#556). 2015-11-23 15:44:37 -08:00
Paul Kulchenko
1905193c5e Added moving cursor to the end of the pasted fragment (#556). 2015-11-23 15:44:36 -08:00
Paul Kulchenko
2ca6d9cd2a Fixed copy/paste on Windows when UTF-8 invalid strings end in new line (#260, #556). 2015-11-23 15:44:36 -08:00
Paul Kulchenko
d809befe80 Updated clipboard copy to make non-UTF-8 data to work on OSX (#260, #556). 2015-11-23 15:44:35 -08:00
Paul Kulchenko
02fb9c1b0c Updated Console history to work with UTF-8 invalid strings (#260, #556). 2015-11-23 15:44:35 -08:00
Paul Kulchenko
5350f4e665 Added workaround for copying UTF-8 invalid data to/from clipboard (#260, #556). 2015-11-23 15:44:34 -08:00
Paul Kulchenko
1e0e37aa5a Updated Ctrl/Shift-Ins and Shift-Del to work in all editors (#260, #556). 2015-11-23 15:44:34 -08:00
Paul Kulchenko
accce7df2f Updated Output and Console to display invalid characters as is (#260, #556). 2015-11-23 15:44:33 -08:00
Paul Kulchenko
0d6d6aecb8 Updated config sample to remove no longer needed G references. 2015-11-22 19:09:17 -08:00
Paul Kulchenko
069e78cdde Updated config processing to simplify access to global functions. 2015-11-21 19:25:28 -08:00
Paul Kulchenko
1d9902c74e Updated config processing to allow use of package field. 2015-11-21 19:24:40 -08:00
Paul Kulchenko
5bd6a52963 Added CloseAll and CloseAllExcept document methods (#166). 2015-11-21 18:18:00 -08:00
Paul Kulchenko
9c08a120f2 Improved handling of names with Unicode chars during debugging on Windows (#559). 2015-11-20 09:58:46 -08:00
Paul Kulchenko
71d2318303 Updated windows launcher code to use manifest for hidpi awareness. 2015-11-19 10:15:06 -08:00
Paul Kulchenko
c4701b590f Added warning in the interpreter when a short name not generated on Windows (closes #559). 2015-11-19 10:14:01 -08:00
Paul Kulchenko
d219aeb2b5 Moved wxlua version number to a better location in the About screen. 2015-11-19 10:10:54 -08:00
Paul Kulchenko
d605bab828 Added check for recover record to be fully present. 2015-11-19 10:10:54 -08:00
Paul Kulchenko
dfee96e1d7 Added using *Raw methods when available for handling of invalid UTF-8 chars (#260, #556). 2015-11-16 20:54:09 -08:00
Paul Kulchenko
d422fe52cb Updated AddConfig method to accept single filename in addition to a list (#166). 2015-11-16 15:40:44 -08:00
Paul Kulchenko
bab5f069d9 Limited requesting attention on debugging starts to happen when debugging is suspended.
Related tickets: #449, #454, #548
2015-11-14 14:19:22 -08:00
Paul Kulchenko
d1f755e38c Extended PATH on OSX with /usr/local/bin to provide access to tools in that folder (#356). 2015-11-13 14:36:11 -08:00
Paul Kulchenko
8fbf0650a0 Fixed debugging of Busted scripts (closes #552). 2015-11-10 12:53:48 -08:00
Paul Kulchenko
7def69b96e Switched to using KEY event in search panel to make it work with wxwidgets 3.1+ (#260). 2015-11-09 18:33:21 -08:00
Paul Kulchenko
1f573639b1 Updated event handling to better handle events that are executed once (#260).
This update allow events that are handled once to be reset from the
handler (as they are removed before the handler is called).

This update also fixes the issue with an idle event being called from a
handler for on-idle event, which happens with wxwidgets 3.1+.
2015-11-08 22:47:31 -08:00
Paul Kulchenko
0c178d12b3 Updated sample package events for more accurate output. 2015-11-08 22:38:21 -08:00
Paul Kulchenko
c92fbe1619 Updated default size/position for the first launch without saved settings. 2015-11-07 17:33:40 -08:00
Paul Kulchenko
9dd0a6962e Merge branch 'find-in-selection' (closes #547). 2015-11-07 16:53:50 -08:00
Paul Kulchenko
1ecc0755f9 Updated tests to use a separate .ini file to minimize conflicts. 2015-11-06 22:45:02 -08:00
Paul Kulchenko
a25aeac530 Added FileRemove method (#166). 2015-11-06 22:44:13 -08:00
Paul Kulchenko
f506a58b01 Added package onAppDone method (#166). 2015-11-06 22:42:56 -08:00
Paul Kulchenko
6ec1f7b723 Deleted api README as it's no longer needed. 2015-11-05 19:21:34 -08:00
Paul Kulchenko
55b89962e1 Updated Corona API for v2015.2731. 2015-11-04 15:41:44 -08:00
Paul Kulchenko
21733c0391 Updated Corona API processing script to follow Lua guidelines. 2015-11-04 15:19:34 -08:00
Paul Kulchenko
b5e078c810 Updated Corona API processing script to handle type inheritance. 2015-11-04 15:18:26 -08:00
Paul Kulchenko
0c8105d9be Added sorting the list of known extensions. 2015-11-03 20:38:19 -08:00
Paul Kulchenko
45f4847ab2 Updated Save As/Open command to use editor specific extensions instead of all. 2015-11-03 20:36:48 -08:00
Paul Kulchenko
b2d4ef59eb Added outline.showcompact setting to keep outline more compact for large files (closes #549). 2015-10-30 12:37:22 -07:00
Paul Kulchenko
ce208807f8 Updated capturing editor information during search to work with selections (#547, #416). 2015-10-29 18:49:25 -07:00
Paul Kulchenko
8f66d1a94a Added updating selection boundaries after replace-in-selection (#547). 2015-10-29 15:05:42 -07:00
Paul Kulchenko
93666b7dee Added message about reaching the end of selection during search (#547). 2015-10-29 10:52:40 -07:00
Paul Kulchenko
26e17dc6b1 Updated Replace and Replace All to take selection into account (#547, #416). 2015-10-29 10:52:20 -07:00
Paul Kulchenko
25adfbac15 Added search in selection button to the search panel toolbar (#547). 2015-10-29 10:51:50 -07:00
Paul Kulchenko
7772b85c2d Updated toolbar icons to fix black color in some images. 2015-10-27 21:03:04 -07:00
Paul Kulchenko
15b5f42dca Updated SetDllDirectory handling to avoid breaking dlopen with wxwidgets 3.1+ (#260). 2015-10-26 22:36:23 -07:00
Paul Kulchenko
9e20934f6d Fixed skipping editor tabs when clicked in some cases on OSX (closes #546). 2015-10-25 09:02:08 -07:00
Paul Kulchenko
cac7055f52 Added resizing toolbar background after resizing the application window. 2015-10-25 09:00:46 -07:00
Paul Kulchenko
36d4bfb9e5 Updated Corona interpreter to avoid caching specified path. 2015-10-24 20:40:27 -07:00
Paul Kulchenko
d3fde27a50 Replaced ConsoleClear with Erase methods for the Console object. 2015-10-24 15:59:55 -07:00
Paul Kulchenko
dcfaa7cbac Updated tests to handle platform-specific tests. 2015-10-23 18:44:53 -07:00
Paul Kulchenko
2bc5bc0c8e Updated directory traversing tests to work with smaller directories. 2015-10-23 17:21:13 -07:00
Paul Kulchenko
5c6d570368 Added timing to the tests. 2015-10-23 17:14:31 -07:00
Paul Kulchenko
1f8b2a746f Fixed texts that use Console. 2015-10-23 17:10:31 -07:00
Paul Kulchenko
3940aa6c6a Updated default file mask to match files without extension (#260). 2015-10-23 14:53:33 -07:00
Paul Kulchenko
c3134f85b1 Fixed text validation tests to avoid skipping results. 2015-10-23 14:27:23 -07:00
Paul Kulchenko
2563e5fa4a Updated tests to use a package instead of the obsolete app method. 2015-10-23 14:09:27 -07:00
Paul Kulchenko
a260cdf5c9 Removed search panel from the list of floated panels as it shouldn't be there. 2015-10-23 11:53:27 -07:00
Paul Kulchenko
6b226c1d1a Fixed toolbar size not being adjusted on the very first launch. 2015-10-23 10:51:01 -07:00
Paul Kulchenko
5c28a54a40 Switched to using client size instead of system metric to get screen width (#260).
The system metric reported incorrectly on OSX: http://trac.wxwidgets.org/ticket/17141#comment:5
2015-10-23 10:28:59 -07:00
Paul Kulchenko
33795ce0fd Updated wxwidget path in the build script to use git repository after wxwidgets migration. 2015-10-22 22:01:12 -07:00
Paul Kulchenko
25ec466ce6 Added context menu item to clear text in the Console window. 2015-10-21 21:37:38 -07:00
tmiv
56b9975804 Allow shortcuts to be added to tools menu items
The proposed change will allow keyboard shortcuts to tools menu items in the user file.

keymap[ID("tools.exec.ssm_compile")] = "Ctrl-B"
2015-10-20 14:34:26 -07:00
Paul Kulchenko
e353872dfb Added context menu to select a (clicked on) command in the Console window. 2015-10-20 09:06:22 -07:00
Paul Kulchenko
ed2f692447 Added onMenuConsole event (#166). 2015-10-19 08:52:19 -07:00
Paul Kulchenko
3e1d816d59 Disabled printing on Linux as it has errors in page layout (#540). 2015-10-17 13:24:24 -07:00
Paul Kulchenko
a84118c8f7 Added reporting printing progress (#540). 2015-10-17 13:13:48 -07:00
Paul Kulchenko
912f23acee Fixed printing error on Linux (#540). 2015-10-16 11:18:59 -07:00
Paul Kulchenko
6980167b6f Fixed printing of the Output window (#540). 2015-10-15 10:34:37 -07:00
Paul Kulchenko
526b18f924 Added package IsValidProperty method (#166). 2015-10-15 10:34:10 -07:00
Paul Kulchenko
d2407c3faa Added separator to the print-related menu items on OSX (#540). 2015-10-14 22:22:51 -07:00
Paul Kulchenko
33b07a5c96 Updated menu shortcuts to avoid conflicts in the File menu (#540). 2015-10-13 16:54:20 -07:00
Paul Kulchenko
fccdf61283 Added header/footer printing (#540). 2015-10-13 16:50:51 -07:00
Paul Kulchenko
970058c729 Added printing of the current editor tab (closes #540). 2015-10-13 16:47:45 -07:00
Paul Kulchenko
7941617dfd Add package GetIndicators method (#166). 2015-10-13 15:23:05 -07:00
Paul Kulchenko
122ebea0f7 Added editor.wrapmode to configure wrapping mode in the editor. 2015-10-13 15:21:28 -07:00
Paul Kulchenko
ad4d77f4e8 Fixed not distingushing between () and (nil) calls in GetEditorWithFocus (#166). 2015-10-13 15:19:18 -07:00
Paul Kulchenko
7fd74e0742 Added reporting of another instance running under a different user (closes #542). 2015-10-13 08:06:31 -07:00
Paul Kulchenko
6e4a0f113b Added opening multiple files from the Open dialog (closes #541). 2015-10-12 08:32:11 -07:00
Paul Kulchenko
1e3b630043 Removed allowinteractivescript setting as it doesn't need to be configurable (#538). 2015-10-11 20:05:50 -07:00
Paul Kulchenko
d33dfc4570 Allowed reading input in the Output window without printing something first (closes #538). 2015-10-11 20:05:39 -07:00
Paul Kulchenko
ce46925237 Updated README with features in 1.20. 2015-10-09 20:31:40 -07:00
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
Paul Kulchenko
81aaaef538 Updated documentation for 0.95. 2015-01-30 10:29:54 -08:00
Paul Kulchenko
205c71fcf9 Added showing/hiding Output/Console panel during debugging. 2015-01-29 15:49:02 -08:00
Paul Kulchenko
3ea892018f Updated CHANGELOG with recent changes. 2015-01-28 14:34:29 -08:00
Paul Kulchenko
6c14118f32 Upgraded Mobdebug to 0.613 to improve Lua 5.3 compatibility (#401); thanks to @andrewstarks. 2015-01-26 17:31:12 -08:00
Paul Kulchenko
824cbdfec5 Added bordersize to configure sash size.
This is useful on large resolution screens where it may be difficult to
position mouse over a thin border.
2015-01-22 22:15:52 -08:00
Paul Kulchenko
67e2a71e63 Added package LoadFile method (#166). 2015-01-21 20:08:02 -08:00
Paul Kulchenko
49e1e86457 Merge branch 'master' of https://github.com/Fringale/ZeroBraneStudio into update-fr 2015-01-19 15:32:14 -08:00
Paul Kulchenko
9525511b61 Updated usage instructions in README. 2015-01-19 14:44:53 -08:00
Alexis Jarreau
51ce63c256 Update French translation with latest strings, plus some minor tweaks and consistency fixes 2015-01-19 23:29:24 +01:00
Evandro Costa
58ba572e21 Update pt-br.lua 2015-01-19 19:16:06 -02:00
Evandro Costa
bf6352936b Update pt-br.lua 2015-01-19 19:12:49 -02:00
Leo Bartoloni
3100e1022d updated italian translation
updated italian translation
2015-01-16 14:36:38 +01:00
riidom
2ea70b6d4b Update de.lua 2015-01-16 06:31:05 +01:00
Paul Kulchenko
a6501ffb44 Added Russian translation for new messages (#70). 2015-01-15 20:23:50 -08:00
Paul Kulchenko
519ed0bd3a Removed menu undeline from some updated items for consistency (#70). 2015-01-15 20:22:01 -08:00
Paul Kulchenko
974726dac9 Updated language files with new messages (#70). 2015-01-15 19:44:49 -08:00
Paul Kulchenko
efc0b277fe Fixed translation of a message in pt-br (#70, #389). 2015-01-15 19:42:37 -08:00
Paul Kulchenko
23d1e03dde Updated language files for Go to line messages (#70). 2015-01-15 19:37:00 -08:00
Paul Kulchenko
9d07d80b5b Enabled html and C/cpp specs by default (#395). 2015-01-13 12:16:23 -08:00
Paul Kulchenko
1829e78d05 Fixed find-and-replace to replace in already selected fragment if matched. 2015-01-12 22:51:42 -08:00
Paul Kulchenko
a71df9a2ac Updated case in the name of a local function. 2015-01-12 22:51:11 -08:00
Paul Kulchenko
62f72a7daa Update API descriptions with functions new in Lua 5.3. 2015-01-11 14:55:55 -08:00
Paul Kulchenko
2601c3f562 Added syntax highlighting for functions new in Lua 5.3. 2015-01-10 11:22:59 -08:00
Paul Kulchenko
1f7f96b8fd Fixed incorrect getfenv reference in Lua API. 2015-01-09 12:19:04 -08:00
Paul Kulchenko
e142566496 Updated loose parser to support Lua 5.2+ labels. 2015-01-09 11:35:38 -08:00
Paul Kulchenko
9824a1290f Updated loose parser to support goto and Lua 5.3 bitops. 2015-01-09 11:10:05 -08:00
Paul Kulchenko
a5d244f594 Updated Metalua to support Lua 5.3 bitops. 2015-01-09 10:17:47 -08:00
Paul Kulchenko
3b119a0efa Updated Metalua to support goto/labels in static analysis for Lua 5.2/5.3. 2015-01-08 10:49:33 -08:00
Paul Kulchenko
c9898f7839 Added commandbar.prefilter to commandbar to improve performance (#31). 2015-01-08 10:44:09 -08:00
Paul Kulchenko
5ed5032c94 Added custom formatting for APIs. 2015-01-07 21:05:19 -08:00
Paul Kulchenko
96c3f838d6 Added Insert Library Function to Navigate menu. 2015-01-07 15:41:49 -08:00
Paul Kulchenko
707c0d8f64 Added hiding tooltip/auto-complete popup after undo/redo/delete operations. 2015-01-06 17:50:59 -08:00
Paul Kulchenko
367a7abadb Improved handling of complex types in LDoc expressions in auto-complete. 2015-01-05 19:22:09 -08:00
Paul Kulchenko
076a48c378 Added api handling to the config to support custom APIs. 2015-01-04 22:19:18 -08:00
Paul Kulchenko
5cffb33c25 Removed wxwidgets from the list of default APIs for Lua interpreters. 2015-01-04 22:17:43 -08:00
Paul Kulchenko
9107b369f9 Improved failed search 'shake' visualization by forcing window redraw. 2015-01-03 21:34:55 -08:00
Paul Kulchenko
a721217996 Refactored handling of special symbols in commandbar (#31). 2015-01-03 17:31:49 -08:00
Paul Kulchenko
09599f8b7b Added Lapis and Moonscript debugging links to README. 2015-01-02 18:03:52 -08:00
Paul Kulchenko
c65d14f759 Added Contributing section to README. 2015-01-02 15:34:55 -08:00
Paul Kulchenko
9aa0bf200f Added LICENSE link to README. 2015-01-02 15:34:36 -08:00
Paul Kulchenko
4fb73d0eef Added Lua 5.3 links to README; updated links to remove '.html'. 2015-01-02 15:30:08 -08:00
Paul Kulchenko
9bbf4308d5 Added PgUp and PgDn navigation for commandbar (#31). 2015-01-01 18:12:48 -08:00
Paul Kulchenko
e1d6f594d5 Disabled commandbar navigation when any of the modifiers are pressed (#31). 2015-01-01 17:56:58 -08:00
Paul Kulchenko
b609038b3f Merge branch 'master' of https://github.com/evandro-costa/ZeroBraneStudio 2015-01-01 17:33:26 -08:00
Evandro Costa
79e7695af4 Update pt-br.lua 2015-01-01 23:10:14 -02:00
Evandro Costa
fef069abd9 Update pt-br.lua 2014-12-29 20:15:00 -02:00
Paul Kulchenko
e1195631f4 Added auto-complete support for LDoc '@tparam' and '@param[type=...]'. 2014-12-27 16:49:14 -08:00
Paul Kulchenko
63b018c321 Fixed localization on a function used in auto-complete. 2014-12-27 16:47:35 -08:00
Paul Kulchenko
9f2f1a1b9b Fixed fuzzy search tests. 2014-12-27 16:06:08 -08:00
Paul Kulchenko
8170111c9b Fixed search navigation to shift horizontally when usewrap is off. 2014-12-26 20:45:44 -08:00
Estudiiio
812000751e Brazilian Portuguese (pt-br) translation 2014-12-26 21:23:09 -02:00
Paul Kulchenko
8e59efb236 Upgraded Mobdebug (v0.611) to fix tooltips during Corona debugging (closes #387). 2014-12-25 10:46:21 -08:00
Paul Kulchenko
3b7b0891d9 Fixed variable localization. 2014-12-24 21:36:17 -08:00
Paul Kulchenko
e9b97650f3 Fixed indentation for lines with mixed string separators (#324, #388). 2014-12-24 21:35:43 -08:00
Paul Kulchenko
661ecf094e Fixed indentation for lines with escaped slashes (#324, closes #388). 2014-12-24 09:05:07 -08:00
Paul Kulchenko
f3d6188756 Added showing the symbol under cursor in Go To Symbol (#385). 2014-12-13 12:24:48 -08:00
Paul Kulchenko
eeb44e6ba5 Updated CommandBarShow to accept text fragment to select (#31). 2014-12-12 22:11:32 -08:00
Paul Kulchenko
c8fa7b77ac Added editor:ValueFromPosition method (#166). 2014-12-12 21:55:34 -08:00
Paul Kulchenko
3d54e08bee Fixed handling of duplicate symbols in Go To Symbol (#385). 2014-12-11 12:42:15 -08:00
Paul Kulchenko
43b90458d9 Added shortcut for Go To Symbol (#385). 2014-12-11 09:30:41 -08:00
Paul Kulchenko
be331ca054 Updated commandbar to avoid cache collisions (#31). 2014-12-10 21:41:55 -08:00
Paul Kulchenko
c57ad47a0e Added closing preview in commandbar when not needed (#31). 2014-12-10 21:27:43 -08:00
Paul Kulchenko
be298b0741 Added content of the line to Go To Symbol (#385). 2014-12-10 20:52:30 -08:00
Paul Kulchenko
0d4cd7821c Added navigation for duplicate symbols to Go To Symbol (#385). 2014-12-10 20:52:29 -08:00
Paul Kulchenko
e3d16402c1 Added menu item for Go To Symbol (#385). 2014-12-10 20:52:28 -08:00
Paul Kulchenko
ad044c9cc9 Added Go To Symbol support to the commandbar (#31, closes #385). 2014-12-10 20:52:19 -08:00
Paul Kulchenko
ce53c92e32 Updated commandbar menu items (#31). 2014-12-09 18:49:58 -08:00
Paul Kulchenko
4a58901580 Allowed renaming of files with different case in the project tree. 2014-12-07 19:40:26 -08:00
Paul Kulchenko
e0cbd25254 Renamed commandbar scoring function to be more generic (#31). 2014-12-06 23:02:43 -08:00
Paul Kulchenko
aacb686b55 Removed misleading comment. 2014-12-06 12:56:36 -08:00
Paul Kulchenko
38c466c839 Added update of file name in the Outline when editor tab is updated (#337). 2014-12-05 20:16:57 -08:00
Paul Kulchenko
64789b868d Fixed refresh of files in command bar preview when selected (#31). 2014-12-05 17:40:08 -08:00
Paul Kulchenko
9914cf9943 Updated parser to avoid splitting foo.bar in incremental processing. 2014-12-05 10:16:12 -08:00
Paul Kulchenko
9970e8194c Fixed recovery of empty (untitled) tabs. 2014-12-04 13:37:55 -08:00
Paul Kulchenko
93545f7b8e Added check for styles being reset in the config file (closes #383). 2014-12-04 09:40:48 -08:00
Paul Kulchenko
cf5c468267 Updated links in CONTRIBUTING documentation. 2014-12-03 21:32:14 -08:00
Paul Kulchenko
c7a4967bde Added loading file from project directory with "proj file" on command line. 2014-12-03 21:32:13 -08:00
Paul Kulchenko
2ee9599863 Improved command line file check for relative files on Windows.
Loading `file:10` was interpreted as network share for non-existing files.
2014-12-03 21:32:01 -08:00
Paul Kulchenko
bcc0d50562 Fixed an auto-complete issue after repeat until <var>. 2014-12-03 09:36:14 -08:00
Paul Kulchenko
d6593abda4 Split console output into shorter lines to improve memory usage and handling. 2014-12-03 09:36:03 -08:00
Paul Kulchenko
395fb2ee48 Renamed debugger.stackmax* settings to debugger.maxdata*. 2014-12-02 21:13:46 -08:00
Paul Kulchenko
0f98d10af1 Removed double check for invalid UTF-8 output in console. 2014-12-02 21:09:09 -08:00
Paul Kulchenko
7b35439f4b Fixed setting focus to the editor in commandbar with one tab (#31). 2014-12-02 14:51:16 -08:00
Paul Kulchenko
7c5a63d97e Added skipping of binary files in commandbar preview (#31). 2014-12-01 15:08:58 -08:00
Paul Kulchenko
a91ea001f2 Updated GetKnownExtensions to accept an optional extension to match against. 2014-12-01 15:07:31 -08:00
Paul Kulchenko
29b9da14a1 Updated FileRead to accept optional length. 2014-12-01 15:06:55 -08:00
Paul Kulchenko
c26e2f5f73 Added CONTRIBUTING file. 2014-11-29 00:04:46 -08:00
Paul Kulchenko
c2f2e2094a Added .mailmap to link pre-2011 commits. 2014-11-27 22:30:03 -08:00
Paul Kulchenko
6f974cc680 Added clearing Output window before showing Find-in-Files results. 2014-11-26 11:34:59 -08:00
Paul Kulchenko
223adbc385 Refactored logic to clear Output window. 2014-11-26 11:29:25 -08:00
Paul Kulchenko
931bd8173f Added default values for Outline config settings (#337). 2014-11-25 20:32:06 -08:00
Paul Kulchenko
d68de22496 Updated layout settings to use constants and new package API. 2014-11-25 20:31:08 -08:00
Paul Kulchenko
51a539ae78 Added package GetProjectNotebook method (#166). 2014-11-25 19:20:21 -08:00
Paul Kulchenko
7c1b8c70c7 Added saving Outline tab configuration in the Project notebook (#337). 2014-11-25 19:03:58 -08:00
Paul Kulchenko
3bf164c109 Upgraded MobDebug (0.61) to add basedir support. 2014-11-25 19:03:57 -08:00
Paul Kulchenko
42d9da815a Added outline.sort option to sort items in the outline (#337). 2014-11-25 19:03:56 -08:00
Paul Kulchenko
36fbb1ca96 Added outline.showflat option to show flat outline (#337). 2014-11-25 19:03:55 -08:00
Paul Kulchenko
320fa6e89f Refactored ID handling to allow using ID.COMMENT in config files. 2014-11-25 19:03:54 -08:00
Paul Kulchenko
bc78623d53 Renamed project tree component internally for consistency. 2014-11-25 19:03:53 -08:00
Paul Kulchenko
b171da7620 Added package GetOutlineTree method (#166). 2014-11-25 19:03:51 -08:00
Paul Kulchenko
fd00ee6ee1 Replaced table.insert with faster t[ind] in commandbar processing. 2014-11-25 19:03:50 -08:00
Ard van Breemen
e9f4b654e8 Add support for armhf architecture 2014-11-25 23:55:19 +01:00
Paul Kulchenko
0be23569f9 Added document Save method (#166). 2014-11-22 20:53:51 -08:00
Paul Kulchenko
5504029af6 Updated status refresh to only happen for the active editor. 2014-11-22 20:52:59 -08:00
Paul Kulchenko
fb53b619b0 Added init.lua to the search path (fixes require 'dist'). 2014-11-21 14:15:00 -08:00
Paul Kulchenko
6ccc47c5c4 Added forced garbage collection when switching from the app. 2014-11-20 23:12:56 -08:00
Paul Kulchenko
88572edfad Reduced the number of displayed matches in commandbar to limit memory (#31). 2014-11-18 20:05:36 -08:00
Paul Kulchenko
9f8d5ae06c Reduced caching in commandbar to conserve memory (#31). 2014-11-18 19:55:27 -08:00
Paul Kulchenko
9b26cec444 Updated toolbar UI checks to happen when running/debugging (#352). 2014-11-18 19:20:09 -08:00
Paul Kulchenko
db77afc787 Added penalty for missing characters in fuzzy search (#31). 2014-11-18 11:09:03 -08:00
Paul Kulchenko
71e78c3595 Fixed Lua 5.2 compatibility in commandbar code (#31). 2014-11-18 10:04:55 -08:00
Paul Kulchenko
ce6a740530 Improved uppercase matching in fuzzy search (#31). 2014-11-18 10:04:46 -08:00
Paul Kulchenko
23445bb2b9 Merge branch 'command-bar' 2014-11-17 15:29:12 -08:00
Paul Kulchenko
0dac8a221f Updated line caching logic to fix commandbar redrawing on OSX (#31). 2014-11-17 14:48:35 -08:00
Paul Kulchenko
bcc17ca3ad Fixed preview redrawing in commandbar on Linux (#31). 2014-11-17 14:02:26 -08:00
Paul Kulchenko
5b882697c4 Increased font size in commandbar (#31). 2014-11-17 13:40:04 -08:00
Paul Kulchenko
85043df0f6 Decreased penalty for case mismatch in fuzzy search (#31). 2014-11-17 13:39:42 -08:00
Paul Kulchenko
d2a12c55e7 Moved commandbar/Navigate menu to Search (#31). 2014-11-17 13:38:43 -08:00
Paul Kulchenko
c66fc390b6 Added line navigation to Navigate menu (#31). 2014-11-17 12:12:29 -08:00
Paul Kulchenko
0ea7b9f281 Updated command bar preview to work with line number navigation (#31). 2014-11-17 12:09:56 -08:00
Paul Kulchenko
02dff1e588 Added handling of line numbers in command bar (#31). 2014-11-17 12:01:32 -08:00
Paul Kulchenko
4acb113ab3 Updated based on static analysis results. 2014-11-17 09:16:34 -08:00
Paul Kulchenko
5f872039af Added caching to improve commandbar performance on large folders (#31). 2014-11-16 22:39:55 -08:00
Paul Kulchenko
66ae840e66 Updated fuzzy matching to better work with short file names (#31). 2014-11-16 20:04:59 -08:00
Paul Kulchenko
5441950fc7 Removed unused parameters in commandbar handling (#31). 2014-11-15 21:06:51 -08:00
Paul Kulchenko
5a312dee65 Fixed commandbar positioning on OSX/Linux (#31). 2014-11-15 13:25:28 -08:00
Paul Kulchenko
1bbf76d339 Updated commandbar to show relative file names (#31). 2014-11-15 13:25:28 -08:00
Paul Kulchenko
cf4e4a9edd Added setting explicit focus on preview tab in commandbar (#31).
This is to fix a strange issue with the cursor in the text control on the
commandbar being in the wrong location (on Windows).
2014-11-15 13:25:27 -08:00
Paul Kulchenko
e0ab26cb2b Disabled notebook 'freezing' in commandbar on OSX (#31). 2014-11-15 13:25:26 -08:00
Paul Kulchenko
1ead741fe2 Fixed mouse selection in commandbar on Linux (#31). 2014-11-15 13:25:25 -08:00
Paul Kulchenko
62bcc65337 Added preview on first selection in commandbar (#31). 2014-11-15 13:25:24 -08:00
Paul Kulchenko
fde1a8998f Added file preview to commandbar (#31). 2014-11-15 13:25:23 -08:00
Paul Kulchenko
7ab528edd7 Added fuzzy search for files in commandbar (closes #31). 2014-11-15 13:25:22 -08:00
Paul Kulchenko
9f59dd5542 Added displaying the list of current tabs for commandbar (#31). 2014-11-15 13:25:21 -08:00
Paul Kulchenko
ff136b025f Added commandbar prototype for file navigation (#31).
Added using editor color settings for the command bar.
Added positioning for the command bar.
Added lines between rows in the command bar.
Added a panel to serve as frame substitute on OSX/Linux.
Updated commandbar colors to match the rest of the colors.
Updated commandbar to use a different type of sizer.
Fixed separators between commandbar lines.
Updated commandbar to use different handling on OSX/Linux than on Win.
  wxTextCtrl in wxFrame doesn't get focus on OSX and Linux; seems to be a
  known wxwidgets issue: http://trac.wxwidgets.org/ticket/11948.
  The workaround is to use wxPanel instead of wxFrame, but it requires
  a bit different handling and positioning.
Added restoring focus after change in selection.
Updated commandbar fonts to use editor settings.
Updated commandbar fonts and separators.
Set commandbar selection to 'none' by default.
Removed logging messages from commandbar processing.
2014-11-15 13:22:10 -08:00
Paul Kulchenko
8e49682ea0 Added reset of tokens when editor content is reloaded (#337). 2014-11-14 17:04:39 -08:00
Paul Kulchenko
be4c0d646a Updated Corona integration to hide console on OSX (2014.2393+). 2014-11-14 09:49:17 -08:00
Paul Kulchenko
9960b046f9 Fixed auto-complete after text not separated by a whitespace or bracket. 2014-11-12 16:16:40 -08:00
Paul Kulchenko
5d86cc51bc Removed border from tree controls (#305). 2014-11-12 15:45:41 -08:00
Paul Kulchenko
03c0677789 Fixed an error when disabling outline by setting outlineinactivity=nil. 2014-11-12 15:40:20 -08:00
Paul Kulchenko
c7d43416cd Updated documentation for 0.90. 2014-11-08 23:32:13 -08:00
Paul Kulchenko
6459b4ab05 Updated permissions on dylib files and Lua 5.3 binaries. 2014-11-08 23:24:53 -08:00
Paul Kulchenko
3a3adf4d04 Updated MANIFEST files to include Lua 5.3 binaries. 2014-11-08 22:56:46 -08:00
Paul Kulchenko
9ca4cf822c Disabled closing tabs in floating panels. 2014-11-07 08:44:11 -08:00
Paul Kulchenko
a6ca8f5ffc Updated CHANGELOG with recent changes. 2014-11-05 21:41:35 -08:00
Paul Kulchenko
eb5dc5048a Added event handlers on file rename; updates file name in the outline (#337). 2014-11-05 21:35:21 -08:00
Paul Kulchenko
a9b0fcdf02 Added IsPanelDocked package method (#166). 2014-11-05 11:47:30 -08:00
Paul Kulchenko
f252317c9e Added GetOutputNotebook package method (#166). 2014-11-05 11:47:01 -08:00
Paul Kulchenko
338ba9a139 Added CreateBareEditor package method (#166). 2014-11-05 11:46:20 -08:00
Paul Kulchenko
10025ed2c0 Added creating italic font if only the main one is provided. 2014-11-05 11:44:48 -08:00
Paul Kulchenko
e52164ec98 Updated markup processing to support links in non-editor documents. 2014-11-05 11:39:00 -08:00
Paul Kulchenko
51868dd862 Updated markup processing to allow for 3+ markup sequences. 2014-11-05 10:33:16 -08:00
Paul Kulchenko
67e5628b61 Reduced rate of toolbar UI checks to improve performance (fixes #352). 2014-11-05 10:30:40 -08:00
Paul Kulchenko
7f4a06cc7c Reduced unnecessary editor processing to improve performance (#352). 2014-11-05 10:29:26 -08:00
Paul Kulchenko
04f2dbba8f Fixed column indicator on lines with tabs (fixes #379). 2014-11-04 18:08:01 -08:00
Paul Kulchenko
4bd2dc8d20 Added unindent on backspace (controlled by editor.backspaceunindent). 2014-11-03 21:22:41 -08:00
EM
e84f01f690 Corrected a few things. 2014-11-03 22:45:40 -06:00
EM
b3d85bf15a Updated eo translation. 2014-11-03 22:36:13 -06:00
Paul Kulchenko
d090daab37 Fixed not hiding directories when files without extension are hidden (#375). 2014-11-02 09:18:18 -08:00
Paul Kulchenko
03970faf71 Added marking file after showing files in the tree (#375). 2014-11-01 18:26:42 -07:00
Paul Kulchenko
19d50637ad Added hiding/showing files by type in the project/filetree (closes #375). 2014-11-01 18:09:52 -07:00
Paul Kulchenko
adbea02202 Updated handling of extensions to allow more symbols in extensions. 2014-11-01 18:09:51 -07:00
Paul Kulchenko
a7c51efea2 Updated AddPackage to assign package file name (#166). 2014-11-01 18:09:50 -07:00
Paul Kulchenko
3cac414712 Updated code based on static analysis suggestions. 2014-10-31 13:57:30 -07:00
Paul Kulchenko
f028443f28 Updated outline to use AddPackage method (#337). 2014-10-31 13:29:42 -07:00
Paul Kulchenko
4ec729a8f1 Added AddPackage and RemovePackage methods (#166). 2014-10-31 13:29:19 -07:00
Paul Kulchenko
17c2b2dbce Added Lua 5.3 (beta) support and binaries. 2014-10-31 12:43:49 -07:00
Paul Kulchenko
251c09cb81 Updated Lua 5.3 build scripts. 2014-10-31 12:43:46 -07:00
riidom
2d55a81c5e Update de.lua 2014-10-31 20:29:58 +01:00
Paul Kulchenko
60c23b1d64 Added scope-aware auto-complete for local/global variables (closes #291). 2014-10-29 14:07:45 -07:00
Paul Kulchenko
f38530041a Fixed file renaming in the filetree after using SaveAs.
This issue is only seen on case insensitive systems when the case in the
project directory is different from the case returned by `SaveAs` dialog.
2014-10-29 12:12:14 -07:00
Paul Kulchenko
e25b86fbf1 Added Russian translation for new messages (#70). 2014-10-28 20:23:47 -07:00
Paul Kulchenko
67646c850a Updated language files with new messages (#70). 2014-10-27 15:58:00 -07:00
Paul Kulchenko
4bbdc6a80e Updated translation building script to handle non-string parameters (#70). 2014-10-27 15:56:59 -07:00
Paul Kulchenko
c301f82672 Updated messages for to match translations (#70). 2014-10-27 13:48:22 -07:00
Paul Kulchenko
f8202b119e Added translation label for Toggle Bookmark toolbar icon (#70, #373). 2014-10-27 13:09:37 -07:00
Paul Kulchenko
51f42d6629 Fixed Run toolbar label not being translated (#70, #373). 2014-10-27 12:10:45 -07:00
Paul Kulchenko
9d601bb2cf Removed caption as it's not visible. 2014-10-27 12:10:43 -07:00
Paul Kulchenko
19a5f3d531 Fixed Project label shown untranslated in other languages (#70, #373). 2014-10-27 12:10:41 -07:00
Paul Kulchenko
39256961f4 Refactored timer usage for consistency. 2014-10-27 12:10:40 -07:00
Paul Kulchenko
63d3045c45 Fixed outline refresh after quick tab switches (#337). 2014-10-27 12:10:38 -07:00
cosmotect
0ec38f7ec5 Added an Esperanto (eo) translation. 2014-10-27 00:36:53 -05:00
Paul Kulchenko
9789ecb923 Fixed an error when dragging Stack/Watch/other tabs between notebooks. 2014-10-24 15:34:42 -07:00
Paul Kulchenko
2f2d4c7211 Fixed Output tab name after stopping/completing remote debugging. 2014-10-24 14:03:38 -07:00
Paul Kulchenko
08a06ecfce Fixed index check during tab name update. 2014-10-24 14:02:53 -07:00
Paul Kulchenko
cba1b34f21 Added acandtip.maxlength option for setting the length of a tooltip. 2014-10-23 22:09:06 -07:00
Paul Kulchenko
6f18722bcf Updated processing of function indicators when auto-analyzer is off. 2014-10-23 22:07:37 -07:00
Paul Kulchenko
f6694293ec Updated tooltip processing to make it more consistent and better use space. 2014-10-22 20:45:53 -07:00
Paul Kulchenko
ea2beab605 Added onEditorCallTip method (#166). 2014-10-22 18:20:10 -07:00
Paul Kulchenko
a6d87f191a Updated RemoveMenuItem to disconnect handlers attached to the main frame (#166). 2014-10-21 20:45:26 -07:00
Paul Kulchenko
fec0804996 Minor update to indentation guides handling (#371). 2014-10-20 14:05:59 -07:00
Paul Kulchenko
25af9f0752 Upgraded Mobdebug (0.607) to fix debugging after Detach Process command. 2014-10-20 14:02:18 -07:00
Wojciech Milkowski
1079efdee3 make indentation guide configurable 2014-10-19 22:47:18 +02:00
Paul Kulchenko
5a5d3f8c02 Fixed keeping toolbar status after hiding it.
This also fixes restoring toolbar height after icon size changes.
2014-10-18 09:12:39 -07:00
Paul Kulchenko
2f9778a7bb Fixed localization to avoid error in SaveAs processing. 2014-10-18 09:09:03 -07:00
Christoph Kubisch
a2db834383 bugfix on extension change save-as, related to new indication handling 2014-10-18 11:36:14 +02:00
Paul Kulchenko
af05c45752 Improved scroll positioning in the outline after tab changes (#337). 2014-10-17 14:31:20 -07:00
Paul Kulchenko
83aadb7abf Added scrolling to the top of the outline when showonefile is set (#337). 2014-10-17 13:45:59 -07:00
Paul Kulchenko
11dc1aa6ea Refactored adding editor tab to ensure callbacks have document data. 2014-10-17 13:44:40 -07:00
Paul Kulchenko
12e2c10cff Fixed handling of remapped image files; improved error reporting. 2014-10-16 23:56:01 -07:00
Paul Kulchenko
789321143a Fixed search in files/directories with % in the name (fixes #369). 2014-10-16 23:15:10 -07:00
Paul Kulchenko
cfe214469b Restored removed function in Lua spec (partial revert of 713d0935). 2014-10-16 22:18:13 -07:00
Paul Kulchenko
713d09354d Updated function call indicator to support isfncall and marksymbols. 2014-10-16 21:43:42 -07:00
Paul Kulchenko
974cd8b6e2 Updated function indicator processing to use ranges. 2014-10-16 21:22:24 -07:00
Paul Kulchenko
2bd2f896ca Updated C-based specs to handle function calls without parameters. 2014-10-16 20:13:59 -07:00
Paul Kulchenko
385582122d Updated method of collapsing outline to fix crash on OSX (#337, fixes #368). 2014-10-16 17:29:16 -07:00
Paul Kulchenko
16f026813a Removed reference to funclist, which is no longer needed. 2014-10-16 17:14:20 -07:00
Paul Kulchenko
79381bc5a3 Fixed disabling Stack/Watch icons in the toolbar. 2014-10-16 10:23:51 -07:00
Paul Kulchenko
40d4ee7582 Updated showanonymous to a label for anon functions in the outline (#337). 2014-10-16 10:04:22 -07:00
Paul Kulchenko
9b8c89bc92 Refactored GetBitmap package method (#166). 2014-10-15 22:52:47 -07:00
Paul Kulchenko
b114996f26 Added package GetAppName method and removed hardcoded name references (#166). 2014-10-15 22:52:45 -07:00
Paul Kulchenko
e71c197da1 Added package CreateImageList method (#166). 2014-10-15 22:52:44 -07:00
Paul Kulchenko
84285ffebb Fixed navigation in function outline when showonefile is set (#337). 2014-10-15 22:52:31 -07:00
Paul Kulchenko
b46b0a62e3 Added imagemap setting to support custom images. 2014-10-15 22:02:29 -07:00
Paul Kulchenko
28e93b62b7 Updated C-based specs to use marksymbols to provide outline for C functions. 2014-10-14 20:25:54 -07:00
Paul Kulchenko
6019d29a2b Renamed markvars method used in spec files to marksymbols. 2014-10-13 15:31:19 -07:00
Paul Kulchenko
208fdad134 Added showonefile option for the outline to always show one file (#337). 2014-10-12 19:08:40 -07:00
Paul Kulchenko
415c3c20a5 Added option for not/showing anonymous functions in the outline (#337). 2014-10-12 16:37:27 -07:00
Paul Kulchenko
4f81014a13 Updated images in the outline; added showmethodindicator option (#337). 2014-10-12 14:50:15 -07:00
Paul Kulchenko
03df5c8e37 Reduced the number of focus changes in the outline (#337). 2014-10-11 21:47:40 -07:00
Paul Kulchenko
5c89560fd4 Improved support for non-lua specs in the outline (#337). 2014-10-11 13:27:06 -07:00
Paul Kulchenko
6f85d8bc71 Updated label for anonymous functions in the outline (#337). 2014-10-11 13:27:04 -07:00
Paul Kulchenko
89e012b38a Fixed localization in function outline (#337). 2014-10-11 13:27:02 -07:00
Christoph Kubisch
8ec25b74b2 cg/hlsl/glsl refine isfndef capture, mostly to react on GLSL's layout mechanism 2014-10-11 13:02:55 +02:00
Christoph Kubisch
49b96a65b6 bugfix in output callback for commandline tools 2014-10-11 11:42:40 +02:00
Paul Kulchenko
d349245890 Fixed error after using Enter multiple times in Find in Files on OSX. 2014-10-09 08:44:46 -07:00
Paul Kulchenko
266c242df7 Updated package.config description to remove reference to Lua 5.2. 2014-10-09 08:40:52 -07:00
Paul Kulchenko
09ece96e39 Fixed activation in tree:FindItem when new editor tab is opened (#166).
It incorrectly activates the root element, which was introduced by be323d55.
2014-10-08 18:35:49 -07:00
Paul Kulchenko
9f31af523f Updated outline to track filename changes after Save As (#337). 2014-10-08 17:55:42 -07:00
Paul Kulchenko
732ec73b86 Fixed flicker in the outline when auto-complete is shown (#337). 2014-10-08 12:46:29 -07:00
Paul Kulchenko
0690e49ceb Fixed focus switch after selecting a function in the outline and editing (#337). 2014-10-08 11:30:50 -07:00
Paul Kulchenko
2f18ffeda0 Updated parser to report function token before parameters (#337).
This fixes local/global handling of functions with parameters in the
outline.
2014-10-08 11:08:15 -07:00
Paul Kulchenko
87259150c7 Added collapsing outlines for files in inactive tabs (#337). 2014-10-08 10:07:50 -07:00
Paul Kulchenko
5f274c5db4 Added local/global indicators to function outline (#337). 2014-10-07 22:32:18 -07:00
Paul Kulchenko
ece092bfdc Fixed off-by-one error in function outline position tracking (#337). 2014-10-07 22:09:29 -07:00
Paul Kulchenko
6da609c4d1 Added Run and Run as Scratchpad buttons to the toolbar. 2014-10-06 22:01:49 -07:00
Paul Kulchenko
e8aa936898 Merge branch 'function-outline' 2014-10-06 21:39:57 -07:00
Paul Kulchenko
710b7679f2 Disabled moving of Output/Console/Project tabs between panels. 2014-10-06 21:14:01 -07:00
Paul Kulchenko
6fdbfc3398 Added package GetConsole method (#166). 2014-10-06 21:14:00 -07:00
Paul Kulchenko
0499bd6034 Added view menu for the Outline window (#337). 2014-10-06 21:14:00 -07:00
Paul Kulchenko
c1ab2105a5 Added drag-and-drop support for the Outline tab (#337). 2014-10-06 21:13:59 -07:00
Paul Kulchenko
28f9085c63 Refactored drag-and-drop processing for Project/Output window tabs (#377). 2014-10-06 21:13:58 -07:00
Paul Kulchenko
ad39453dca Refactored panel docking; added AddPanelDocked package method (#166). 2014-10-06 21:13:57 -07:00
Paul Kulchenko
7a33783acf Updated parser to avoid 'breaking' statements during incremental processing. 2014-10-06 21:13:27 -07:00
Paul Kulchenko
9edc54a019 Updated outline to always expand functions in the current file (#337). 2014-10-05 23:50:27 -07:00
Paul Kulchenko
404537f1eb Updated indicator processing to improve performance on large files. 2014-10-05 13:53:26 -07:00
Paul Kulchenko
665e2f9af1 Updated outline to show files without functions (#337). 2014-10-05 13:53:25 -07:00
Paul Kulchenko
30533acf5c Updated outline logic to show on the very first launch (#337). 2014-10-05 13:53:25 -07:00
Paul Kulchenko
a097557176 Remove function dropdown from the toolbar (#337). 2014-10-05 13:53:24 -07:00
Paul Kulchenko
f7af2621dc Added function outline (closes #337, closes #222). 2014-10-05 13:53:08 -07:00
Paul Kulchenko
3f293e2759 Updated parser to store position for not-quite-valid function names. 2014-10-05 13:51:44 -07:00
Paul Kulchenko
9702829b57 Added document SetActive method (#166). 2014-10-05 13:51:43 -07:00
Paul Kulchenko
b2ebfa2bf4 Updated parser to handle ... in function parameters. 2014-10-05 13:51:42 -07:00
Paul Kulchenko
f1636f4921 Fixed storing position in function handling. 2014-10-05 13:51:41 -07:00
Paul Kulchenko
536241ea4a Reorganized token list processing to keep it within the editor. 2014-10-05 13:51:40 -07:00
Paul Kulchenko
792342634e Added function handling to the token processing. 2014-10-01 22:37:58 -07:00
Paul Kulchenko
6407c58704 Added package ExecuteCommand method (#166). 2014-10-01 17:42:18 -07:00
Paul Kulchenko
1b7039e858 Switched to using Is{Input|Error}Available instead of stream:CanRead.
`CanRead` was occasionally crashing on Windows when reading input from
an application with delays in producing the output.
Using `IsInputAvailable` hasn't shown any issues, so using it instead.
2014-09-30 23:09:30 -07:00
Paul Kulchenko
ce86a8945f Updated un/comment to keep the current selection and caret position (#360). 2014-09-29 15:54:38 -07:00
Paul Kulchenko
b047762803 Updated output callback processing not to run when nothing to process. 2014-09-29 09:48:26 -07:00
Paul Kulchenko
1b92ed9234 Fixed stream reading for the Output to only include actually read chars. 2014-09-28 22:32:25 -07:00
Paul Kulchenko
dcbfed6b59 Added build support for Lua 5.3-alpha and luasocket for Lua 5.3. 2014-09-27 21:05:00 -07:00
Paul Kulchenko
d1fb8837f7 Refactored default fprojdir and fworkdir from the interpreter code. 2014-09-27 13:45:39 -07:00
Paul Kulchenko
34a374e1c2 Added GetAPI method for interpreter (#166). 2014-09-26 15:19:14 -07:00
Paul Kulchenko
29860fdae8 Added rule to enable Set From Current File only when available. 2014-09-26 14:06:34 -07:00
Paul Kulchenko
93dabed113 Updated interpreter processing to run after packages are loaded. 2014-09-26 14:05:09 -07:00
Paul Kulchenko
b73a5f71a9 Updated command launch handling to allow output suppression. 2014-09-25 23:27:52 -07:00
Paul Kulchenko
11647b3508 Added package GetKnownExtensions method (#166). 2014-09-24 16:10:46 -07:00
Paul Kulchenko
524421cc22 Updated package GetRootPath to accept file/directory name (#166). 2014-09-24 16:10:08 -07:00
Paul Kulchenko
3ec95ecbb2 Added handling of ~ in launch command path. 2014-09-23 21:29:31 -07:00
Paul Kulchenko
112d679f83 Added package AddTool and RemoveTool methods (#166). 2014-09-23 21:28:54 -07:00
Paul Kulchenko
97d8b30e17 Refactored tools interface to make it easy to add/remove tools.
The tool command (`exec.fn` method) now accepts `filename` as the first
parameter instead of `wx.wxFileName`.
2014-09-23 20:36:57 -07:00
Paul Kulchenko
4ac9376b19 Improved ffitoapi tool logic when no replacement is made. 2014-09-23 20:28:49 -07:00
Paul Kulchenko
98ba823e23 Removed menu separator from the Tools menu. 2014-09-22 18:28:00 -07:00
Paul Kulchenko
4a2c8e9167 Added package FindTopMenu method (#166). 2014-09-22 18:27:26 -07:00
Paul Kulchenko
8ebb89aaaf Fixed an issue with removing first menu item in RemoveMenuItem (#166). 2014-09-22 18:26:55 -07:00
Paul Kulchenko
e892c91518 Added project dir to find dialog paths; thanks to @sclark39 (closes #358). 2014-09-21 01:03:08 -07:00
Paul Kulchenko
b048b57461 Moved 'default' search path to be searched first (#357). 2014-09-20 22:13:14 -07:00
Paul Kulchenko
4ba15eb62f Removed prepending libraries for debugging to LUA_CPATH when custom interpreter is specified.
This helps to minimize conflicts when stock lua or custom lua interpreter
is used; libraries from /clibs/ folders will only be used as the last
resort.
2014-09-19 22:09:22 -07:00
Paul Kulchenko
2b7cec04b9 Improved compatibility with Lua 5.2 interpreter (closes #357). 2014-09-18 23:09:21 -07:00
Paul Kulchenko
79d15adc13 Upgraded MobDebug (0.606) for Detach Process to correctly close debugging. 2014-09-18 16:10:06 -07:00
Paul Kulchenko
43e700d1e6 Added check for existing process id before stopping the process. 2014-09-18 15:39:03 -07:00
Paul Kulchenko
0d646677ce Added check for pending data to improve re-starting debugging session. 2014-09-18 15:32:22 -07:00
Paul Kulchenko
4e055d0d4a Fixed an issue with searching in Output and Console windows.
This was broken by an earlier commit (df6b9fe9), which enabled search in
the current editor window. This change initiates the search in the last
editor component with a focus.
2014-09-17 10:13:27 -07:00
Paul Kulchenko
68d7fd70c8 Reorganized default config settings. 2014-09-15 18:27:54 -07:00
Paul Kulchenko
1492c225d7 Removed unused image files. 2014-09-14 21:23:58 -07:00
Paul Kulchenko
2bbffce9e1 Renamed image files to have names correspond to the content. 2014-09-14 21:22:23 -07:00
Christoph Kubisch
76a0714638 show warning if directory not set 2014-09-14 14:28:41 +02:00
Christoph Kubisch
e909158de5 glsl 4.5 2014-09-14 14:28:41 +02:00
Paul Kulchenko
4c7c9593de Fixed unused variables and constants based on static analysis. 2014-09-10 22:15:38 -07:00
Paul Kulchenko
04d1fc8299 Fixed replacement when selection doesn't match the text being searched for. 2014-09-10 22:09:31 -07:00
Paul Kulchenko
6174f924e0 Updated static analizer to accept typedlua parser in addition to metalua. 2014-09-09 20:12:55 -07:00
Paul Kulchenko
5031c5f5c1 Added sending Corona SDK simulator output to the Output window on Windows. 2014-09-08 22:12:45 -07:00
Paul Kulchenko
23f617d22a Added navigation based on 'filename:line:pos' in the Output window. 2014-09-07 09:40:41 -07:00
Paul Kulchenko
f33865ccc4 Added example of enabling Opt+Shift+Left/Right shortcut on OSX. 2014-09-06 13:10:21 -07:00
Christoph Kubisch
620466ad3a updated luxinia2 related files 2014-09-06 15:35:40 +02:00
Paul Kulchenko
df6b9fe9b3 Updated search/replace to always use the current editor/output/console tab. 2014-09-05 14:24:06 -07:00
Paul Kulchenko
63bc899a97 Fixed 'slow' mode of static analysis to work with Metalua 0.7.2. 2014-09-03 21:05:09 -07:00
Paul Kulchenko
5c84079283 Fixed refresh of 'background' markers during debugging. 2014-09-02 22:43:03 -07:00
Paul Kulchenko
64b14f4005 Fixed incorrect binary not calculation with wxlua and LuaJIT 2.1.
There appears to be an issue with `bit.bnot` included with wxlua,
which only manifests itself under LuaJIT 2.1 when SSE2 processing is
enabled. This is triggered by LuaJIT commit 57768cd (x86: Remove x87
support from interpreter), but the issue is with wxlua, not LuaJIT.
2014-09-02 22:40:46 -07:00
184 changed files with 15378 additions and 6594 deletions

View File

@@ -1,5 +1,827 @@
# ZeroBrane Studio Changelog
## v1.30 (Jan 21 2016)
### Highlights
- Added `markers` panel to show and navigate bookmarks and breakpoints.
- Added saving/restoring bookmarks and breakpoints.
- Added breakpoint prev/next navigation (`Project | Breakpoint` menu).
- Added find/replace in selection to search operations.
- Added printing of editor tabs and Console/Output windows (available on Windows and OSX).
- Added recursive processing of configuration files (using `include` command).
- Added `outline.showcompact` setting to keep outline more compact for large files.
- Added opening multiple files from the `Open` dialog.
- Updated Corona API for v2015.2731 and added handling of type inheritance.
- Updated love2d API for v0.10.0.
### Special thanks
- To [tmiv](https://github.com/tmiv) for allowing shortcuts to be added to tools menu items.
- To [Yonaba](https://github.com/Yonaba/) for French translation update.
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
- To [Inigo Sola](https://github.com/inigosola) for Spanish translation update.
### Improvements
- Added `CloneMenu` package method (#166).
- Added Torch and Redis debugging links.
- Added `IsNew` method for documents (#166).
- Added `Print` method and updated core components to use it during launch.
- Added skipping `UPDATE_CONTENT` events on cursor blinks in `UPDATEUI` (#419).
- Added preserving markers after sorting/reindentation operations.
- Added editor `MarkerGetAll` method (#166).
- Added example on how to set breakpoint shortcuts used in v1.20 or earlier (#419).
- Added processing of `include` command without extension in config (#555).
- Added reporting of missing packages when using `package` command in config (#555).
- Added processing of `package` command without extension in config (#555).
- Added hint on using updated breakpoint shortcut (#419).
- Added breakpoint prev/next navigation (#419).
- Added `AttachMenu` package method (#166).
- Added `MarkerToggle` editor method (#166).
- Added `MarkerGotoNext` and `MarkerGotoPrev` editor methods (#166).
- Added local menu to the `Markers` panel to toggle markers (#419).
- Added saving/restoring bookmarks and breakpoints (#419).
- Added `BookmarkToggle` method to the editor (#166).
- Added `BreakpointToggle` method to the editor (#166).
- Added `markers` panel to show bookmarks and breakpoints (#419).
- Added `onEditorMarkerUpdate` event (#166).
- Added unfolding fragments that include activated line during debugging (closes #575).
- Added skipping comment when none is provided in the Stack (instead of showing `nil`).
- Added skipping comments in the lexer to avoid splitting statements (fixes #568).
- Added `GetExePath` method for the interpreter (#166).
- Added package `GetFilePath` method (#166).
- Added `showhiddenfiles` option to show hidden files in the filetree (closes #561).
- Added package `RemovePanel` method (#166).
- Added loading of custom package from the config file (closes #555).
- Added `Alt-Enter` to "replace all" when replace field is selected in the search panel.
- Added setting project directory to the selected directory to the project tree menu.
- Added ignoring `Ctrl-CapsLock` in the editor that was shrinking the font.
- Added recursive processing of configuration files with relative names (#555).
- Added moving cursor to the end of the pasted fragment (#556).
- Added workaround for copying UTF-8 invalid data to/from clipboard (#260, #556).
- Added `CloseAll` and `CloseAllExcept` document methods (#166).
- Added warning in the interpreter when a short name not generated on Windows (closes #559).
- Added check for recover record to be fully present.
- Added using `*Raw` methods when available for handling of invalid UTF-8 chars (#260, #556).
- Added `FileRemove` method (#166).
- Added package `onAppDone` method (#166).
- Added sorting the list of known extensions.
- Added `outline.showcompact` setting to keep outline more compact for large files (closes #549).
- Added updating selection boundaries after replace-in-selection (#547).
- Added resizing toolbar background after resizing the application window.
- Added timing to the tests.
- Added context menu item to clear text in the Console window.
- Added context menu to select a (clicked on) command in the Console window.
- Added `onMenuConsole` event (#166).
- Added reporting printing progress (#540).
- Added package `IsValidProperty` method (#166).
- Added separator to the print-related menu items on OSX (#540).
- Added header/footer printing (#540).
- Added printing of the current editor tab (closes #540).
- Add package `GetIndicators` method (#166).
- Added `editor.wrapmode` to configure wrapping mode in the editor.
- Added reporting of another instance running under a different user (closes #542).
- Added opening multiple files from the `Open` dialog (closes #541).
- Allowed reading input in the Output window without printing something first (closes #538).
- Allow shortcuts to be added to tools menu items
- Extended PATH on OSX with `/usr/local/bin` to provide access to tools in that folder (#356).
- Improved compatibility when running the IDE using Lua 5.2.
- Improved handling of names with Unicode chars during debugging on Windows (#559).
- Limited requesting attention on debugging starts to happen when debugging is suspended.
- Moved wxlua version number to a better location in the About screen.
- Optimized path generation in directory traversal (#260).
- Removed a workaround for wxlua build issue as it's no longer needed.
- Replaced `ConsoleClear` with `Erase` methods for the Console object.
- Removed search panel from the list of floated panels as it shouldn't be there.
- Removed `allowinteractivescript` setting as it doesn't need to be configurable (#538).
- Replaced `EditorIsModified` with document method calls.
- Spanish translation updated
- Switched to using client size instead of system metric to get screen width (#260).
- Switched to using `KEY` event in search panel to make it work with wxwidgets 3.1+ (#260).
- Switched to per-editor tracking in `UPDATEUI` event.
- Updated `interpreter` menu to use a clone to avoid Linux assertion.
- Updated Italian Translation (closes #586).
- Updated french translation as of df381b5 (see #70)
- Updated Russian translation (#70).
- Updated translation files with new messages (#70).
- Updated LuaForWindows interpreter to accept command line parameters (#582).
- Updated LuaForWindows interpreter to properly pass `arg` to the script (closes #582).
- Updated `GetDocument` to not fail when no editor is passed.
- Updated live coding to group number updates together for `Undo`/`Redo` purposes.
- Updated `Toggle Breakpoint` and `Break` shortcuts for consistency (#419).
- Updated love2d API for v0.10.0 (#247).
- Updated script to process new love2d API format (with `variants`).
- Updated showing filename of the missing interpreter in the project list (#570).
- Updated build scripts to use own wxwidgets repository to better sync build versions (#260).
- Updated build scripts to remove an error from the check for missing methods in wxlua.
- Updated README to remove outdated .ini reference from Estrela section.
- Updated instructions in the `estrela` configuration file to reference `include` command.
- Updated luasec build script to use the latest openSSL version (1.0.2d).
- Updated UTF-8 validation to use wxwidgets libraries for better performance (#556).
- Updated clipboard copy to make non-UTF-8 data to work on OSX (#260, #556).
- Updated Console history to work with UTF-8 invalid strings (#260, #556).
- Updated `Ctrl/Shift-Ins` and `Shift-Del` to work in all editors (#260, #556).
- Updated `Output` and `Console` to display invalid characters as is (#260, #556).
- Updated config sample to remove no longer needed `G` references.
- Updated config processing to simplify access to global functions.
- Updated config processing to allow use of `package` field.
- Updated windows launcher code to use manifest for hidpi awareness.
- Updated `AddConfig` method to accept single filename in addition to a list (#166).
- Updated event handling to better handle events that are executed once (#260).
- Updated `sample` package events for more accurate output.
- Updated default size/position for the first launch without saved settings.
- Updated tests to use a separate .ini file to minimize conflicts.
- Updated Corona API for v2015.2731.
- Updated Corona API processing script to follow Lua guidelines.
- Updated Corona API processing script to handle type inheritance.
- Updated `Save As`/`Open` command to use editor specific extensions instead of all.
- Updated capturing editor information during search to work with selections (#547, #416).
- Updated `Replace` and `Replace All` to take selection into account (#547, #416).
- Updated toolbar icons to fix black color in some images.
- Updated `SetDllDirectory` handling to avoid breaking dlopen with wxwidgets 3.1+ (#260).
- Updated Corona interpreter to avoid caching specified path.
- Updated tests to handle platform-specific tests.
- Updated directory traversing tests to work with smaller directories.
- Updated default file mask to match files without extension (#260).
- Updated tests to use a package instead of the obsolete app method.
- Updated wxwidget path in the build script to use git repository after wxwidgets migration.
- Updated menu shortcuts to avoid conflicts in the `File` menu (#540).
- Updated README with features in 1.20.
### Fixes
- Fixed showing cursor in search panel fields after file search.
- Fixed reapplying markers after reloading modified file (#419).
- Fixed setting interpreter after launching with non-existing project.
- Fixed showing package errors during project switches (#555).
- Fixed `include` command not checking needed `packages` folders to load from (#555).
- Fixed resetting the default interpreter after selecting a non-existent one.
- Fixed restoring project-specific interpreter when switching projects (#570).
- Fixed restoring project-specific interpreter after relaunch (fixes #570).
- Fixed expanding sub-trees in project directory when set to the disk root on Windows.
- Fixed search navigation after selecting one variable instance (fixes #565).
- Fixed editing fragments in folded text (follow-up to d2ddc96a; #564).
- Fixed editing multiple selections when selection is in folded fragments (fixes #564).
- Fixed copy/paste on Windows when UTF-8 invalid strings end in new line (#260, #556).
- Fixed debugging of Busted scripts (closes #552).
- Fixed skipping editor tabs when clicked in some cases on OSX (closes #546).
- Fixed toolbar size not being adjusted on the very first launch.
### Incompatibilities
- Changed `Toggle Breakpoint` shortcut from `F9` to `Ctrl/Cmd-F9`.
- Removed `Project | Break` shortcut to avoid conflict with breakpoint navigation.
- Removed `allowinteractivescript` setting as no longer needs to be configurable (#538).
## v1.20 (Oct 08 2015)
### Highlights
- Added symbol indexing of project files for project-wide search.
- Added support for `file@symbol` fuzzy search (#385).
- Added processing of `ini` setting relative to the IDE location (#483).
- Improved memory handling for large files.
- Improved application performance and memory usage.
- Improved auto-complete order of results and suggestions for case-sensitive matches.
- Updated Windows launcher to add dpi awareness for high dpi monitors.
- Upgraded Lua 5.3 interpreter to 5.3.1.
- Fixed a memory leak after a search panel is opened.
- Fixed an occasional crash from the filetree on Linux (#425, #464).
- Fixed recursive file traversal to skip directories when mask is specified.
### Special thanks
- To [riidom](https://github.com/riidom) for German translation update.
- To [Yonaba](https://github.com/Yonaba/) for French translation update.
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glslc updates.
- To Brigham Toskin for auto-complete improvements.
- To Joergen von Bargen for optimized UTF8 validation.
- To Nick Smith for Marmalade interpreter updates.
### Improvements
- Added handling of translation messages that require pluralization (#70).
- Added check for non-zero file size before reporting load progress (#530).
- Added switching interpreters by clicking on the interpreter label in the status bar.
- Added handling of editor commands (Copy/Paste/SelectAll/Undo/Redo) in search panel controls.
- Added position to the end-of-file lexer token (closes #529).
- Added reporting when a file can't be removed from a project tree.
- Added explicit initialization for `editor.autoactivate` default setting.
- Added allowing `editor.saveallonrun` with `infervalue` static analyzer (closes #524).
- Added support for `include` command in config files.
- Added document `Close` method (#166).
- Added descriptions for new Lua 5.3 `math.*` and `coroutine.*` functions.
- Added functions new to Lua 5.3 to the list of keywords.
- Added reporting of deserialization failures for saved package data.
- Added collapsing white spaces from names shown in the Outline.
- Added workaround for a memory leak in wxlua after a search panel is opened.
- Added jumping to the current function in the outline (#515).
- Added highlighting current functions for better visibility (#515).
- Added skipping unneded fields from the symbol index to reduce memory usage (#515).
- Added showing position of the current function in the Outline (closes #515).
- Added explicit editor destroy during find and replace to conserve memory.
- Added explicit editor destroy during symbol indexing to conserve memory.
- Added turning jitting on when running under LuaJIT.
- Added `Run to Cursor` to the popup menu in the editor (#413).
- Added showing memory usage stats in the status bar configured by `showmemoryusage`.
- Added skipping opening a file from symbol search when nothing is matched.
- Added skipping directories during directory traversal (#499).
- Added `SetStatusFor` package method to set temporary status (#166).
- Added forcing immediate refresh of symbol index when requested from the menu (#499).
- Added `onMenuOutput` event (#166).
- Added `onMenuWatch` event (#166).
- Added disabling symbol indexing for directories/projects (#499).
- Added refreshing of symbol index to the project menu (#499).
- Added reporting of the number of files queued for indexing (#499).
- Added reporting when indexing is completed (#499).
- Added `GetOutline` package method (#166, #499).
- Added exclusion to not report `arg` as global in static analysis (closes #503).
- Added `commandbar.width` to set the width of command bar.
- Added skipping symbol index queue when symbol inactivity is not set (#499).
- Added setting different types of indentation guides.
- Added optimization with prefiltering for short patterns (#31, #499).
- Added status message during index update (#499).
- Added purging of outdated cache for symbol indexing (#499).
- Added symbol processing of tabs that are not saved yet (#499).
- Added indexing of project files (#499).
- Added `commandbar.maxitems` configuration setting (#499).
- Added caching of symbols for open files (#499).
- Added support for `file.lua@symbol` fuzzy search (#385).
- Added symbol search in all open files (#385).
- Added check to avoid loops in type assignment during auto-complete (#498).
- Added primitive handling of `require` in type assignments for known APIs (fixes #498).
- Added support for aborting file reading callback (#491).
- Added progress display when loading large files (#491).
- Added status methods: `GetStatus`, `PushStatus`, and `PopStatus` (#166).
- Added `onMenuOutline` callback (#166, #337).
- Added ability to toggle outline sorting from the local menu (#337, #494).
- Added activating Output panel after compilation errors.
- Added package `SetStatus` method (#166).
- Added `Ctrl/Cmd-Enter`/`Ctrl/Cmd-Shift-Enter` to add line after/before the current one (#334).
- Added ignoring current selection in auto-complete with `Shift-Enter` (closes #494).
- Added hiding auto-complete after typing one of the offered options (#494).
- Added activating Output notebook to show search results if it's hidden (#416).
- Added reporting of errors when unable to open file for static analysis.
- Added collapsing whitespaces in function parameters in the outline (#337).
- Added emphasis for the preference type in the config file template.
- Added `FileSize` method as the default one returns non-zero result for non-existing files.
- Added reporting of `FileWrite` failing to write the entire content.
- Added package methods `AddIndicator`, `GetIndicator`, and `RemoveIndicator` (#166).
- Added missing `Detach Process` id to keymap (pkulchenko/MobDebug#19).
- Added a check for `ini` setting pointing to a path with a writeable directory (#483).
- Added a check for `ini` setting pointing to a directory (#483).
- Added processing of `ini` setting relative to the IDE location (closes #483).
- Added Watch view refresh after switching focus when needed.
- Added Stack view refresh after switching focus when needed.
- Added forced `Refresh`/`Update` to improve redrawing of commandbar on Windows 8.
- Added a check for a window to be shown to avoid callback recursion on OSX (fixes #473).
- Added package `IsWindowShown` method (#166).
- Added package `onEditorPreClose` event (#166, closes #461).
- Added deleting the rest of the word on auto-complete (`acandtip.droprest`).
- Added closing editor tab when renaming to an open file from the project tree.
- Added refresh of the target file after renaming from the project tree.
- Added a check for object with a focus (occasionally triggered on Linux).
- Added workaround to fix crash on Linux from the project tree (#425, #464).
- Added `DoWhenIdle` package method (#166).
- Disabled unhiding one of wxwidgets windows that is only used for message passing (Windows).
- Disabled initial highlight when showing current function disabled in the outline (#515).
- Disabled dragging out search results tab to avoid unexpected results (#416).
- Enabled compilation during running/debugging (closes #479).
- Enabled static analysis during running/debugging (#479).
- Integrate ZeroBrane with Marmalade's Hub GUI
- Improved auto-complete suggestions for case-sensitive matches.
- Improved compactness of saved package settings (#166, #499).
- Improved performance of saving symbol index data (#499).
- Improved memory usage when closing large files (#491).
- Improved handling of large files (#491).
- Improved the order of results in auto-complete (closes #469).
- glslc tool: add menu option for pre-process mode
- Optimized saving package settings (#166, #499).
- Optimized UTF8 validation (thanks to Joergen von Bargen).
- Optimized handling of multi-line changes in the editor (closes #477).
- Removed forced garbage collection as it led to crashes on Linux (#425, closes #464).
- Revised: auto-complete results (amends #469, w/@pkulchenko patch)
- Switched to the bottom location for the search results by default (#416).
- Updated italian translations (thanks to Leo Bartoloni)
- Updated Russian translation (#70).
- Update de.lua (thanks to riidom)
- Updated french translation as of commit (thanks to Yonaba)
- Updated translation files for new messages (#70).
- Updated translation logic to accept empty tables for pluralization values (#70).
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
- Updated OSX launcher to keep `DYLD_LIBRARY_PATH` if already set.
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
- Update marmalade API definition to 7.9
- Updated static analyzer (luainspect) to take globals in 'required' files into account (#520).
- Updated static analyzer to refresh cache of 'required' modules (#520).
- Updated C/cpp spec to skip `if(...)` from the list of functions.
- Updated C/cpp spec to properly handle functions at the beginning of a file.
- Updated package data serialization to use simpler dumper for faster processing.
- Updated saving symbol index to be called less frequently (#499).
- Updated list of fields to skip from saved symbol index (#499).
- Updated Run/Debug to not force saving new tabs when `Start` file is set.
- Updated interpreter handling to allow setting of default value in the config (closes #518).
- Updated highlighting of the current function in the Outline to select one item (#515).
- Updated auto-complete to close when one of the options matches the current input.
- Updated applying limit to the commandbar results to allow them to be resorted.
- Updated status messages for better visibility on OSX during index refresh (#499).
- Updated tracking of editor updates to skip unneeded notifications on OSX (#499).
- Updated symbol refresh to do processing as soon as the path is known (#499).
- Updated symbol index to skip unused elements in serialization (#499).
- Updated prefiltering to limit prefix to avoid penalty for long `s.*s.*s...` (#31).
- Updated package `SetSettings` method to allow passing of additional parameters (#166).
- Updated status of files indexing for symbol search (#499).
- Updated `DoWhenIdle` handling to gracefully handle a long queue.
- Updated `Go To Symbol` to refresh files loaded in the preview (#499, #385).
- Updated symbol search to only refresh outline when it's not populated (#385).
- Updated search logic to avoid showing search results in recent files (#416).
- Updated line number handling to adjust for large files (#491).
- Updated `busted` interpreter to check for proper extension on Windows (closes #495).
- Updated handling of binary and utf8 validness checks for large files (#491).
- Updated build scripts for Lua 5.3 to use 5.3.1.
- Updated toolbar to show large icons by default on large screens.
- Updated outline to only retrieve entry text when there are tokens to process (#337).
- Updated getting text length without requesting editor content.
- Updated showing function indicator handling to allow for easier enabling.
- Updated indicator processing to use new API.
- Updated ID references in toolbar to use the new access method.
- Updated ID references in keymap to use the new access method.
- Updated `Detach Process` to allow access to it while the process is running.
- Updated metalua/static analyzer to accept long integer and imaginary numbers (closes #482).
- Updated internal parser to accept long integer, imaginary, and floating point hex numbers (#482).
- Updated internal parser to accept numbers that start with a period (#482).
- Updated compilation and static analysis to keep output when running/debugging (#479).
- Updated indentation after strings with brackets and escaped quotes (#324).
- Updated `AnalyzeString` to add filename parameter (closes #463).
- Updated Windows launcher to add dpi awareness for high dpi monitors.
- Upgraded Lua 5.3 interpreter to 5.3.1 on Linux (x86 and x64).
- Upgraded Lua 5.3 interpreter to 5.3.1 on OSX.
- Upgraded Lua 5.3 interpreter to 5.3.1 on Windows (closes #453, closes #460).
- Upgraded Mobdebug (0.628) to include `keyignore` serializer option.
- Upgraded Mobdebug (0.627) to improve debugging of code with overloaded `string` methods.
- Upgraded Mobdebug (0.624) to make `DONE` async and to add `__tostring` protection (closes #446).
### Fixes
- Fixed text search and fuzzy symbol search in symlinks (#458, #530).
- Fixed opening only one tab for external debugging of dynamic code on Linux (closes #526).
- Fix live picking up debug vs release binaries (Marmalade)
- Fixed highlighting for those specs that don't have information on where functions end (#515).
- Fixed highlighting the current function when anonymous functions are hidden (#515).
- Fixed styling of comments that include markup inside markup (fixes #514).
- Fixed updating symbols in new files that haven't been indexed yet (#499).
- Fixed opening empty files (fixes #510).
- Fixed autocomplete for words that may include underscores in suggestions.
- Fixed crash on OSX during symbol indexing when filetree menu is open (#499).
- Fixed crash on Linux during symbol indexing when filetree menu is open (fixes #507).
- Fixed duplicates between variables and dynamic words in auto-complete.
- Fixed uncommenting of the last line in the selection to keep un/comment reversible (fixes #509).
- Fixed assignment parsing when the type value is re-assigned (#498).
- Fixed mouse selection in auto-complete on OSX (fixes #496).
- Fixed fuzzy file search to not double open already opened files (#31).
- Fixed indentation of lines that end with partial long strings with opening brackets (#324).
- Fixed indentation of lines with long strings that include opening brackets (#324).
- Fixed indicators on table fields after variables that look like multiple assignments (#492).
- Fixed indicators on table fields after variables (fixes #492).
- Fixed variable usage based on static analysis.
- Fixed initial select-and-find search.
- Fixed returning focus to the editor after find-in-files followed by page search (#416).
- Fixed performance of initial fuzzy search for line numbers (closes #476).
- Fixed Output tab name when debugging aborted after run-time error.
- Fixed recursive file traversal to skip directories when mask is specified.
- Fixed crash in `collectgarbage` from the filetree on Linux (#425, #464).
## v1.10 (May 13 2015)
### Highlights
- Redesigned search functionality; added incremental search and replace-in-files preview.
- Updated love2d API for v0.9.2.
- Upgraded Mobdebug (0.62) to add vararg processing.
- Added `excludelist`/`binarylist` to exclude files and folders.
- Added skipping binary files during find-in-files and fuzzy search.
### Special thanks
- To [David Feng](https://github.com/DavidFeng) for fixing a broken symbolic link.
- To [Robert Machmer](https://github.com/rm-code) for updated German translation and fixes for love2d engine name/description.
- To [Derek Bailey](https://github.com/dbaileychess) for adding context menu item to update the contents of the tree.
### Improvements
- Added closing search results with `Close Page` for consistency (#416).
- Added option to show search results in multipe tabs (#416).
- Added package `IsValidCtrl` method (#166).
- Added skipping binary files in commandbar (#31, #455).
- Added handling of `**` in exclusion masks (#455).
- Added `excludelist`/`binarylist` to exclude files and folders (closes #455).
- Added `search.autohide` option to hide search panel after search (#416).
- Added `debugger.requestattention` to configure focus switch (closes #449).
- Added closing search panel on `Escape` in the editor (closes #450, #416).
- Added `search.zoom` setting to zoom search results (#416).
- Added warning when interpreter can't be loaded and the default one is used.
- Added support for `wxImage` used in `imagemap` (#436).
- Added icon tint processing (`imagetint` option).
- Added `search.contextlinesbefore`/`search.contextlinesafter` settings (#416).
- Added `search.autocomplete` setting do configure search autocomplete (#416).
- Added auto-complete for find and replace fields (#416).
- Added saving search settings between restarts (#416).
- Added deleting of protected text in Cut/Paste operations (closes #412).
- Added refresh context menu item to update the contents of the tree (thanks to Derek Bailey).
- Added ignoring assignment in comments for auto-complete.
- Added preview screen to check changes in replace-in-files (#416).
- Added search toolbar button to set/unset context in search results (#416).
- Allowed for larger default size of docked panels (#424).
- Allowed closing `Search Results` tab while search is in progress (#416).
- Disabled refresh when `outlineinactivity=nil` and `showonefile=true` (#337).
- Improved incremental processing to avoid marking table fields as variables.
- Improved logic to skip binary files during search (#416).
- Moved cancelling auto-complete popup to idle event (fixed #447).
- Moved winapi dll to `clibs` folder to avoid conflict with other winapi versions.
- Optimized `Go To File` file traversal in commandbar (#31).
- Redesigned the search panel (closes #416; closes #398).
- Removed option to request attention from breakpoint activation (#449, closes #454).
- Removed warnings from loose parser to stop polluting stderr on Linux (#425).
- Removed hardcoded references to menu positions to simplify adding new items.
- Removed saving .bak files as it's replaced by replace-in-files preview (#416).
- Reorganized folding to allow more editor-like components to be foldable.
- Switched to using `wxFileSize` instead of `Length` (fixes #458).
- Updated event documentation.
- Upgraded Mobdebug (0.62) to add vararg processing.
- Updated build files to use release version of Lua 5.3 (#453).
- Updated Corona interpreter to allow debugging on Linux using Wine.
- Updated folder traversing logic to limit number of open folders (fixes #441).
- Update Readme.md to use correct name for the LOVE framework (thanks to Robert Machmer).
- Updated Linux build scripts to add `debug` option.
- Updated love2d interpreter to use proper engine name/description (closes #433) (thanks to Robert Machmer).
- Updated german translation (#432, #70).
- Updated love2d APU for v0.9.2 (#247).
- Update german translation (thanks to Robert Machmer).
- Updated `Select and Find` to capture selection for subsequent use (#416).
- Updated `Find Next/Prev` to continue search using the current find text (#416).
- Updated unfolding of folded lines before delete or overwrite.
- Updated folding to collapse only when clicked on the header.
- Updated config samples to use `ID.code` instead of obsolete `G.ID_code`.
### Fixes
- Fixed crash on Windows by disabling events in Outline refresh (fixes #442).
- Fixed file traversing not to match `foo.bar!` for `*.bar' mask (#416).
- Fixed showing of not translated messages that require pluralization.
- fix broken symbolic link (thanks to David Feng).
- Fixed an empty popup (that could lead to a crash) when dynamic words is on.
- Fixed commandbar positioning on Linux affected by 5b665477 (#31).
- Fixed loose parser to handle multiple assignments (fixes #430).
- Fixed editor activation after dragging of inactive tab (fixes #427).
- Fixed indentation after comment with markdown markup (closes #428, #324).
- Fixed auto-complete issue causing looping warning (#143).
- Fix commandbar position with split editor tabs (#31).
- Fixed re-indenting of selection with comments at the top of the file (#324).
- Fixed restoring pane size after hide/show operations (fixes #424).
### Incompatibilities
- Removed saving .bak files as it's replaced by replace-in-files preview.
## v1.00 (Mar 13 2015)
### Highlights
- Added directory mapping to the project tree (closes #223).
- Added `Run to Cursor` (closes #413).
- Added support to set/unset start file for a project (closes #411).
- Added opening/creating file from the command bar (#31).
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
- Updated Corona API for v2015.2576.
### Improvements
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
- Added project path in the error reporting for love2d/corona interpreters.
- Added an example with enabling Emacs bindings in the editor.
- Added Russian translations for new messages (#70).
- Added a warning on class resolution taking too much time in auto-complete.
- Added check for empty/comment lines when breakpoints are set.
- Added directory mapping to the project tree (closes #223).
- Added `Run to Cursor` (closes #413).
- Added document method `GetTabText` (#166).
- Added showing love2d console when requested.
- Added support to set/unset start file for a project (closes #411).
- Added requesting attention for debugger even when the file is not activated.
- Added reporting of location in more cases when debugging is suspended.
- Added starting debugging even when the file is not opened in the IDE.
- Added switching project directory from the command bar (#31).
- Added trimming of trailing spaces in the directory name when switching projects.
- Added closing preview if the file failed to load in commandbar (#31).
- Added handling of `Ctrl/Cmd-Enter` in commandbar to force open file (#31).
- Added skipping loading files with empty and directory names.
- Added trimming of trailing spaces in the file name when loading a file.
- Added file selection in the project tree after saving a new file.
- Added opening/creating file from the command bar (#31).
- Disabled menu item for renaming/editing for mapped directories (#223).
- Disabled field checks for local parameters in staic analyzer (closes #421).
- Improved static analyzer to handle more cases with `infervalue` set (#414).
- Refactored use of image constants in the project tree.
- Refactored document modification tracking to remove `SetDocumentModified`.
- Refactored path normalization for project directory.
- Updated Corona API for v2015.2576.
- Updated static analyzer output formatting.
- Updated analyzer to also check value of `pairs` parameter (#414).
- Updated `debugging suspended` message to not trigger with `runonstart`.
- Updated messages in interpreters to fix line endings.
- Updated lettercase in menu items for consistency.
- Updated UpdateUI handling to fix multi-view refresh, as in DocumentMap (#352).
- Updated Outline to use editor tab text (instead of a file name).
- Updated message on failure to start debugging to add the file name.
- Updated `debugging suspended` message to put location in quotes.
- Updated line check in command bar to not trigger on Windows file names.
- updated glewgl api (glew 1.12.0)
### Fixes
- Fixed analyzer to check value of `ipairs` parameter (fixes #414).
- Fixed OS detection on Linux that sets `DYLD_LIBRARY_PATH` (fixes #417).
- Fixed saving auto-recovery record with no editor tabs opened (fixes #418).
- Fixed looping in auto-complete when processing recursive assignments.
- Fixed filename used in the recovery message.
- Fixed Output/Console window to stay shown after failure to start debugging.
- Fixed an issue with search initiated from Output/Console panels (fixes #406).
- Fixed auto-complete for non-default `acandtip.strategy` values (fixed #409).
- Fixed loading file with absolute name and line number (fixes #408).
## v0.95 (Jan 30 2015)
### Highlights
- Added fuzzy search with `Go To File`, `Go To Symbol`, `Go To Line`, and `Insert Library Function`.
- Added auto-complete support for LDoc '@tparam' and '@param[type=...]'.
- Added armhf architecture support (thanks to Ard van Breemen).
- Updated static analyzer to support `goto`/labels and bitops for Lua 5.2/5.3.
- Updated internal parser to support Lua 5.2/5.3 syntax.
- Updated Mobdebug to improve Lua 5.3 compatibility (thanks to Andrew Starks).
- Update API descriptions with functions new in Lua 5.3.
### Special thanks
- To [Ard van Breemen](https://github.com/ardje) for armhf architecture support.
- To [Evandro Costa](https://github.com/evandro-costa) for Brazilian Portuguese (pt-br) translation.
- To [Andrew Starks](https://github.com/andrewstarks) for Lua 5.3 compatibility improvements.
- To [Alexis Jarreau](https://github.com/Fringale) for French translation update.
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
- To [riidom](https://github.com/riidom) for German translation update.
### Improvements
- Added showing/hiding Output/Console panel during debugging.
- Added `bordersize` to configure sash size.
- Added package `LoadFile` method (#166).
- Added Russian translation for new messages (#70).
- Added syntax highlighting for functions new in Lua 5.3.
- Added `commandbar.prefilter` to commandbar to improve performance (#31).
- Added custom formatting for APIs.
- Added `Insert Library Function` to `Navigate` menu.
- Added hiding tooltip/auto-complete popup after undo/redo/delete operations.
- Added `api` handling to the config to support custom APIs.
- Added Lapis and Moonscript debugging links to README.
- Added `Contributing` section to README.
- Added LICENSE link to README.
- Added Lua 5.3 links to README; updated links to remove '.html'.
- Added `PgUp` and `PgDn` navigation for commandbar (#31).
- Added auto-complete support for LDoc '@tparam' and '@param[type=...]'.
- Added Brazilian Portuguese (pt-br) translation.
- Added showing the symbol under cursor in `Go To Symbol` (#385).
- Added `editor:ValueFromPosition` method (#166).
- Added `Go To Symbol` support to the commandbar (#31, closes #385).
- Allowed renaming of files with different case in the project tree.
- Added update of file name in the Outline when editor tab is updated (#337).
- Added check for `styles` being reset in the config file (closes #383).
- Added loading file from project directory with "proj file" on command line.
- Added skipping of binary files in commandbar preview (#31).
- Added CONTRIBUTING file.
- Added clearing Output window before showing Find-in-Files results.
- Added default values for Outline config settings (#337).
- Added package `GetProjectNotebook` method (#166).
- Added saving Outline tab configuration in the Project notebook (#337).
- Added `outline.sort` option to sort items in the outline (#337).
- Added `outline.showflat` option to show flat outline (#337).
- Added package `GetOutlineTree` method (#166).
- Add support for armhf architecture
- Added document `Save` method (#166).
- Added `init.lua` to the search path (fixes `require 'dist'`).
- Added forced garbage collection when switching from the app.
- Added penalty for missing characters in fuzzy search (#31).
- Added line navigation to `Navigate` menu (#31).
- Added handling of line numbers in command bar (#31).
- Added caching to improve commandbar performance on large folders (#31).
- Added setting explicit focus on preview tab in commandbar (#31).
- Added preview on first selection in commandbar (#31).
- Added file preview to commandbar (#31).
- Added fuzzy search for files in commandbar (closes #31).
- Added displaying the list of current tabs for commandbar (#31).
- Added commandbar prototype for file navigation (#31).
- Added reset of tokens when editor content is reloaded (#337).
- Enabled html and C/cpp specs by default (#395).
- Improved handling of complex types in LDoc expressions in auto-complete.
- Improved failed search 'shake' visualization by forcing window redraw.
- Improved command line file check for relative files on Windows.
- Split console output into shorter lines to improve memory usage and handling.
- Renamed `debugger.stackmax*` settings to `debugger.maxdata*`.
- Removed double check for invalid UTF-8 output in console.
- Refactored ID handling to allow using `ID.COMMENT` in config files.
- Removed `wxwidgets` from the list of default APIs for Lua interpreters.
- Refactored handling of special symbols in commandbar (#31).
- Removed border from tree controls (#305).
- Updated language files with new messages (#70).
- Update API descriptions with functions new in Lua 5.3.
- Updated loose parser to support Lua 5.2+ labels.
- Updated loose parser to support `goto` and Lua 5.3 bitops.
- Updated Metalua to support Lua 5.3 bitops.
- Updated Metalua to support `goto`/labels in static analysis for Lua 5.2/5.3.
- Upgraded Mobdebug (v0.611) to fix tooltips during Corona debugging (closes #387).
- Updated `CommandBarShow` to accept text fragment to select (#31).
- Updated `GetKnownExtensions` to accept an optional extension to match against.
- Updated `FileRead` to accept optional length.
- Updated layout settings to use constants and new package API.
- Updated parser to avoid splitting `foo.bar` in incremental processing.
- Upgraded MobDebug (0.61) to add `basedir` support.
- Updated status refresh to only happen for the active editor.
- Updated toolbar UI checks to happen when running/debugging (#352).
- Updated Corona integration to hide console on OSX (2014.2393+).
- Upgraded Mobdebug to 0.613 to improve Lua 5.3 compatibility (#401); thanks to @andrewstarks.
- Updated usage instructions in README.
- Update de.lua
### Incompatibilities
- Renamed `debugger.stackmax*` settings to `debugger.maxdata*`.
- Removed `wxwidgets` from the list of default APIs for Lua interpreters; use `api` config setting to include it.
### Fixes
- Fixed search navigation to shift horizontally when `usewrap` is off.
- Fixed indentation for lines with mixed string separators (#324, #388).
- Fixed indentation for lines with escaped slashes (#324, closes #388).
- Fixed find-and-replace to replace in already selected fragment if matched.
- Fixed refresh of files in command bar preview when selected (#31).
- Fixed recovery of empty (`untitled`) tabs.
- Fixed an auto-complete issue after `repeat until <var>`.
- Fixed setting focus to the editor in commandbar with one tab (#31).
- Fixed auto-complete after text not separated by a whitespace or bracket.
- Fixed an error when disabling outline by setting `outlineinactivity=nil`.
## v0.90 (Nov 08 2014)
### Highlights
- Added function outline.
- Added Lua 5.3 (beta) binaries and debugging support.
- Added scope-aware auto-complete for local/global variables.
- Added hiding/showing files by type in the project/filetree.
- Added Esperanto (eo) translation.
- Improved compatibility with Lua 5.2 interpreter.
- Improved compatibility with system/custom Lua interpreter.
### Special thanks
- To [cosmotect](https://github.com/cosmotect) for added Esperanto translation.
- To [riidom](https://github.com/riidom) for updated German translation.
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glsl improvements.
- To [Wojciech Milkowski](https://github.com/milkowski) for making indentation guide configurable.
- To [sclark39](https://github.com/sclark39) for adding project dir to find dialog paths.
### Improvements
- Added Lua 5.3 (beta) support and binaries.
- Added Russian translation for new messages (#70).
- Added `AddPackage` and `RemovePackage` methods (#166).
- Added `CreateBareEditor` package method (#166).
- Added `GetAPI` method for interpreter (#166).
- Added `GetOutputNotebook` package method (#166).
- Added `IsPanelDocked` package method (#166).
- Added `Run` and `Run as Scratchpad` buttons to the toolbar.
- Added `acandtip.maxlength` option for setting the length of a tooltip.
- Added `function` handling to the token processing.
- Added `imagemap` setting to support custom images.
- Added `onEditorCallTip` method (#166).
- Added `showonefile` option for the outline to always show one file (#337).
- Added an Esperanto (eo) translation.
- Added build support for Lua 5.3-alpha and luasocket for Lua 5.3.
- Added check for existing process id before stopping the process.
- Added check for pending data to improve re-starting debugging session.
- Added collapsing outlines for files in inactive tabs (#337).
- Added creating italic font if only the main one is provided.
- Added document `SetActive` method (#166).
- Added drag-and-drop support for the Outline tab (#337).
- Added example of enabling `Opt+Shift+Left/Right` shortcut on OSX.
- Added function outline (closes #337, closes #222).
- Added handling of `~` in launch command path.
- Added hiding/showing files by type in the project/filetree (closes #375).
- Added local/global indicators to function outline (#337).
- Added marking file after showing files in the tree (#375).
- Added navigation based on 'filename:line:pos' in the Output window.
- Added option for not/showing anonymous functions in the outline (#337).
- Added package `AddTool` and `RemoveTool` methods (#166).
- Added package `CreateImageList` method (#166).
- Added package `ExecuteCommand` method (#166).
- Added package `FindTopMenu` method (#166).
- Added package `GetAppName` method and removed hardcoded name references (#166).
- Added package `GetConsole` method (#166).
- Added package `GetKnownExtensions` method (#166).
- Added project dir to find dialog paths; thanks to @sclark39 (closes #358).
- Added rule to enable `Set From Current File` only when available.
- Added scope-aware auto-complete for local/global variables (closes #291).
- Added scrolling to the top of the outline when `showonefile` is set (#337).
- Added sending Corona SDK simulator output to the Output window on Windows.
- Added translation label for `Toggle Bookmark` toolbar icon (#70, #373).
- Added unindent on backspace (controlled by `editor.backspaceunindent`).
- Added view menu for the Outline window (#337).
- bugfix in output callback for commandline tools
- bugfix on extension change save-as, related to new indication handling
- cg/hlsl/glsl refine isfndef capture, mostly to react on GLSL's layout mechanism
- Disabled moving of Output/Console/Project tabs between panels.
- Disabled closing tabs in floating panels.
- Improved `ffitoapi` tool logic when no replacement is made.
- Improved compatibility with Lua 5.2 interpreter (closes #357).
- Improved scroll positioning in the outline after tab changes (#337).
- Improved support for non-lua specs in the outline (#337).
- Minor update to indentation guides handling (#371).
- Moved 'default' search path to be searched first (#357).
- Reduced rate of toolbar UI checks to improve performance (fixes #352).
- Reduced the number of focus changes in the outline (#337).
- Reduced unnecessary editor processing to improve performance (#352).
- Refactored `GetBitmap` package method (#166).
- Refactored `tools` interface to make it easy to add/remove tools.
- Refactored adding editor tab to ensure callbacks have document data.
- Refactored default `fprojdir` and `fworkdir` from the interpreter code.
- Refactored drag-and-drop processing for Project/Output window tabs (#377).
- Refactored panel docking; added `AddPanelDocked` package method (#166).
- Refactored timer usage for consistency.
- Remove function dropdown from the toolbar (#337).
- Removed menu separator from the Tools menu.
- Removed prepending libraries for debugging to LUA_CPATH when custom interpreter is specified.
- Removed reference to `funclist`, which is no longer needed.
- Removed unused image files.
- Renamed `markvars` method used in spec files to `marksymbols`.
- Renamed image files to have names correspond to the content.
- Reorganized default config settings.
- Reorganized token list processing to keep it within the editor.
- Restored removed function in Lua spec (partial revert of 713d0935).
- Switched to using `Is{Input|Error}Available` instead of `stream:CanRead`.
- updated luxinia2 related files
- Update de.lua
- Updated C-based specs to handle function calls without parameters.
- Updated C-based specs to use `marksymbols` to provide outline for C functions.
- Updated Lua 5.3 build scripts.
- Updated `AddPackage` to assign package file name (#166).
- Updated `RemoveMenuItem` to disconnect handlers attached to the main frame (#166).
- Updated `package.config` description to remove reference to Lua 5.2.
- Updated `showanonymous` to a label for anon functions in the outline (#337).
- Updated code based on static analysis suggestions.
- Updated command launch handling to allow output suppression.
- Updated function call indicator to support `isfncall` and `marksymbols`.
- Updated function indicator processing to use ranges.
- Updated handling of extensions to allow more symbols in extensions.
- Updated images in the outline; added `showmethodindicator` option (#337).
- Updated indicator processing to improve performance on large files.
- Updated interpreter processing to run after packages are loaded.
- Updated label for anonymous functions in the outline (#337).
- Updated language files with new messages (#70).
- Updated markup processing to allow for 3+ markup sequences.
- Updated markup processing to support links in non-editor documents.
- Updated messages for to match translations (#70).
- Updated method of collapsing outline to fix crash on OSX (#337, fixes #368).
- Updated outline logic to show on the very first launch (#337).
- Updated outline to always expand functions in the current file (#337).
- Updated outline to show files without functions (#337).
- Updated outline to track filename changes after `Save As` (#337).
- Updated outline to use `AddPackage` method (#337).
- Updated output callback processing not to run when nothing to process.
- Updated package `GetRootPath` to accept file/directory name (#166).
- Updated parser to avoid 'breaking' statements during incremental processing.
- Updated parser to handle `...` in function parameters.
- Updated parser to report function token before parameters (#337).
- Updated parser to store position for not-quite-valid function names.
- Updated processing of function indicators when auto-analyzer is off.
- Updated search/replace to always use the current editor/output/console tab.
- Updated static analizer to accept typedlua parser in addition to metalua.
- Updated tooltip processing to make it more consistent and better use space.
- Updated translation building script to handle non-string parameters (#70).
- Updated un/comment to keep the current selection and caret position (#360).
- Upgraded MobDebug (0.606) for `Detach Process` to correctly close debugging.
- Upgraded Mobdebug (0.607) to fix debugging after `Detach Process` command.
### Incompatibilities
- Renamed `markvars` method used in spec files to `marksymbols`.
### Fixes
- Fixed 'slow' mode of static analysis to work with Metalua 0.7.2.
- Fixed `Output` tab name after stopping/completing remote debugging.
- Fixed `Project` label shown untranslated in other languages (#70, #373).
- Fixed `Run` toolbar label not being translated (#70, #373).
- Fixed activation in `tree:FindItem` when new editor tab is opened (#166).
- Fixed an error when dragging Stack/Watch/other tabs between notebooks.
- Fixed an issue with removing first menu item in RemoveMenuItem (#166).
- Fixed an issue with searching in Output and Console windows.
- Fixed column indicator on lines with tabs (fixes #379).
- Fixed disabling Stack/Watch icons in the toolbar.
- Fixed error after using Enter multiple times in `Find in Files` on OSX.
- Fixed file renaming in the filetree after using `SaveAs`.
- Fixed flicker in the outline when auto-complete is shown (#337).
- Fixed focus switch after selecting a function in the outline and editing (#337).
- Fixed handling of remapped image files; improved error reporting.
- Fixed incorrect `binary not` calculation with wxlua and LuaJIT 2.1.
- Fixed index check during tab name update.
- Fixed keeping toolbar status after hiding it.
- Fixed localization in function outline (#337).
- Fixed localization to avoid error in `SaveAs` processing.
- Fixed navigation in function outline when `showonefile` is set (#337).
- Fixed not hiding directories when files without extension are hidden (#375).
- Fixed off-by-one error in function outline position tracking (#337).
- Fixed outline refresh after quick tab switches (#337).
- Fixed refresh of 'background' markers during debugging.
- Fixed replacement when selection doesn't match the text being searched for.
- Fixed search in files/directories with `%` in the name (fixes #369).
- Fixed storing position in `function` handling.
- Fixed stream reading for the Output to only include actually read chars.
- Fixed unused variables and constants based on static analysis.
## v0.80 (Aug 31 2014)
### Highlights

30
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,30 @@
# Help
For questions and feature discussions, please use the the maillist or the IRC channel as described in the [community section](http://studio.zerobrane.com/community) of the project website.
# Bugs
When filing a bug, please help us reproduce the issue by including the following information:
* Steps to reproduce the issue as well as the expected result. Screenshots also help.
* Your operating system and the IDE version (or the latest commit if you are using the development version).
* Any relevant configuration from the config file, if you cannot reproduce the issue with an empty config.
* Any relevant plugins, if you cannot reproduce the issue without plugins.
It always helps to make sure that the issue is still reproducible with the most recent version of the IDE.
If you think that the issue is with the *debugger* (this also includes serialization issues), then open an issue in the [MobDebug repository](https://github.com/pkulchenko/MobDebug/issues).
If the issue is with one of the *plugins*, then open an issue in the [ZeroBranePackage repository](https://github.com/pkulchenko/ZeroBranePackage/issues).
# Contributing
_By contributing to ZeroBrane Studio you are agreeing to release your contribution under the MIT License._
Thank you for contributing to ZeroBrane Studio! Here are some things you can do to improve it:
* **Fixing issues**: If you have ideas or suggestions on [fixing existing issues](https://github.com/pkulchenko/ZeroBraneStudio/issues), please update the tickets directly or send a pull request.
* **Adding translations**: See [translation documentation](http://studio.zerobrane.com/doc-translation) for details.
* **Implementing new features**: Please [discuss with us](http://studio.zerobrane.com/community) any significant changes you plan as early as possible.
Try to implement the changes as a plugin first; the project already provides [plugin API](http://studio.zerobrane.com/doc-plugin) with more than [45 plugins](https://github.com/pkulchenko/ZeroBranePackage) already available.
* **Improving documentation**: All the existing documentation is generated based on pages in [gh-pages branch](https://github.com/pkulchenko/ZeroBraneStudio/tree/gh-pages). You can provide clarifications, check the documentation for errors/typos, or fill any gaps.
* **Spreading the word**!

View File

@@ -2,7 +2,7 @@
ZeroBrane Studio sources are released under the MIT License
Copyright (c) 2011-2012 Paul Kulchenko (paul@kulchenko.com)
Copyright (c) 2011-2015 Paul Kulchenko (paul@kulchenko.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,16 +2,24 @@
[ZeroBrane Studio](http://studio.zerobrane.com/) is a lightweight cross-platform Lua IDE with code completion,
syntax highlighting, remote debugger, code analyzer, live coding,
and debugging support for several Lua engines (LuaJIT,
[Löve 2D](http://notebook.kulchenko.com/zerobrane/love2d-debugging),
and debugging support for several Lua engines
([Lua 5.1](http://studio.zerobrane.com/doc-lua-debugging),
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging),
[Lua 5.3](http://studio.zerobrane.com/doc-lua53-debugging),
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging),
[LÖVE](http://notebook.kulchenko.com/zerobrane/love2d-debugging),
[Moai](http://notebook.kulchenko.com/zerobrane/moai-debugging-with-zerobrane-studio),
[Gideros](http://notebook.kulchenko.com/zerobrane/gideros-debugging-with-zerobrane-studio-ide),
[Corona](http://notebook.kulchenko.com/zerobrane/debugging-and-live-coding-with-corona-sdk-applications-and-zerobrane-studio),
[Marmalade Quick](http://notebook.kulchenko.com/zerobrane/marmalade-quick-debugging-with-zerobrane-studio),
[Cocos2d-x](http://notebook.kulchenko.com/zerobrane/cocos2d-x-simulator-and-on-device-debugging-with-zerobrane-studio),
[OpenResty/Nginx](http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio),
[Torch7](http://notebook.kulchenko.com/zerobrane/torch-debugging-with-zerobrane-studio),
[Redis](http://notebook.kulchenko.com/zerobrane/redis-lua-debugging-with-zerobrane-studio),
[GSL-shell](http://notebook.kulchenko.com/zerobrane/gsl-shell-debugging-with-zerobrane-studio),
[Adobe Lightroom](http://notebook.kulchenko.com/zerobrane/debugging-lightroom-plugins-zerobrane-studio-ide),
[OpenResty/Nginx](http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio)
[Lapis](http://notebook.kulchenko.com/zerobrane/lapis-debugging-with-zerobrane-studio),
[Moonscript](http://notebook.kulchenko.com/zerobrane/moonscript-debugging-with-zerobrane-studio),
and others). It originated from the [Estrela Editor](http://www.luxinia.de/index.php/Estrela/).
![ZeroBrane Studio debugger screenshot](http://studio.zerobrane.com/images/debugging.png)
@@ -22,32 +30,36 @@ and others). It originated from the [Estrela Editor](http://www.luxinia.de/index
* Small, portable, and cross-platform (Windows, Mac OSX, and Linux).
* Auto-completion for functions, keywords, and custom APIs.
* Interactive console to directly test code snippets with local and remote execution.
* Integrated debugger with local and [remote debugging](http://studio.zerobrane.com/doc-remote-debugging.html) for Lua 5.1,
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging.html),
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging.html),
and [other Lua engines](http://studio.zerobrane.com/documentation.html#debugging).
* [Live coding](http://studio.zerobrane.com/documentation.html#live_coding)
* Integrated debugger with local and [remote debugging](http://studio.zerobrane.com/doc-remote-debugging)
for [Lua 5.1](http://studio.zerobrane.com/doc-lua-debugging),
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging),
[Lua 5.3](http://studio.zerobrane.com/doc-lua53-debugging),
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging),
and [other Lua engines](http://studio.zerobrane.com/documentation#debugging).
* [Live coding](http://studio.zerobrane.com/documentation#live_coding)
with [Lua](http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style),
[Löve 2D](http://notebook.kulchenko.com/zerobrane/live-coding-with-love),
[LÖVE](http://notebook.kulchenko.com/zerobrane/live-coding-with-love),
[Gideros](http://notebook.kulchenko.com/zerobrane/gideros-live-coding-with-zerobrane-studio-ide),
[Moai](http://notebook.kulchenko.com/zerobrane/live-coding-with-moai-and-zerobrane-studio),
[Corona SDK](http://notebook.kulchenko.com/zerobrane/debugging-and-live-coding-with-corona-sdk-applications-and-zerobrane-studio),
GSL-shell, and other engines.
* Function outline.
* Fuzzy search with `Go To File`, project-wide `Go To Symbol`, and `Insert Library Function`.
* Several ways to extend the current functionality:
- specs (`spec/`): specifications for file syntax, lexer, and keywords;
- apis (`api/`): descriptions for [code completion and tooltips](http://studio.zerobrane.com/doc-api-auto-complete.html);
- apis (`api/`): descriptions for [code completion and tooltips](http://studio.zerobrane.com/doc-api-auto-complete);
- interpreters (`interpreters/`): components for setting debugging and run-time project environment;
- packages (`packages/`): [plugins](http://studio.zerobrane.com/doc-plugin.html) that provide additional functionality;
- packages (`packages/`): [plugins](http://studio.zerobrane.com/doc-plugin) that provide additional functionality;
- config (`cfg/`): settings for styles, color themes, and other preferences;
- translations (`cfg/i18n/`): [translations](http://studio.zerobrane.com/doc-translation.html) of the menus and messages to other languages;
- translations (`cfg/i18n/`): [translations](http://studio.zerobrane.com/doc-translation) of the menus and messages to other languages;
- tools (`tools/`): additional tools.
## Documentation
* A [short and simple overview](http://studio.zerobrane.com/doc-getting-started.html) for those who are new to this development environment.
* A list of [frequently asked questions](http://studio.zerobrane.com/doc-faq.html) about the IDE.
* [Tutorials and demos](http://studio.zerobrane.com/tutorials.html) that cover debugging and live coding for different environments.
* [Tips and tricks](http://studio.zerobrane.com/doc-tips-and-tricks.html).
* A [short and simple overview](http://studio.zerobrane.com/doc-getting-started) for those who are new to this development environment.
* A list of [frequently asked questions](http://studio.zerobrane.com/doc-faq) about the IDE.
* [Tutorials and demos](http://studio.zerobrane.com/tutorials) that cover debugging and live coding for different environments.
* [Tips and tricks](http://studio.zerobrane.com/doc-tips-and-tricks).
## Installation
@@ -58,24 +70,28 @@ No compilation is needed, although the scripts to compile required libraries for
```
Open file(s):
zbstudio <filename> [<filename>...]
any non-option will be treated as a file to open or a directory to set as the project directory
zbstudio [option] [<project directory>] <filename> [<filename>...]
non-options are treated as a project directory to set or a file to open
Set project directory:
zbstudio <project directory> [<filename>...]
(0.39+) a directory passed as a parameter will be set as the project directory
Overriding default configuration:
Override default configuration:
zbstudio -cfg "<luacode overriding config>" [<filename>]
e.g.: zbstudio -cfg "editor.fontsize=12" somefile.lua
Loading custom configuration:
Load custom configuration:
zbstudio -cfg path/file.lua [<filename>]
e.g.: zbstudio -cfg cfg/estrela.lua
```
If you are loading a file, you can also request the cursor to be set on a particular line or at a particular position by using `filename:<line>` and `filename:p<pos>` syntax (0.71+).
## Contributing
See [CONTRIBUTING](CONTRIBUTING.md).
## Author
### ZeroBrane Studio and MobDebug
@@ -88,14 +104,10 @@ If you are loading a file, you can also request the cursor to be set on a partic
## Where is Estrela?
The projects have been merged and ZeroBrane Studio will lead the future.
Please reassociate files with ZeroBrane Studio. To keep your history of files
and projects copy the contents of the `EstrelaEditor.ini` in your HOME
directory to `ZeroBraneStudio.ini`. If you have used Estrela for graphics
shader authoring or luxinia, create/modify the `cfg/user.lua` to include the
content of `cfg/estrela.lua` to load all tools and specifications by default
again.
The Estrela project has been merged into ZeroBrane Studio. If you have used Estrela
for graphics shader authoring or luxinia, create/modify the `cfg/user.lua` and
add `include "estrela"` (1.21+) to load all tools and specifications by default again.
## License
See LICENSE file.
See [LICENSE](LICENSE).

View File

@@ -1,6 +0,0 @@
This directory contains API definitions.
An API definition is a set of functions that are used
for displaying tooltip information on function calls or
autocomplete information.

View File

@@ -130,8 +130,14 @@ findMSB = fn "returns bit number of msb. - (intN)(intN)",
discard = fn "conditionally (<0) kill a pixel before output. - ()(vecN)",
dFdx = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
dFdxCoarse = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
dFdxFine = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
dFdy = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
fwidth = fn "returns sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
dFdyCoarse = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
dFdyFine = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
fwidth = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
fwidthFine = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
fwidthCoarse = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
interpolateAtCentroid = fn "Return value of interpolant sampled inside pixel and the primitive. - (floatN)(floatN)",
interpolateAtSample = fn "Return value of interpolant at the location fo sample. - (floatN)(floatN, int sample)",
interpolateAtOffset = fn "Return value of interpolant sampled at fixed offset offset from pixel center. - (floatN)(floatN, vec2 offset)",
@@ -166,6 +172,7 @@ imageAtomicCompSwap = fn "performs atomic operation on individual texels returns
imageStore = fn "stores the texel at the coordinate. - ()(imageN, intN coord, [int sample], vecN data)",
imageLoad = fn "loads the texel at the coordinate. - (vecN)(imageN, intN coord, [int sample])",
imageSize = fn "returns the size of the image. - (ivecN)(imageN)",
imageSamples = fn "returns the samples of the multi-sampled image. - (int)(image2DMSN)",
atomicCounterIncrement = fn "increments counter and returns old value. - (uint)(atomic_uint)",
atomicCounterDecrement = fn "decrements counter and returns old value. - (uint)(atomic_uint)",
@@ -180,6 +187,7 @@ atomicExchange = fn "performs atomic operation on memory location (ssbo/shared)
atomicCompSwap = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
textureSize = fn "returns the size of the texture (no lod required: Rect, MS and Buffer). - (intN)(samplerN, [int lod])",
textureSamples = fn "returns the samples of the multi-sampled texture. - (int)(texture2DMSN)",
textureQueryLod = fn "returns the lod values for a given coordinate. - (vec2)(samplerN, vecN coord)",
texture = fn "performs a texture lookup. Shadow samplers require base N+1 coordinate. Lod bias is optional (illegal for MS, Buffer, Rect). - (vec4)(samplerN, vecN coord, [float bias])",
textureProj = fn "performas a projective texture lookup (only Nd samplers + Rect). Shadows require N+1 base coordinate, no Lod bias allowed for Rect. - (vec4)(samplerN, vecN+1 coord, [float bias])",
@@ -248,6 +256,7 @@ local keyw =
local_size_x local_size_y local_size_z
gl_BaseVertexARB gl_BaseInstanceARB gl_DrawIDARB
bindless_sampler bound_sampler bindless_image bound_image early_fragment_tests
gl_HelperInvocation gl_CullDistance gl_MaxSamples
coherent volatile restrict readonly writeonly
image1D image2D image3D image2DRect imageCube imageBuffer image1DArray image2DArray imageCubeArray image2DMS image2DMSArray

View File

@@ -1,6 +1,7 @@
return {
-- covers both Lua 5.1 and Lua 5.2; All Lua 5.2 specific items are marked
-- with FUNCTION/ARGUMENT/ARGS/VALUE ADDED/DEPRECATED IN Lua 5.2.
-- covers Lua 5.1, Lua 5.2, and Lua 5.3;
-- Lua 5.2 and Lua 5.3 specific items are marked with
-- FUNCTION/ARGUMENT/ARGS/VALUE ADDED/DEPRECATED IN Lua 5.2 or Lua 5.3.
-- Keywords
["and"] = {type = "keyword"},
@@ -206,7 +207,7 @@ return {
type = "lib",
description = "The operations related to coroutines comprise a sub-library of the basic library and come inside the table coroutine.\nLua supports coroutines, also called collaborative multithreading. A coroutine in Lua represents an independent thread of execution. Unlike threads in multithread systems, however, a coroutine only suspends its execution by explicitly calling a yield function.",
childs = {
getfenv = {
create = {
type = "function",
description = "Creates a new coroutine, with body f.\nf must be a Lua function. Returns this new coroutine, an object with type \"thread\".",
args = "(f: function)",
@@ -242,6 +243,12 @@ return {
args = "(...)",
returns = "()",
},
isyieldable = {
type = "function",
description = "Returns true when the running coroutine can yield. A running coroutine is yieldable if it is not the main thread and it is not inside a non-yieldable C function.\nFUNCTION ADDED IN Lua 5.3.",
args = "()",
returns = "(boolean)",
},
},
},
@@ -264,7 +271,7 @@ return {
childs = {
config = {
type = "value",
description = "A string describing some compile-time configurations for packages.\nThis string is a sequence of lines:\n* The first line is the directory separator string. Default is '\\' for Windows and '/' for all other systems.\n* The second line is the character that separates templates in a path. Default is ';'.\n* The third line is the string that marks the substitution points in a template. Default is '?'.\n* The fourth line is a string that, in a path in Windows, is replaced by the executable's directory. Default is '!'.\n* The fifth line is a mark to ignore all text before it when building the luaopen_ function name. Default is '-'.\nVALUE ADDED IN Lua 5.2.",
description = "A string describing some compile-time configurations for packages.\nThis string is a sequence of lines:\n* The first line is the directory separator string. Default is '\\' for Windows and '/' for all other systems.\n* The second line is the character that separates templates in a path. Default is ';'.\n* The third line is the string that marks the substitution points in a template. Default is '?'.\n* The fourth line is a string that, in a path in Windows, is replaced by the executable's directory. Default is '!'.\n* The fifth line is a mark to ignore all text before it when building the luaopen_ function name. Default is '-'.",
},
cpath = {
type = "value",
@@ -355,6 +362,25 @@ return {
args = "(s: string, pattern: string)",
returns = "(function)",
},
pack = {
type = "function",
description = "Returns a binary string containing the values v1, v2, etc. packed (that is, serialized in binary form) according to the format string fmt.\nFUNCTION ADDED IN Lua 5.3.",
args = "(fmt: string, v1, v2, ...)",
returns = "(string)",
valuetype = "string",
},
unpack = {
type = "function",
description = "Returns the values packed in string s (see string.pack) according to the format string fmt. An optional pos marks where to start reading in s (default is 1). After the read values, this function also returns the index of the first unread byte in s.\nFUNCTION ADDED IN Lua 5.3.",
args = "(fmt: string, s: string [, pos: number])",
returns = "(values)",
},
packsize = {
type = "function",
description = "Returns the size of a string resulting from string.pack with the given format. The format string cannot have the variable-length options 's' or 'z'.\nFUNCTION ADDED IN Lua 5.3.",
args = "(fmt: string)",
returns = "(number)",
},
gsub = {
type = "function",
description = "Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function.\ngsub also returns, as its second value, the total number of matches that occurred. The name gsub comes from Global SUBstitution.\nIf repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %d, with d between 1 and 9, stands for the value of the d-th captured substring. The sequence %0 stands for the whole match. The sequence %% stands for a single %.\nIf repl is a table, then the table is queried for every match, using the first capture as the key.\nIf repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order.\nIn any case, if the pattern specifies no captures, then it behaves as if the whole pattern was inside a capture.\nIf the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).",
@@ -443,6 +469,12 @@ return {
args = "(...)",
returns = "(table)",
},
move = {
type = "function",
description = "Moves elements from table a1 to table a2. This function performs the equivalent to the following multiple assignment: a2[t],··· = a1[f],···,a1[e]. The default for a2 is a1. The destination range can overlap with the source range. Index f must be positive.\nFUNCTION ADDED IN Lua 5.3.",
args = "(a1: table, f, e, t [,a2: table])",
returns = "()",
},
remove = {
type = "function",
description = "Removes from list the element at position pos, shifting down the elements list[pos+1], list[pos+2], ···, list[#list] and erasing element list[#list].\nReturns the value of the removed element.\nThe default value for pos is #list, so that a call table.remove(t) removes the last element of list t.",
@@ -591,6 +623,14 @@ return {
type = "value",
description = "The value of pi.",
},
mininteger = {
type = "value",
description = "An integer with the minimum value for an integer.\nVALUE ADDED IN Lua 5.3.",
},
maxinteger = {
type = "value",
description = "An integer with the maximum value for an integer.\nVALUE ADDED IN Lua 5.3.",
},
pow = {
type = "function",
description = "Returns x^y.\n(You can also use the expression x^y to compute this value.)",
@@ -645,6 +685,24 @@ return {
args = "(x: number)",
returns = "(number)",
},
type = {
type = "function",
description = [[Returns "integer" if x is an integer, "float" if it is a float, or nil if x is not a number.\nFUNCTION ADDED IN Lua 5.3.]],
args = "(x: number)",
returns = "(string)",
},
tointeger = {
type = "function",
description = "If the value x is convertible to an integer, returns that integer. Otherwise, returns nil.\nFUNCTION ADDED IN Lua 5.3.",
args = "(x: number)",
returns = "(number)",
},
ult = {
type = "function",
description = "Returns a boolean, true if integer m is below integer n when they are compared as unsigned integers.\nFUNCTION ADDED IN Lua 5.3.",
args = "(m: number, n: number)",
returns = "(boolean)",
},
},
},

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,823 +0,0 @@
--[[// lxm | Lux Math
typedef float lxVector2 [ 2 ] ;
typedef float lxVector3 [ 3 ] ;
typedef float lxVector4 [ 4 ] ;
typedef float lxPlane [ 4 ] ;
typedef float lxMatrix44 [ 16 ] ;
typedef float lxMatrix34 [ 12 ] ;
typedef float lxQuat [ 4 ] ;
typedef float * lxVector2PTR ;
typedef float * lxVector3PTR ;
typedef float * lxVector4PTR ;
typedef float * lxPlanePTR ;
typedef float * lxMatrix44PTR ;
typedef float * lxMatrix34PTR ;
typedef float * lxQuatPTR ;
typedef const float * lxVector2CPTR ;
typedef const float * lxVector3CPTR ;
typedef const float * lxVector4CPTR ;
typedef const float * lxPlaneCPTR ;
typedef const float * lxMatrix44CPTR ;
typedef const float * lxMatrix34CPTR ;
typedef const float * lxQuatCPTR ;
typedef __declspec ( align ( 16 ) ) lxMatrix44 lxMatrix44SIMD ;
typedef __declspec ( align ( 16 ) ) lxVector4 lxVector4SIMD ;
typedef __declspec ( align ( 16 ) ) lxVector4 lxVector3SIMD ;
typedef struct lxFrustumPlane_s * lxFrustumPlanePTR ;
typedef const struct lxFrustumPlane_s * lxFrustumPlaneCPTR ;
typedef struct lxFrustum_s * lxFrustumPTR ;
typedef const struct lxFrustum_s * lxFrustumCPTR ;
typedef struct lxBoundingBox_s * lxBoundingBoxPTR ;
typedef const struct lxBoundingBox_s * lxBoundingBoxCPTR ;
typedef struct lxBoundingBoxCenter_s * lxBoundingBoxCenterPTR ;
typedef const struct lxBoundingBoxCenter_s * lxBoundingBoxCenterCPTR ;
typedef struct lxBoundingSphere_s * lxBoundingSpherePTR ;
typedef const struct lxBoundingSphere_s * lxBoundingSphereCPTR ;
typedef struct lxBoundingCone_s * lxBoundingConePTR ;
typedef const struct lxBoundingCone_s * lxBoundingConeCPTR ;
typedef struct lxBoundingCapsule_s * lxBoundingCapsulePTR ;
typedef const struct lxBoundingCapsule_s * lxBoundingCapsuleCPTR ;
typedef enum lxFrustumPlaneType_e
{
LUX_FRUSTUM_TOP , LUX_FRUSTUM_BOTTOM , LUX_FRUSTUM_NEAR , LUX_FRUSTUM_FAR , LUX_FRUSTUM_LEFT , LUX_FRUSTUM_RIGHT , LUX_FRUSTUM_PLANES , }
lxFrustumPlaneType_t ;
typedef enum lxFrustumCornerType_e
{
LUX_FRUSTUM_C_NTR , LUX_FRUSTUM_C_NTL , LUX_FRUSTUM_C_NBL , LUX_FRUSTUM_C_NBR , LUX_FRUSTUM_C_FTR , LUX_FRUSTUM_C_FTL , LUX_FRUSTUM_C_FBL , LUX_FRUSTUM_C_FBR , LUX_FRUSTUM_CORNERS , }
lxFrustumCornerType_t ;
typedef enum lxCullType_e
{
LUX_CULL_INTERSECT = - 1 , LUX_CULL_OUTSIDE = 0 , LUX_CULL_INSIDE = 1 , }
lxCullType_t ;
typedef struct lxFrustumPlane_s
{
lxPlane pvec ;
union
{
int n [ 3 ] ;
struct
{
int nx ;
int ny ;
int nz ;
int _npad ;
}
;
}
;
union
{
int p [ 3 ] ;
struct
{
int px ;
int py ;
int pz ;
int _ppad ;
}
;
}
;
}
lxFrustumPlane_t ;
typedef struct lxFrustum_s
{
lxFrustumPlane_t fplanes [ LUX_FRUSTUM_PLANES ] ;
}
lxFrustum_t ;
typedef struct lxBoundingBox_s
{
lxVector4 min ;
lxVector4 max ;
}
lxBoundingBox_t ;
typedef struct lxBoundingBoxCenter_s
{
lxVector4 center ;
lxVector4 size ;
}
lxBoundingBoxCenter_t ;
typedef struct lxBoundingSphere_s
{
lxVector3 center ;
float radius ;
}
lxBoundingSphere_t ;
typedef struct lxBoundingCone_s
{
lxVector4 top ;
lxVector4 axis ;
float sinDiv ;
float sinSqr ;
float cosSqr ;
float _pad ;
}
lxBoundingCone_t ;
typedef struct lxBoundingCapsule_s
{
lxVector4 origin ;
lxVector4 toEnd ;
float radius ;
float radiusSqr ;
float _pad [ 2 ] ;
}
lxBoundingCapsule_t ;
booln lxMinMax_intersectsV ( const float selfminmax [ 6 ] , const float otherminmax [ 6 ] ) ;
void lxBoundingBox_init ( lxBoundingBoxPTR bbox ) ;
void lxBoundingBox_toCenter ( lxBoundingBoxCPTR bbox , lxVector3 center , lxVector3 size ) ;
lxBoundingBoxPTR lxBoundingBox_copy ( lxBoundingBoxPTR dst , lxBoundingBoxCPTR src ) ;
lxBoundingSpherePTR lxBoundingSphere_copy ( lxBoundingSpherePTR dst , lxBoundingSphereCPTR src ) ;
lxBoundingBoxPTR lxBoundingBox_merge ( lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
booln lxBoundingBox_mergeChange ( lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
booln lxBoundingSphere_mergeChange ( lxBoundingSpherePTR out , lxBoundingSphereCPTR a , lxBoundingSphereCPTR b ) ;
void lxBoundingBox_toCenterBox ( lxBoundingBoxCPTR box , lxBoundingBoxCenterPTR ctr ) ;
void lxBoundingBox_fromCenterBox ( lxBoundingBoxPTR box , lxBoundingBoxCenterCPTR ctr ) ;
lxBoundingSpherePTR lxBoundingBox_toSphere ( lxBoundingBoxCPTR bbox , lxBoundingSpherePTR sphere ) ;
void lxBoundingBox_toSphereV ( const lxVector3 min , const lxVector3 max , lxVector3 center , float * radius ) ;
lxBoundingCapsulePTR lxBoundingBox_toCapsule ( lxBoundingBoxCPTR bbox , lxBoundingCapsulePTR capsule ) ;
lxBoundingBoxPTR lxBoundingBox_transform ( lxBoundingBoxPTR out , lxBoundingBoxCPTR in , lxMatrix44CPTR trans ) ;
void lxBoundingBox_transformBoxCorners ( lxBoundingBoxCPTR in , lxMatrix44CPTR trans , lxVector3 box [ 8 ] ) ;
void lxBoundingBox_transformV ( lxVector3 outmins , lxVector3 outmaxs , const lxVector3 mins , const lxVector3 maxs , lxMatrix44CPTR trans ) ;
void lxBoundingBox_fromCorners ( lxBoundingBoxPTR bbox , const lxVector3 vecs [ 8 ] ) ;
void lxBoundingCorners_fromCamera ( lxVector3 vecs [ 8 ] , lxMatrix44CPTR mat , const float fov , const float frontplane , const float backplane , const float aspect ) ;
booln lxBoundingBox_intersect ( lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
booln lxBoundingBox_checkPoint ( lxBoundingBoxCPTR out , const lxVector3 point ) ;
booln lxBoundingCone_checkSphere ( lxBoundingConeCPTR cone , lxBoundingSphereCPTR sphere ) ;
void lxBoundingSphereCone_fromCamera ( lxBoundingSpherePTR sphere , lxBoundingConePTR cone , float frontplane , float backplane , const lxVector3 pos , const lxVector3 dir , float fov ) ;
void lxBoundingCone_fromFrustumCorners ( lxBoundingConePTR cone , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
void lxBoundingSphere_fromFrustumCorners ( lxBoundingSpherePTR sphere , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
void lxFrustum_update ( lxFrustumPTR frustum , lxMatrix44CPTR viewproj ) ;
booln lxFrustum_checkPoint ( lxFrustumCPTR frustum , lxVector3CPTR vec ) ;
booln lxFrustum_checkSphere ( lxFrustumCPTR frustum , lxBoundingSphereCPTR ) ;
booln lxFrustum_checkSphereCoherent ( lxFrustumCPTR pFrustum , lxBoundingSphereCPTR sphere , int * plane ) ;
booln lxFrustum_checkSphereFull ( lxFrustumCPTR frustum , lxBoundingSphereCPTR ) ;
booln lxFrustum_checkBoundingBox ( lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox ) ;
booln lxFrustum_checkBoundingBoxCoherent ( lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int * plane ) ;
lxCullType_t lxFrustum_cullBoundingBoxMaskedCoherent ( lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int in_mask , int * out_mask , int * inoutstart_id ) ;
lxCullType_t lxFrustum_cullPoints ( lxFrustumCPTR frustum , const lxVector4 * vecarray , const int numVec ) ;
lxCullType_t lxFrustum_cullBoundingBox ( lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox ) ;
void lxFrustum_getCorners ( lxFrustumCPTR frustum , lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
void lxFrustum_fromCorners ( lxFrustumPTR frustum , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
void lxFrustum_updateSigns ( lxFrustumPTR frustum ) ;
lxMatrix44CPTR lxMatrix44GetIdentity ( ) ;
void lxMatrix44Identity ( lxMatrix44PTR dst ) ;
void lxMatrix44Copy ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44CopyRot ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44CopyRotTransposed ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44SetTranslation ( lxMatrix44PTR dst , lxVector3CPTR translation ) ;
void lxMatrix44SetInvTranslation ( lxMatrix44PTR dst , lxVector3CPTR translation ) ;
void lxMatrix44SetScale ( lxMatrix44PTR dst , lxVector3CPTR scale ) ;
void lxMatrix44PreScale ( lxMatrix44PTR dst , lxMatrix44CPTR mat , lxVector3CPTR scale ) ;
void lxMatrix44SetRotRows ( lxMatrix44PTR dst , float a , float b , float c , float d , float e , float f , float g , float h , float i ) ;
float * lxMatrix44GetTranslation ( lxMatrix44CPTR mat , lxVector3PTR vec ) ;
void lxMatrix44Clear ( lxMatrix44PTR mat ) ;
void lxMatrix44ClearRot ( lxMatrix44PTR mat ) ;
void lxMatrix44ClearTranslation ( lxMatrix44PTR mat ) ;
void lxMatrix44VectorTransform ( lxMatrix44CPTR mat , lxVector3PTR v1 ) ;
void lxMatrix44VectorInvTransform ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
void lxMatrix44VectorRotate ( lxMatrix44CPTR mat , lxVector3PTR v1 ) ;
void lxMatrix44VectorInvRotate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
void lxMatrix44VectorTranslate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
void lxMatrix44VectorInvTranslate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
void lxMatrix44Multiply ( lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2 ) ;
void lxMatrix44Multiply1 ( lxMatrix44PTR mat1 , lxMatrix44CPTR mat2 ) ;
void lxMatrix44Multiply2 ( lxMatrix44CPTR mat1 , lxMatrix44PTR mat2 ) ;
void lxMatrix44MultiplyFull ( lxMatrix44PTR clip , lxMatrix44CPTR proj , lxMatrix44CPTR modl ) ;
void lxMatrix44MultiplyRot ( lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2 ) ;
void lxMatrix44MultiplyRot1 ( lxMatrix44PTR mat1 , lxMatrix44CPTR mat2 ) ;
void lxMatrix44MultiplyRot2 ( lxMatrix44CPTR mat1 , lxMatrix44PTR mat2 ) ;
void lxMatrix44Orthonormalize ( lxMatrix44PTR dst , lxMatrix44PTR src ) ;
void lxMatrix44Transpose ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44Transpose1 ( lxMatrix44PTR mat ) ;
void lxMatrix44TransposeRot ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44TransposeRot1 ( lxMatrix44PTR mat ) ;
void lxMatrix44TransposeRotIdentity ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44Invert ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44Invert1 ( lxMatrix44PTR mat ) ;
void lxMatrix44AffineInvert ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
void lxMatrix44Orient ( lxMatrix44PTR mat , lxVector3CPTR forward , lxVector3CPTR up , int axis ) ;
void lxMatrix44LookAt ( lxMatrix44PTR mat , lxVector3CPTR from , lxVector3CPTR to , lxVector3CPTR up ) ;
void lxMatrix44FromEulerZYX ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
void lxMatrix44FromEulerZYXFast ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
void lxMatrix44FromEulerZYXdeg ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
void lxMatrix44FromEulerXYZ ( lxMatrix44PTR mat , lxVector3PTR angles ) ;
void lxMatrix44FromEulerXYZFast ( lxMatrix44PTR mat , lxVector3PTR angles ) ;
void lxMatrix44FromAngleAxis ( lxMatrix44PTR mat , lxVector3CPTR axis , float cos , float sin , float oneminuscos ) ;
void lxMatrix44FromAngleAxisFast ( lxMatrix44PTR mat , float anglerad , lxVector3CPTR axis ) ;
void lxMatrix44RotateAngle ( lxMatrix44PTR mat , lxVector3PTR from , lxVector3PTR to ) ;
void lxMatrix44RotateAroundVector ( lxMatrix44PTR mat , lxVector3PTR axis , float cos , float sin , float oneminuscos ) ;
void lxMatrix44RotateAroundVectorFast ( lxMatrix44PTR mat , lxVector3PTR axis , float angleRad ) ;
void lxMatrix44RotateAroundPointFast ( lxMatrix44PTR mat , lxVector3CPTR center , lxVector3CPTR angles ) ;
void lxMatrix44ToEulerXYZ ( lxMatrix44CPTR mat , lxVector3PTR angles ) ;
void lxMatrix44ToEulerZYX ( lxMatrix44CPTR mat , lxVector3PTR angles ) ;
void lxMatrix44Perspective ( lxMatrix44PTR mat , const float fov , const float front , const float back , const float aspect ) ;
void lxMatrix44PerspectiveInf ( lxMatrix44PTR mat , const float fov , const float front , const float aspect ) ;
void lxMatrix44Ortho ( lxMatrix44PTR mat , const float height , const float front , const float back , const float aspect ) ;
void lxMatrix44OrthoDirect ( lxMatrix44PTR mat , const float left , const float right , const float bottom , const float top , const float front , const float back ) ;
void lxMatrix44PlaneProjection ( lxMatrix44PTR mat , lxVector3CPTR planenormal ) ;
void lxMatrix44ModifyProjectionClipplane ( lxMatrix44PTR projmatrix , lxMatrix44CPTR mview , lxMatrix44CPTR mviewinv , lxVector4CPTR clipPlane ) ;
void lxMatrix44Reflection ( lxMatrix44PTR mat , lxVector4PTR plane ) ;
float lxMatrix44CompareRot ( lxMatrix44PTR mat1 , lxMatrix44PTR mat2 ) ;
void lxMatrix44Swizzle1 ( lxMatrix44PTR mat , uint axis [ 3 ] , lxVector3PTR dirs ) ;
extern const float lx_gMatrix44_ident [ 16 ] ;
float16 lxFloat32To16 ( float fval ) ;
float lxFloat16To32 ( float16 ival ) ;
]]
--auto-generated api from ffi headers
local api =
{
["lx_gMatrix44_ident"] = { type ='value', description = "extern const float lx_gMatrix44_ident[16]", valuetype = nil, },
["LUX_FRUSTUM_TOP"] = { type ='value', },
["LUX_FRUSTUM_BOTTOM"] = { type ='value', },
["LUX_FRUSTUM_NEAR"] = { type ='value', },
["LUX_FRUSTUM_FAR"] = { type ='value', },
["LUX_FRUSTUM_LEFT"] = { type ='value', },
["LUX_FRUSTUM_RIGHT"] = { type ='value', },
["LUX_FRUSTUM_PLANES"] = { type ='value', },
["LUX_FRUSTUM_C_NTR"] = { type ='value', },
["LUX_FRUSTUM_C_NTL"] = { type ='value', },
["LUX_FRUSTUM_C_NBL"] = { type ='value', },
["LUX_FRUSTUM_C_NBR"] = { type ='value', },
["LUX_FRUSTUM_C_FTR"] = { type ='value', },
["LUX_FRUSTUM_C_FTL"] = { type ='value', },
["LUX_FRUSTUM_C_FBL"] = { type ='value', },
["LUX_FRUSTUM_C_FBR"] = { type ='value', },
["LUX_FRUSTUM_CORNERS"] = { type ='value', },
["LUX_CULL_INTERSECT"] = { type ='value', },
["LUX_CULL_OUTSIDE"] = { type ='value', },
["LUX_CULL_INSIDE"] = { type ='value', },
["lxMinMax_intersectsV"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(const float selfminmax [ 6 ] , const float otherminmax [ 6 ])", },
["lxBoundingBox_init"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxPTR bbox)", },
["lxBoundingBox_toCenter"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxCPTR bbox , lxVector3 center , lxVector3 size)", },
["lxBoundingBox_copy"] = { type ='function',
description = "",
returns = "(lxBoundingBoxPTR)",
valuetype = "lxm.lxBoundingBox_t",
args = "(lxBoundingBoxPTR dst , lxBoundingBoxCPTR src)", },
["lxBoundingSphere_copy"] = { type ='function',
description = "",
returns = "(lxBoundingSpherePTR)",
valuetype = "lxm.lxBoundingSphere_t",
args = "(lxBoundingSpherePTR dst , lxBoundingSphereCPTR src)", },
["lxBoundingBox_merge"] = { type ='function',
description = "",
returns = "(lxBoundingBoxPTR)",
valuetype = "lxm.lxBoundingBox_t",
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
["lxBoundingBox_mergeChange"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
["lxBoundingSphere_mergeChange"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxBoundingSpherePTR out , lxBoundingSphereCPTR a , lxBoundingSphereCPTR b)", },
["lxBoundingBox_toCenterBox"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxCPTR box , lxBoundingBoxCenterPTR ctr)", },
["lxBoundingBox_fromCenterBox"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxPTR box , lxBoundingBoxCenterCPTR ctr)", },
["lxBoundingBox_toSphere"] = { type ='function',
description = "",
returns = "(lxBoundingSpherePTR)",
valuetype = "lxm.lxBoundingSphere_t",
args = "(lxBoundingBoxCPTR bbox , lxBoundingSpherePTR sphere)", },
["lxBoundingBox_toSphereV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(const lxVector3 min , const lxVector3 max , lxVector3 center , float * radius)", },
["lxBoundingBox_toCapsule"] = { type ='function',
description = "",
returns = "(lxBoundingCapsulePTR)",
valuetype = "lxm.lxBoundingCapsule_t",
args = "(lxBoundingBoxCPTR bbox , lxBoundingCapsulePTR capsule)", },
["lxBoundingBox_transform"] = { type ='function',
description = "",
returns = "(lxBoundingBoxPTR)",
valuetype = "lxm.lxBoundingBox_t",
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR in , lxMatrix44CPTR trans)", },
["lxBoundingBox_transformBoxCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxCPTR in , lxMatrix44CPTR trans , lxVector3 box [ 8 ])", },
["lxBoundingBox_transformV"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxVector3 outmins , lxVector3 outmaxs , const lxVector3 mins , const lxVector3 maxs , lxMatrix44CPTR trans)", },
["lxBoundingBox_fromCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingBoxPTR bbox , const lxVector3 vecs [ 8 ])", },
["lxBoundingCorners_fromCamera"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxVector3 vecs [ 8 ] , lxMatrix44CPTR mat , const float fov , const float frontplane , const float backplane , const float aspect)", },
["lxBoundingBox_intersect"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
["lxBoundingBox_checkPoint"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxBoundingBoxCPTR out , const lxVector3 point)", },
["lxBoundingCone_checkSphere"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxBoundingConeCPTR cone , lxBoundingSphereCPTR sphere)", },
["lxBoundingSphereCone_fromCamera"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingSpherePTR sphere , lxBoundingConePTR cone , float frontplane , float backplane , const lxVector3 pos , const lxVector3 dir , float fov)", },
["lxBoundingCone_fromFrustumCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingConePTR cone , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
["lxBoundingSphere_fromFrustumCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxBoundingSpherePTR sphere , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
["lxFrustum_update"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxFrustumPTR frustum , lxMatrix44CPTR viewproj)", },
["lxFrustum_checkPoint"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxVector3CPTR vec)", },
["lxFrustum_checkSphere"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxBoundingSphereCPTR)", },
["lxFrustum_checkSphereCoherent"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR pFrustum , lxBoundingSphereCPTR sphere , int * plane)", },
["lxFrustum_checkSphereFull"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxBoundingSphereCPTR)", },
["lxFrustum_checkBoundingBox"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox)", },
["lxFrustum_checkBoundingBoxCoherent"] = { type ='function',
description = "",
returns = "(booln)",
valuetype = nil,
args = "(lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int * plane)", },
["lxFrustum_cullBoundingBoxMaskedCoherent"] = { type ='function',
description = "",
returns = "(lxCullType_t)",
valuetype = nil,
args = "(lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int in_mask , int * out_mask , int * inoutstart_id)", },
["lxFrustum_cullPoints"] = { type ='function',
description = "",
returns = "(lxCullType_t)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , const lxVector4 * vecarray , const int numVec)", },
["lxFrustum_cullBoundingBox"] = { type ='function',
description = "",
returns = "(lxCullType_t)",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox)", },
["lxFrustum_getCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxFrustumCPTR frustum , lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
["lxFrustum_fromCorners"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxFrustumPTR frustum , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
["lxFrustum_updateSigns"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxFrustumPTR frustum)", },
["lxMatrix44GetIdentity"] = { type ='function',
description = "",
returns = "(lxMatrix44CPTR)",
valuetype = nil,
args = "()", },
["lxMatrix44Identity"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst)", },
["lxMatrix44Copy"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44CopyRot"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44CopyRotTransposed"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44SetTranslation"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxVector3CPTR translation)", },
["lxMatrix44SetInvTranslation"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxVector3CPTR translation)", },
["lxMatrix44SetScale"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxVector3CPTR scale)", },
["lxMatrix44PreScale"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat , lxVector3CPTR scale)", },
["lxMatrix44SetRotRows"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , float a , float b , float c , float d , float e , float f , float g , float h , float i)", },
["lxMatrix44GetTranslation"] = { type ='function',
description = "",
returns = "(float *)",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR vec)", },
["lxMatrix44Clear"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44ClearRot"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44ClearTranslation"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44VectorTransform"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR v1)", },
["lxMatrix44VectorInvTransform"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
["lxMatrix44VectorRotate"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR v1)", },
["lxMatrix44VectorInvRotate"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
["lxMatrix44VectorTranslate"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
["lxMatrix44VectorInvTranslate"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
["lxMatrix44Multiply"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2)", },
["lxMatrix44Multiply1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat1 , lxMatrix44CPTR mat2)", },
["lxMatrix44Multiply2"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat1 , lxMatrix44PTR mat2)", },
["lxMatrix44MultiplyFull"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR clip , lxMatrix44CPTR proj , lxMatrix44CPTR modl)", },
["lxMatrix44MultiplyRot"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2)", },
["lxMatrix44MultiplyRot1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat1 , lxMatrix44CPTR mat2)", },
["lxMatrix44MultiplyRot2"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat1 , lxMatrix44PTR mat2)", },
["lxMatrix44Orthonormalize"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44PTR src)", },
["lxMatrix44Transpose"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44Transpose1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44TransposeRot"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44TransposeRot1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44TransposeRotIdentity"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44Invert"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44Invert1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat)", },
["lxMatrix44AffineInvert"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
["lxMatrix44Orient"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR forward , lxVector3CPTR up , int axis)", },
["lxMatrix44LookAt"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR from , lxVector3CPTR to , lxVector3CPTR up)", },
["lxMatrix44FromEulerZYX"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
["lxMatrix44FromEulerZYXFast"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
["lxMatrix44FromEulerZYXdeg"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
["lxMatrix44FromEulerXYZ"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3PTR angles)", },
["lxMatrix44FromEulerXYZFast"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3PTR angles)", },
["lxMatrix44FromAngleAxis"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR axis , float cos , float sin , float oneminuscos)", },
["lxMatrix44FromAngleAxisFast"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , float anglerad , lxVector3CPTR axis)", },
["lxMatrix44RotateAngle"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3PTR from , lxVector3PTR to)", },
["lxMatrix44RotateAroundVector"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3PTR axis , float cos , float sin , float oneminuscos)", },
["lxMatrix44RotateAroundVectorFast"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3PTR axis , float angleRad)", },
["lxMatrix44RotateAroundPointFast"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR center , lxVector3CPTR angles)", },
["lxMatrix44ToEulerXYZ"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR angles)", },
["lxMatrix44ToEulerZYX"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44CPTR mat , lxVector3PTR angles)", },
["lxMatrix44Perspective"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , const float fov , const float front , const float back , const float aspect)", },
["lxMatrix44PerspectiveInf"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , const float fov , const float front , const float aspect)", },
["lxMatrix44Ortho"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , const float height , const float front , const float back , const float aspect)", },
["lxMatrix44OrthoDirect"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , const float left , const float right , const float bottom , const float top , const float front , const float back)", },
["lxMatrix44PlaneProjection"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector3CPTR planenormal)", },
["lxMatrix44ModifyProjectionClipplane"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR projmatrix , lxMatrix44CPTR mview , lxMatrix44CPTR mviewinv , lxVector4CPTR clipPlane)", },
["lxMatrix44Reflection"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , lxVector4PTR plane)", },
["lxMatrix44CompareRot"] = { type ='function',
description = "",
returns = "(float)",
valuetype = nil,
args = "(lxMatrix44PTR mat1 , lxMatrix44PTR mat2)", },
["lxMatrix44Swizzle1"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(lxMatrix44PTR mat , uint axis [ 3 ] , lxVector3PTR dirs)", },
["lxFloat32To16"] = { type ='function',
description = "",
returns = "(float16)",
valuetype = nil,
args = "(float fval)", },
["lxFloat16To32"] = { type ='function',
description = "",
returns = "(float)",
valuetype = nil,
args = "(float16 ival)", },
["lxFrustumPlane_t"] = { type ='class',
description = "",
childs = {
["pvec"] = { type ='value', description = "lxPlane", valuetype = nil, },
[""] = { type ='class',
description = "",
childs = {
["nx"] = { type ='value', description = "int", valuetype = nil, },
["ny"] = { type ='value', description = "int", valuetype = nil, },
["nz"] = { type ='value', description = "int", valuetype = nil, },
["_npad"] = { type ='value', description = "int", valuetype = nil, },
}
},
[""] = { type ='class',
description = "",
childs = {
["px"] = { type ='value', description = "int", valuetype = nil, },
["py"] = { type ='value', description = "int", valuetype = nil, },
["pz"] = { type ='value', description = "int", valuetype = nil, },
["_ppad"] = { type ='value', description = "int", valuetype = nil, },
}
},
}
},
["lxFrustum_t"] = { type ='class',
description = "",
childs = {
["LUX_FRUSTUM_PLANES"] = { type ='value', description = "lxFrustumPlane_t fplanes]", valuetype = nil, },
}
},
["lxBoundingBox_t"] = { type ='class',
description = "",
childs = {
["min"] = { type ='value', description = "lxVector4", valuetype = nil, },
["max"] = { type ='value', description = "lxVector4", valuetype = nil, },
}
},
["lxBoundingBoxCenter_t"] = { type ='class',
description = "",
childs = {
["center"] = { type ='value', description = "lxVector4", valuetype = nil, },
["size"] = { type ='value', description = "lxVector4", valuetype = nil, },
}
},
["lxBoundingSphere_t"] = { type ='class',
description = "",
childs = {
["center"] = { type ='value', description = "lxVector3", valuetype = nil, },
["radius"] = { type ='value', description = "float", valuetype = nil, },
}
},
["lxBoundingCone_t"] = { type ='class',
description = "",
childs = {
["top"] = { type ='value', description = "lxVector4", valuetype = nil, },
["axis"] = { type ='value', description = "lxVector4", valuetype = nil, },
["sinDiv"] = { type ='value', description = "float", valuetype = nil, },
["sinSqr"] = { type ='value', description = "float", valuetype = nil, },
["cosSqr"] = { type ='value', description = "float", valuetype = nil, },
["_pad"] = { type ='value', description = "float", valuetype = nil, },
}
},
["lxBoundingCapsule_t"] = { type ='class',
description = "",
childs = {
["origin"] = { type ='value', description = "lxVector4", valuetype = nil, },
["toEnd"] = { type ='value', description = "lxVector4", valuetype = nil, },
["radius"] = { type ='value', description = "float", valuetype = nil, },
["radiusSqr"] = { type ='value', description = "float", valuetype = nil, },
["2"] = { type ='value', description = "float _pad]", valuetype = nil, },
}
},
}
return {
lxm = {
type = 'lib',
description = "Lux Math",
childs = api,
},
}

View File

@@ -1,130 +0,0 @@
--[[// lxs | Lux Scene
typedef enum lxMeshIndexType_e
{
LUX_MESH_INDEX_UINT16 , LUX_MESH_INDEX_UINT32 , LUX_MESH_INDICES , }
lxMeshIndexType_t ;
void lxMeshPlane_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
void lxMeshPlane_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
void lxMeshPlane_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
void lxMeshDisc_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
void lxMeshDisc_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
void lxMeshDisc_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
void lxMeshBox_getCounts ( int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
void lxMeshBox_initTriangles ( int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
void lxMeshBox_initOutline ( int segs [ 3 ] , uint32 * indices ) ;
void lxMeshSphere_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
void lxMeshSphere_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
void lxMeshSphere_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
void lxMeshCylinder_getCounts ( int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
void lxMeshCylinder_initTriangles ( int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
void lxMeshCylinder_initOutline ( int segs [ 3 ] , uint32 * indices ) ;
void * lxVertexCacheOptimize_tipsify ( void * indices , int nTriangles , int nVertices , int k , lxMeshIndexType_t type ) ;
void * lxVertexCacheOptimize_forsyth ( void * indices , int nTriangles , int nVertices , int vcache , lxMeshIndexType_t type ) ;
void * lxVertexCacheOptimize_grid_castano ( void * indices , int maxTriangles , int width , int height , int vcache , lxMeshIndexType_t type , int * writtenTriangles ) ;
]]
--auto-generated api from ffi headers
local api =
{
["LUX_MESH_INDEX_UINT16"] = { type ='value', },
["LUX_MESH_INDEX_UINT32"] = { type ='value', },
["LUX_MESH_INDICES"] = { type ='value', },
["lxMeshPlane_getCounts"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
["lxMeshPlane_initTriangles"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
["lxMeshPlane_initOutline"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , uint32 * indices)", },
["lxMeshDisc_getCounts"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
["lxMeshDisc_initTriangles"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
["lxMeshDisc_initOutline"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , uint32 * indices)", },
["lxMeshBox_getCounts"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
["lxMeshBox_initTriangles"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
["lxMeshBox_initOutline"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , uint32 * indices)", },
["lxMeshSphere_getCounts"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
["lxMeshSphere_initTriangles"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
["lxMeshSphere_initOutline"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 2 ] , uint32 * indices)", },
["lxMeshCylinder_getCounts"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
["lxMeshCylinder_initTriangles"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
["lxMeshCylinder_initOutline"] = { type ='function',
description = "",
returns = "()",
valuetype = nil,
args = "(int segs [ 3 ] , uint32 * indices)", },
["lxVertexCacheOptimize_tipsify"] = { type ='function',
description = "",
returns = "(void *)",
valuetype = nil,
args = "(void * indices , int nTriangles , int nVertices , int k , lxMeshIndexType_t type)", },
["lxVertexCacheOptimize_forsyth"] = { type ='function',
description = "",
returns = "(void *)",
valuetype = nil,
args = "(void * indices , int nTriangles , int nVertices , int vcache , lxMeshIndexType_t type)", },
["lxVertexCacheOptimize_grid_castano"] = { type ='function',
description = "",
returns = "(void *)",
valuetype = nil,
args = "(void * indices , int maxTriangles , int width , int height , int vcache , lxMeshIndexType_t type , int * writtenTriangles)", },
}
return {
lxs = {
type = 'lib',
description = "Lux Scene",
childs = api,
},
}

File diff suppressed because it is too large Load Diff

0
bin/clibs/mime/core.dylib Executable file → Normal file
View File

0
bin/clibs/socket/core.dylib Executable file → Normal file
View File

BIN
bin/clibs53/mime/core.dll Normal file

Binary file not shown.

BIN
bin/clibs53/mime/core.dylib Normal file

Binary file not shown.

BIN
bin/clibs53/socket/core.dll Normal file

Binary file not shown.

Binary file not shown.

0
bin/liblua.dylib Executable file → Normal file
View File

BIN
bin/liblua53.dylib Normal file

Binary file not shown.

0
bin/libwx.dylib Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

BIN
bin/linux/x64/lua53 Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/linux/x86/lua53 Executable file

Binary file not shown.

BIN
bin/lua.app/Contents/MacOS/lua53 Executable file

Binary file not shown.

1
bin/lua53 Symbolic link
View File

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

BIN
bin/lua53.dll Normal file

Binary file not shown.

BIN
bin/lua53.exe Normal file

Binary file not shown.

View File

@@ -1,12 +1,19 @@
#!/bin/bash
if [ "$(uname -m)" = "x86_64" ]; then
FPIC="-fpic"
ARCH="x64"
else
FPIC=""
ARCH="x86"
fi
case "$(uname -m)" in
x86_64)
FPIC="-fpic"
ARCH="x64"
;;
armv7l)
FPIC="-fpic"
ARCH="armhf"
;;
*)
FPIC=""
ARCH="x86"
;;
esac
# ZBS binary directory
BIN_DIR="$(dirname "$PWD")/bin/linux/$ARCH"
@@ -22,7 +29,7 @@ BUILD_FLAGS="-O2 -shared -s -I $INSTALL_DIR/include -L $INSTALL_DIR/lib $FPIC"
# paths configuration
WXWIDGETS_BASENAME="wxWidgets"
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
WXLUA_BASENAME="wxlua"
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
@@ -37,12 +44,20 @@ if [ $# -eq 0 ]; then
exit 0
fi
WXLUASTRIP="/strip"
WXWIDGETSDEBUG="--disable-debug"
WXLUABUILD="MinSizeRel"
# iterate through the command line arguments
for ARG in "$@"; do
case $ARG in
5.2)
BUILD_52=true
;;
5.3)
BUILD_53=true
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
;;
jit)
BUILD_JIT=true
;;
@@ -58,6 +73,11 @@ for ARG in "$@"; do
luasocket)
BUILD_LUASOCKET=true
;;
debug)
WXLUASTRIP=""
WXWIDGETSDEBUG="--enable-debug=max --enable-debug_gdb"
WXLUABUILD="Debug"
;;
all)
BUILD_WXWIDGETS=true
BUILD_LUA=true
@@ -105,24 +125,32 @@ LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi
# build wxWidgets
if [ $BUILD_WXWIDGETS ]; then
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
cd "$WXWIDGETS_BASENAME"
./configure --prefix="$INSTALL_DIR" --disable-debug --disable-shared --enable-unicode \
./configure --prefix="$INSTALL_DIR" $WXWIDGETSDEBUG --disable-shared --enable-unicode \
--enable-compat28 \
--with-libjpeg=builtin --with-libpng=builtin --with-libtiff=no --with-expat=no \
--with-zlib=builtin --disable-richtext --with-gtk=2 \
@@ -165,16 +193,17 @@ if [ $BUILD_WXLUA ]; then
# http://www.mail-archive.com/wxlua-users@lists.sourceforge.net/msg03225.html
sed -i 's/\(m_wxlState = wxLuaState(wxlState.GetLuaState(), wxLUASTATE_GETSTATE|wxLUASTATE_ROOTSTATE);\)/\/\/ removed by ZBS build process \/\/ \1/' modules/wxlua/wxlcallb.cpp
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
# remove "Unable to call an unknown method..." error as it leads to a leak
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.cpp
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=FALSE \
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=$WXLUABUILD -DBUILD_SHARED_LIBS=FALSE \
-DwxWidgets_CONFIG_EXECUTABLE="$INSTALL_DIR/bin/wx-config" \
-DwxWidgets_COMPONENTS="stc;html;aui;adv;core;net;base" \
-DwxLuaBind_COMPONENTS="stc;html;aui;adv;core;net;base" -DwxLua_LUA_LIBRARY_USE_BUILTIN=FALSE \
-DwxLua_LUA_INCLUDE_DIR="$INSTALL_DIR/include" -DwxLua_LUA_LIBRARY="$INSTALL_DIR/lib/liblua.a" .
(cd modules/luamodule; make $MAKEFLAGS) || { echo "Error: failed to build wxLua"; exit 1; }
(cd modules/luamodule; make install/strip)
(cd modules/luamodule; make install$WXLUASTRIP)
[ -f "$INSTALL_DIR/lib/libwx.so" ] || { echo "Error: libwx.so isn't found"; exit 1; }
cd ../..
rm -rf "$WXLUA_BASENAME"

View File

@@ -24,7 +24,7 @@ BUILD_FLAGS="-O2 -arch x86_64 -dynamiclib -undefined dynamic_lookup $MACOSX_FLAG
# paths configuration
WXWIDGETS_BASENAME="wxWidgets"
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
WXLUA_BASENAME="wxlua"
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
@@ -49,6 +49,10 @@ for ARG in "$@"; do
5.2)
BUILD_52=true
;;
5.3)
BUILD_53=true
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
;;
jit)
BUILD_JIT=true
;;
@@ -116,21 +120,29 @@ LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi
# build wxWidgets
if [ $BUILD_WXWIDGETS ]; then
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
cd "$WXWIDGETS_BASENAME"
MINSDK=""
if [ -d $MACOSX_SDK_PATH ]; then
@@ -192,8 +204,9 @@ if [ $BUILD_WXLUA ]; then
# http://www.mail-archive.com/wxlua-users@lists.sourceforge.net/msg03225.html
sed -i "" 's/\(m_wxlState = wxLuaState(wxlState.GetLuaState(), wxLUASTATE_GETSTATE|wxLUASTATE_ROOTSTATE);\)/\/\/ removed by ZBS build process \/\/ \1/' modules/wxlua/wxlcallb.cpp
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
# remove "Unable to call an unknown method..." error as it leads to a leak
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.cpp
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=$WXLUABUILD -DBUILD_SHARED_LIBS=FALSE \
-DCMAKE_OSX_ARCHITECTURES=$MACOSX_ARCH -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_VERSION $MINSDK \

View File

@@ -14,7 +14,7 @@ BUILD_FLAGS="-O2 -shared -s -I $INSTALL_DIR/include -L $INSTALL_DIR/lib"
# paths configuration
WXWIDGETS_BASENAME="wxWidgets"
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
WXLUA_BASENAME="wxlua"
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
@@ -23,14 +23,18 @@ LUASOCKET_BASENAME="luasocket-3.0-rc1"
LUASOCKET_FILENAME="v3.0-rc1.zip"
LUASOCKET_URL="https://github.com/diegonehab/luasocket/archive/$LUASOCKET_FILENAME"
OPENSSL_BASENAME="openssl-1.0.1e"
OPENSSL_BASENAME="openssl-1.0.2d"
OPENSSL_FILENAME="$OPENSSL_BASENAME.tar.gz"
OPENSSL_URL="http://www.openssl.org/source/$OPENSSL_FILENAME"
LUASEC_BASENAME="luasec-0.4.1"
LUASEC_BASENAME="luasec-0.5"
LUASEC_FILENAME="$LUASEC_BASENAME.zip"
LUASEC_URL="https://github.com/brunoos/luasec/archive/$LUASEC_FILENAME"
LFS_BASENAME="v_1_6_3"
LFS_FILENAME="$LFS_BASENAME.tar.gz"
LFS_URL="https://github.com/keplerproject/luafilesystem/archive/$LFS_FILENAME"
WINAPI_BASENAME="winapi"
WINAPI_URL="https://github.com/stevedonovan/winapi.git"
@@ -50,6 +54,10 @@ for ARG in "$@"; do
5.2)
BUILD_52=true
;;
5.3)
BUILD_53=true
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
;;
jit)
BUILD_JIT=true
;;
@@ -71,6 +79,9 @@ for ARG in "$@"; do
winapi)
BUILD_WINAPI=true
;;
lfs)
BUILD_LFS=true
;;
zbstudio)
BUILD_ZBSTUDIO=true
;;
@@ -128,28 +139,38 @@ fi
mkdir -p "$INSTALL_DIR" || { echo "Error: cannot create directory $INSTALL_DIR"; exit 1; }
LUAV="51"
LUAD="5.1"
LUAS=""
LUA_BASENAME="lua-5.1.5"
if [ $BUILD_52 ]; then
LUAV="52"
LUAD="5.2"
LUAS=$LUAV
LUA_BASENAME="lua-5.2.2"
LUA_BASENAME="lua-5.2.4"
fi
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
if [ $BUILD_53 ]; then
LUAV="53"
LUAD="5.3"
LUAS=$LUAV
LUA_BASENAME="lua-5.3.1"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
fi
if [ $BUILD_JIT ]; then
LUA_BASENAME="LuaJIT-2.0.2"
LUA_BASENAME="LuaJIT-2.0.4"
LUA_FILENAME="$LUA_BASENAME.tar.gz"
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
fi
# build wxWidgets
if [ $BUILD_WXWIDGETS ]; then
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
svn revert -R "$WXWIDGETS_BASENAME"
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
cd "$WXWIDGETS_BASENAME"
./configure --prefix="$INSTALL_DIR" $WXWIDGETSDEBUG --disable-shared --enable-unicode \
--enable-compat28 \
@@ -174,6 +195,16 @@ if [ $BUILD_LUA ]; then
# move luajit to lua as it's expected by luasocket and other components
cp "$INSTALL_DIR"/include/luajit*/* "$INSTALL_DIR/include/"
else
# need to patch Lua io to support large (>2GB) files on Windows:
# http://lua-users.org/lists/lua-l/2015-05/msg00370.html
cat <<EOF >>src/luaconf.h
#if defined(liolib_c) && defined(__MINGW32__)
#include <sys/types.h>
#define l_fseek(f,o,w) fseeko64(f,o,w)
#define l_ftell(f) ftello64(f)
#define l_seeknum off64_t
#endif
EOF
make mingw || { echo "Error: failed to build Lua"; exit 1; }
make install INSTALL_TOP="$INSTALL_DIR"
fi
@@ -202,8 +233,9 @@ if [ $BUILD_WXLUA ]; then
# (temporary) fix for compilation issue in wxlua in Windows using mingw (r184)
sed -i 's/defined(__MINGW32__) || defined(__GNUWIN32__)/0/' modules/wxbind/src/wxcore_bind.cpp
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
# remove "Unable to call an unknown method..." error as it leads to a leak
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.cpp
[ -f "$INSTALL_DIR/lib/libwxscintilla-3.0.a" ] && cp "$INSTALL_DIR/lib/libwxscintilla-3.0.a" "$INSTALL_DIR/lib/libwx_mswu_scintilla-3.0.a"
[ -f "$INSTALL_DIR/lib/libwxscintilla-3.1.a" ] && cp "$INSTALL_DIR/lib/libwxscintilla-3.1.a" "$INSTALL_DIR/lib/libwx_mswu_scintilla-3.1.a"
@@ -226,21 +258,35 @@ if [ $BUILD_LUASOCKET ]; then
wget --no-check-certificate -c "$LUASOCKET_URL" -O "$LUASOCKET_FILENAME" || { echo "Error: failed to download LuaSocket"; exit 1; }
unzip "$LUASOCKET_FILENAME"
cd "$LUASOCKET_BASENAME"
mkdir -p "$INSTALL_DIR/lib/lua/$LUAV/"{mime,socket}
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" src/mime.c -llua$LUAV \
mkdir -p "$INSTALL_DIR/lib/lua/$LUAD/"{mime,socket}
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" src/mime.c -llua$LUAV \
|| { echo "Error: failed to build LuaSocket"; exit 1; }
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" \
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" \
src/{auxiliar.c,buffer.c,except.c,inet.c,io.c,luasocket.c,options.c,select.c,tcp.c,timeout.c,udp.c,wsocket.c} -lwsock32 -lws2_32 -llua$LUAV \
|| { echo "Error: failed to build LuaSocket"; exit 1; }
mkdir -p "$INSTALL_DIR/share/lua/$LUAV/socket"
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAV/socket"
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAV"
[ -f "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/socket"
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAD/socket"
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAD"
[ -f "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
cd ..
rm -rf "$LUASOCKET_FILENAME" "$LUASOCKET_BASENAME"
fi
# build lfs
if [ $BUILD_LFS ]; then
wget --no-check-certificate -c "$LFS_URL" -O "$LFS_FILENAME" || { echo "Error: failed to download lfs"; exit 1; }
tar -xzf "$LFS_FILENAME"
mv "luafilesystem-$LFS_BASENAME" "$LFS_BASENAME"
cd "$LFS_BASENAME/src"
mkdir -p "$INSTALL_DIR/lib/lua/$LUAD/"
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" lfs.c -llua$LUAV \
|| { echo "Error: failed to build lfs"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" ] || { echo "Error: lfs.dll isn't found"; exit 1; }
cd ../..
rm -rf "$LFS_FILENAME" "$LFS_BASENAME"
fi
# build LuaSec
if [ $BUILD_LUASEC ]; then
# build openSSL
@@ -259,11 +305,13 @@ if [ $BUILD_LUASEC ]; then
# the folder in the archive is "luasec-luasec-....", so need to fix
mv "luasec-$LUASEC_BASENAME" $LUASEC_BASENAME
cd "$LUASEC_BASENAME"
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/5.1/ssl.dll" \
src/{timeout.c,buffer.c,io.c,context.c,ssl.c,wsocket.c} -lssl -lcrypto -lws2_32 -lgdi32 -llua51 \
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" \
src/luasocket/{timeout.c,buffer.c,io.c,wsocket.c} src/{context.c,x509.c,ssl.c} -Isrc -lssl -lcrypto -lws2_32 -lgdi32 -llua$LUAV \
|| { echo "Error: failed to build LuaSec"; exit 1; }
cp src/{ssl.lua,https.lua} "$INSTALL_DIR/share/lua/5.1"
[ -f "$INSTALL_DIR/lib/lua/5.1/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
cp src/ssl.lua "$INSTALL_DIR/share/lua/$LUAD"
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/ssl"
cp src/https.lua "$INSTALL_DIR/share/lua/$LUAD/ssl"
[ -f "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
cd ..
rm -rf "$LUASEC_FILENAME" "$LUASEC_BASENAME"
fi
@@ -272,9 +320,9 @@ fi
if [ $BUILD_WINAPI ]; then
git clone "$WINAPI_URL" "$WINAPI_BASENAME"
cd "$WINAPI_BASENAME"
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/5.1/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua51 \
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua$LUAV \
|| { echo "Error: failed to build winapi"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/5.1/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
[ -f "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
cd ..
rm -rf "$WINAPI_BASENAME"
fi
@@ -292,13 +340,14 @@ mkdir -p "$BIN_DIR" || { echo "Error: cannot create directory $BIN_DIR"; exit 1;
[ $BUILD_LUA ] && cp "$INSTALL_DIR/bin/lua$LUAS.exe" "$INSTALL_DIR/lib/lua$LUAV.dll" "$BIN_DIR"
[ $BUILD_WXLUA ] && cp "$INSTALL_DIR/bin/libwx.dll" "$BIN_DIR/wx.dll"
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/5.1/winapi.dll" "$BIN_DIR"
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/5.1/ssl.dll" "$BIN_DIR"
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" "$BIN_DIR/clibs$LUAS"
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" "$BIN_DIR/clibs$LUAS"
[ $BUILD_LFS ] && cp "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" "$BIN_DIR/clibs$LUAS"
if [ $BUILD_LUASOCKET ]; then
mkdir -p "$BIN_DIR/clibs$LUAS/"{mime,socket}
cp "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
cp "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
cp "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
cp "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
fi
# To build lua5.1.dll proxy:

View File

@@ -54,15 +54,20 @@ end
local file = ... -- pass an existing file name as a parameter
local messages = {}
for _, mask in ipairs({"zbstudio/*.lua", "src/main.lua", "src/editor/*.lua"}) do
for _, mask in ipairs({"src/main.lua", "src/editor/*.lua"}) do
for _, file in ipairs(FileSysGet(mask, wx.wxFILE)) do
local content = FileRead(file)
for msg in content:gmatch("[^%w]TR(%b())") do
-- remove brackets aroung ("foo")
-- extract message from ("foo", count)
msg = msg:gsub("^%(", ""):gsub("%)$", ""):gsub([[(["']), .+]], "%1")
messages[msg] = messages[msg] or {}
messages[msg][file] = (messages[msg][file] or 0) + 1
if not msg:find([=[^["']]=]) or not msg:find([=[["']$]=]) then
io.stderr:write(("Call with a non-string 'TR(%s)' ignored in '%s'.\n")
:format(msg, file))
else
messages[msg] = messages[msg] or {}
messages[msg][file] = (messages[msg][file] or 0) + 1
end
end
end
end
@@ -78,9 +83,12 @@ end
local plural = existing[0] and (" [0] = "..existing[0].."\n") or ""
existing[0] = nil
local en = loadfile("cfg/i18n/en.lua")() -- load 'en' with translations that require pluralization
local msgs = {}
for m, files in pairs(messages) do
local str = " ["..m.."] = "..(existing[m] or 'nil, --')
local str = " ["..m.."] = "
..(existing[m] or (en[m:gsub([=[^['"]]=],''):gsub([=[['"]$]=],'')] and '{}, --' or 'nil, --'))
str = str:gsub(" %-%-.*$", "").." -- "
for f in pairs(files) do str = str .. f .. ", " end
msgs[#msgs+1] = str:gsub(", $", "")
@@ -90,7 +98,7 @@ end
table.sort(msgs)
print("return {\n"..plural..table.concat(msgs, "\n").."\n}")
if next(existing) then
local str = "-- no match found for the following elements: "
local str = "No match found for the following elements: "
for msg in pairs(existing) do str = str .. msg .. ", " end
print((str:gsub(", $", "")))
io.stderr:write((str:gsub(", $", "\n")))
end

View File

@@ -8,6 +8,7 @@
#define _WIN32_WINNT 0x0502
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winbase.h>
#include <stdlib.h>
@@ -154,17 +155,11 @@ int main (int argc, char *argv[])
MB_OK|MB_ICONERROR);
return 0;
}
if (file!=NULL)
*file = 0; // finish the string, I don't need the appname
//int i;
//for (i=0;i<argc; i++)
// printf("%d %s\n",i,argv[i]);
if (file!=NULL) *file = 0; // finish the string, don't need the appname
SetCurrentDirectory(buffer);
SetDllDirectory(".\\bin\\");
hinstLib = LoadLibrary("lua51.dll");
hinstLib = LoadLibrary(".\\bin\\lua51.dll");
if (hinstLib != NULL)
{
luaL_newstate = (voidfunc*) GetProcAddress(hinstLib, "luaL_newstate");

View File

@@ -1,5 +1,6 @@
-- If you have used Estrela before, please copy this content
-- to your user.lua file in the cfg/ directory
-- If you have used Estrela for graphics shader authoring or luxinia,
-- create/modify the `user.lua` file in the current folder
-- and add `include "estrela"` (1.21+) to load all tools and specifications by default again.
-- load all tools, specs, and interpreters
local all = function() return true end
@@ -9,8 +10,6 @@ load.interpreters(all)
-- this flag means that toggling between projects, will not affect the
-- list of opened files (old estrela default).
-- zbstudio defaults here to true, meaning that you get
-- per-project list of openend files
projectautoopen = false
-- default search paths for luxinia

View File

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

View File

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

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
}

346
cfg/i18n/eo.lua Normal file
View File

@@ -0,0 +1,346 @@
--- Traduko fare de cosmotect
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%s event failed: %s"] = "%s evento malplenumiĝas: %s", -- src\editor\package.lua
["%s%% formatted..."] = nil, -- src\editor\print.lua
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "&Pri", -- src\editor\menu_help.lua
["&Add Watch"] = "&Aldoni observadaĵon", -- src\editor\debugger.lua
["&Break"] = "&Haltigi", -- src\editor\menu_project.lua
["&Close Page"] = "&Fermi paĝon", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Komunumo", -- src\editor\menu_help.lua
["&Compile"] = "&Kompili", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "&Kopii", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "&Defaŭlta aranĝo", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Forigi observadaĵon", -- src\editor\debugger.lua
["&Delete"] = "&Forigi", -- src\editor\filetree.lua
["&Documentation"] = "&Dokumentado", -- src\editor\menu_help.lua
["&Edit Project Directory"] = "&Redakti projektan dosierujon", -- src\editor\filetree.lua
["&Edit Value"] = "&Redakti valoron", -- src\editor\debugger.lua
["&Edit Watch"] = "&Redakti observadaĵon", -- src\editor\debugger.lua
["&Edit"] = "&Redakti", -- src\editor\menu_edit.lua
["&File"] = "&Dosiero", -- src\editor\menu_file.lua
["&Find"] = "Tra&serĉi", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "&Kaŝi/Malkaŝi ĉion", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "&Oftaj demandoj", -- src\editor\menu_help.lua
["&Getting Started Guide"] = "&Ekgvidilo", -- src\editor\menu_help.lua
["&Help"] = "&Helpo", -- src\editor\menu_help.lua
["&New Directory"] = "&Nova dosierujo", -- src\editor\filetree.lua
["&New"] = "&Nova paĝo", -- src\editor\menu_file.lua
["&Open..."] = "&Malfermi...", -- src\editor\menu_file.lua
["&Output/Console Window"] = "&Eliga/Konzola fenestro", -- src\editor\menu_view.lua
["&Paste"] = "&Alglui", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Print..."] = nil, -- src\editor\print.lua
["&Project Page"] = "&Projektpaĝo", -- src\editor\menu_help.lua
["&Project"] = "&Projekto", -- src\editor\menu_project.lua
["&Redo"] = "&Refari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Renomigi", -- src\editor\filetree.lua
["&Replace"] = "&Anstataŭi", -- src\editor\menu_search.lua
["&Run"] = "&Plenumi", -- src\editor\menu_project.lua
["&Save"] = "&Konservi", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "&Serĉi", -- src\editor\menu_search.lua
["&Select Command"] = nil, -- src\editor\gui.lua
["&Sort"] = "&Ordi", -- src\editor\menu_edit.lua
["&Stack Window"] = "&Staka fenestro", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "&Ekfunkciigi sencimigilo-servilon", -- src\editor\menu_project.lua
["&Status Bar"] = "&Stata breto", -- src\editor\menu_view.lua
["&Tool Bar"] = "&Ilobreto", -- src\editor\menu_view.lua
["&Tutorials"] = "&Lerniloj", -- src\editor\menu_help.lua
["&Undo"] = "&Malfari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&View"] = "&Vidi", -- src\editor\menu_view.lua
["&Watch Window"] = "&Observada fenestro", -- src\editor\menu_view.lua
["About %s"] = "Pri %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Aldoni al malnetdosiero", -- src\editor\editor.lua
["Add Watch Expression"] = "Aldoni observadaĵan esprimon", -- src\editor\editor.lua
["All files"] = "Ĉiuj dosieroj", -- src\editor\commands.lua
["Allow external process to start debugging"] = "Lasi eksteran procezon ek-sencimigi", -- src\editor\menu_project.lua
["Analyze the source code"] = "Analizi fontkodon", -- src\editor\inspect.lua
["Analyze"] = "Analizi", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Aŭtomate kompletigi fontkodnomojn", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Aŭtomate kompletigi dumtajpe", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = "Legosigno", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Haltigi plenumon ĉe la sekva plenumata linio da fontkodo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Breakpoint"] = nil, -- src\editor\menu_project.lua
["C&lear Console Window"] = nil, -- src\editor\gui.lua
["C&lear Output Window"] = "Viŝi eligan fenestron", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&omment/Uncomment"] = "F&orkomenti/Eksforkomenti", -- src\editor\menu_edit.lua
["Can't evaluate the expression while the application is running."] = "Ne povas malkodi la esprimon dum funkciatas la aplikaĵo.", -- src\editor\debugger.lua
["Can't open file '%s': %s"] = "Ne povas malfermi la dosieron '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Ne povas analizi aŭtomatrestaŭran dosieron; neprava dosierformo: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Ne povas plenumi la enirejan skripton", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Ne povas ekfunkciigi sencimigilo-servilon ĉe %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Ne povas komenci sencimigan seancon pro interna eraro", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Ne povas ek-sencimigon sen malfermita dosiero aŭ kun la kuranta dosiero nekonserviĝas ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Ne povas malfunkciigi sencimigilo-servilon, ĉar ĝi ne funkciantas", -- src\editor\debugger.lua
["Cancelled by the user."] = "Nuligita per la uzanto", -- src\editor\findreplace.lua
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "Elekti projektan dosierujon", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = "Elekti...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Viŝi anojn", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Senlistigi tiujn ĉi anojn", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Viŝi la eligan fenestron antaŭ kompilado aŭ sencimigado", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fermi &aliajn paĝojn", -- src\editor\gui.lua
["Close A&ll Pages"] = "Fermi ĉiujn paĝojn", -- src\editor\gui.lua
["Close the current editor window"] = "Fermi la kurantan redaktilan fenestron", -- src\editor\menu_file.lua
["Co&ntinue"] = "Daŭrigi", -- src\editor\menu_project.lua
["Col: %d"] = "Kol: %d", -- src\editor\editor.lua
["Command Line Parameters..."] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
["Command line parameters"] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
["Comment or uncomment current or selected lines"] = "Forkomenti aŭ eksforkomenti la kurantan aŭ la elektitajn liniojn", -- src\editor\menu_edit.lua
["Compilation error"] = "Eraro de kompilo", -- src\editor\commands.lua, src\editor\debugger.lua
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Kompilo sukcesa; %.0f%% elcentaĵo da sukceso (%d/%d).", -- src\editor\commands.lua
["Compile the current file"] = "Kompili la kurantan dosieron", -- src\editor\menu_project.lua
["Complete &Identifier"] = "Finfari &fontkodnomon", -- src\editor\menu_edit.lua
["Complete the current identifier"] = "Finfari la kurantan fontkodnomon", -- src\editor\menu_edit.lua
["Consider removing backslash from escape sequence '%s'."] = "Kontemplu forigi maloblikvon el eskapsekvenco '%s'.", -- src\editor\commands.lua
["Copy Full Path"] = "Kopii plenan vojon", -- src\editor\gui.lua, src\editor\filetree.lua
["Copy selected text to clipboard"] = "Kopii elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Korekti &alineon", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Ne povis aktivi la dosieron '%s' por sencimigi; daŭrantas sen ĝi.", -- src\editor\debugger.lua
["Create an empty document"] = "Krei malplenan dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "El&tondi", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Eltondi la elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Sencimigilo-servilon ekfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Sencimigilo-servilon malfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sencimiga seanco estas finita (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sencimiga seanco komencitas en '%s'.", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "La sencimigo estis finetita ĉe '%s:%s' (ne povis aktivi la dosieron).", -- src\editor\debugger.lua
["Detach &Process"] = "Deigi &procezon", -- src\editor\menu_project.lua
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Ĉu vi volas forigi je '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Ĉu vi volas superskribi ĉi tiun?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Ĉu vi volas reŝarĝi tiun ĉi?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Ĉu vi volas konservi ĉiujn ŝanĝojn, kiuj enfaris je '%s'?", -- src\editor\commands.lua
["E&xit"] = "&Eliri", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Enigu fontkodon de Lua kaj premu enenklavon por plenumi ĝin.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Enigu komandliniajn parametrojn (uzu nulig-butonon por viŝi)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Enigu anstataŭigan tekston", -- src\editor\editor.lua
["Error while loading API file: %s"] = "Eraro okazis dum ŝargado de API-a dosiero: %s", -- src\editor\autocomplete.lua
["Error while loading configuration file: %s"] = "Eraro okazis dum ŝargado de agorda dosiero: %s", -- src\editor\style.lua
["Error while processing API file: %s"] = "Eraro okazis dum analizado de API-a dosiero: %s", -- src\editor\autocomplete.lua
["Error while processing configuration file: %s"] = "Eraro okazis dum analizado de agorda dosiero: %s", -- src\editor\style.lua
["Error"] = "Eraro", -- src\editor\commands.lua
["Evaluate In Console"] = "Malkodi en la konzolo", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Plenumi la kurantan projekton/dosieron, kaj ĝisdatigadi la fontkodon por vidi tujajn rezultojn", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Plenumi la kurantan projekton/dosieron", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Eraro de plenumo", -- src\editor\debugger.lua
["Exit program"] = "Eliri programon", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "La dosiero nome de '%s' ŝanĝitis en disko.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "La dosiero nome de '%s' havas pli freŝan tempindikon, ol la ripardosiero '%s'; bonvolu ekzameni ĝin antaû konservi.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "La dosiero nome de '%s' forestas kaj ne povas esti reakirita.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "La dosiero nome de '%s' ne plu ekzistas.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File already exists."] = "Jam ekzistas tiu ĉi dosiero.", -- src\editor\commands.lua
["File history"] = "Dosiera historio", -- src\editor\menu_file.lua
["Find &In Files"] = "Traserĉi &en dosieroj", -- src\editor\menu_search.lua
["Find &Next"] = "&Pluserĉi", -- src\editor\menu_search.lua
["Find &Previous"] = "Traserĉi &antaŭanta", -- src\editor\menu_search.lua
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
["Find and replace text in files"] = "Traserĉi kaj anstataŭi tekston en dosieroj", -- src\editor\menu_search.lua
["Find and replace text"] = "Traserĉi kaj anstataŭi tekston", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Traserĉi en dosieroj", -- src\editor\toolbar.lua
["Find text in files"] = "Traserĉi tekston en dosieroj", -- src\editor\menu_search.lua
["Find text"] = "Traserĉi tekston", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Traserĉi la antaŭantan aperaĵon da teksto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Pluserĉi la aperaĵon da teksto", -- src\editor\menu_search.lua
["Find"] = "Traserĉi", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Kaŝi aŭ malkaŝi ĉiujn faldaĵojn da fontkodoj", -- src\editor\menu_edit.lua
["Formatting page %d..."] = nil, -- src\editor\print.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Trovis aŭtomatrestaŭran dosieron kaj riparis konservitan seancon.", -- src\editor\commands.lua
["Full &Screen"] = "Plenekrana &reĝimo", -- src\editor\menu_view.lua
["Go To Definition"] = "Iri al deklaro", -- src\editor\editor.lua
["Go To File..."] = nil, -- src\editor\menu_search.lua
["Go To Line..."] = "Iri al linio...", -- src\editor\menu_search.lua
["Go To Next Bookmark"] = "Iri al sekvanta legosigno", -- src\editor\menu_edit.lua
["Go To Next Breakpoint"] = nil, -- src\editor\menu_project.lua
["Go To Previous Bookmark"] = "Iri al antaŭanta legosigno", -- src\editor\menu_edit.lua
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.lua
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
["Go to file"] = nil, -- src\editor\menu_search.lua
["Go to line"] = "Iri al linio", -- src\editor\menu_search.lua
["Go to symbol"] = nil, -- src\editor\menu_search.lua
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Ignoris eraron en pravaloriza kodo de la sencimigilo: %s.", -- src\editor\debugger.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
["Known Files"] = "Konataj dosieroj", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Loka konzolo", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Interpretilo de Lua", -- src\editor\menu_project.lua
["Map Directory..."] = nil, -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Mapi faran peton pri '%s' al '%s'.", -- src\editor\debugger.lua
["Markers Window"] = nil, -- src\editor\menu_view.lua
["Markers"] = nil, -- src\editor\markers.lua
["Match case"] = "Atenti usklecon", -- src\editor\toolbar.lua
["Match whole word"] = "Atenti plenan vorton", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Detektis kodoprezentojn miksitajn linifinajn", -- src\editor\commands.lua
["Navigate"] = nil, -- src\editor\menu_search.lua
["New &File"] = "Nova &dosiero", -- src\editor\filetree.lua
["OVR"] = "SUS", -- src\editor\editor.lua
["Open With Default Program"] = "Malfermi per la defaŭlta programo", -- src\editor\filetree.lua
["Open an existing document"] = "Malfermi jaman dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Malfermi dosieron", -- src\editor\commands.lua
["Outline Window"] = "Skemo-fenestro", -- src\editor\menu_view.lua
["Outline"] = "Skemo", -- src\editor\outline.lua
["Output (running)"] = "Eligo (funkciata)", -- src\editor\debugger.lua, src\editor\output.lua
["Output (suspended)"] = "Eligo (finetita)", -- src\editor\debugger.lua
["Output"] = "Eligo", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
["Page Setup..."] = nil, -- src\editor\print.lua
["Paste text from the clipboard"] = "Alglui tekston el la tondejo", -- src\editor\menu_edit.lua
["Preferences"] = "Preferoj", -- src\editor\menu_edit.lua
["Prepend '!' to force local execution."] = "Antaŭdoni je '!' por altrudi lokan plenumon.", -- src\editor\shellbox.lua
["Prepend '=' to show complex values on multiple lines."] = "Antaŭdoni je '=' por montri komplikajn valorojn sur multaj linioj.", -- src\editor\shellbox.lua
["Press cancel to abort."] = "Premu nulig-butonon por fini.", -- src\editor\commands.lua
["Print the current document"] = nil, -- src\editor\print.lua
["Program '%s' started in '%s' (pid: %d)."] = "La programo nome de '%s' komencitas en '%s' (pid: %d).", -- src\editor\output.lua
["Program can't start because conflicting process is running as '%s'."] = "La programo ne povas komenci, ĉar konflikta procezo funkcias kiel je la '%s'.", -- src\editor\output.lua
["Program completed in %.2f seconds (pid: %d)."] = "La programo finfaris post %.2f sekundoj", -- src\editor\output.lua
["Program starting as '%s'."] = "La programo komencas kiel je '%s'.", -- src\editor\output.lua
["Program stopped (pid: %d)."] = "La programo finis (pid: %d).", -- src\editor\debugger.lua
["Program unable to run as '%s'."] = "La programo ne kapablas plenumi kiel je '%s'.", -- src\editor\output.lua
["Project Directory"] = "Projekta dosierujo", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Project history"] = "Projekta historio", -- src\editor\menu_file.lua
["Project"] = "Projekto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Projekta/&Dosierarba Fenestro", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Doni komandliniajn parametrojn", -- src\editor\menu_project.lua
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "L/A", -- src\editor\editor.lua
["R/W"] = "L/S", -- src\editor\editor.lua
["Re&place In Files"] = "Anstataŭi en dosieroj", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Realinei elektitajn liniojn", -- src\editor\menu_edit.lua
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.lua
["Recent Files"] = "Antaŭnelongaj dosieroj", -- src\editor\menu_file.lua
["Recent Projects"] = "Antaŭnelongaj projektoj", -- src\editor\menu_file.lua
["Redo last edit undone"] = "Refari lastan redakton", -- src\editor\menu_edit.lua
["Refresh Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "Refreŝigu", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Peto por komenci novan sencimigan seancon malakceptis, ĉar seanco jam faratas.", -- src\editor\debugger.lua
["Regular expression"] = "Regul&esprimo", -- src\editor\toolbar.lua
["Remote console"] = "Fora konzolo", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renomigi ĉiujn aperaĵojn", -- src\editor\editor.lua
["Replace All Selections"] = "Anstataŭi ĉiujn elektojn", -- src\editor\editor.lua
["Replace all"] = "Anstataŭi ĉion", -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Anstataŭis UTF8-an signon per %s.", -- src\editor\commands.lua
["Reset to default layout"] = "Rekomenciĝi al defaŭltan aranĝon", -- src\editor\menu_view.lua
["Run As Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\menu_project.lua
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "&Fini sencimigo", -- src\editor\menu_project.lua
["S&top Process"] = "&Fini procezon", -- src\editor\menu_project.lua
["Save &As..."] = "Konservi &kiel...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Konservi ĉ&ion", -- src\editor\menu_file.lua
["Save Changes?"] = "Ĉu konservi ĉiujn ŝanĝojn?", -- src\editor\commands.lua
["Save all open documents"] = "Konservi ĉiujn malfermajn dokumentojn", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Konservi dosieron kiel", -- src\editor\commands.lua
["Save file?"] = "Ĉu konservi dosieron?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Konservi la kurantan dokumenton kun dosiero novanome", -- src\editor\menu_file.lua
["Save the current document"] = "Konservi la kurantan dokumenton", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Konservis aŭtomatrestaŭron je %s.", -- src\editor\commands.lua
["Scratchpad error"] = "Eraro de malnetdosiero", -- src\editor\debugger.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in selection"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Ele: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Elekti &ĉion", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Elekti kaj pluserĉi", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Elekti kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Elekti la tekston en la redaktilo", -- src\editor\menu_edit.lua
["Select the word under cursor and find its next occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj pluserĉi", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
["Set As Start File"] = nil, -- src\editor\filetree.lua
["Set From Current File"] = "Precizigi per la kuranta dosiero", -- src\editor\menu_project.lua
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
["Set project directory from current file"] = "Precizigi la projektan dosierujon per la kurantan dosieron", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Precizigi la interpretiloton", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Precizigi la projekt-dosierujoton", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Agordoj de la sistemo", -- src\editor\menu_edit.lua
["Settings: User"] = "Agordoj de la uzanto", -- src\editor\menu_edit.lua
["Show &Tooltip"] = "Montri &ŝpruchelpilon", -- src\editor\menu_edit.lua
["Show All Files"] = nil, -- src\editor\filetree.lua
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
["Show Location"] = "Montri lokon", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = nil, -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Montri ŝpruchelpilon pri la kuranta pozicio; meti la tajpmontrilon preter la ronda ekkrampo de la funkcio", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Montri/Kaŝi la statan breton", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Montri/Kaŝi la ilobreton", -- src\editor\menu_view.lua
["Sort By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "Ordi la elektitajn liniojn", -- src\editor\menu_edit.lua
["Source"] = "Fontkodo", -- src\editor\menu_edit.lua
["Stack"] = "Stako", -- src\editor\debugger.lua
["Start &Debugging"] = "Ek-&sencimigi", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Komenci aŭ pluigi sencimigon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Eniri &enen", -- src\editor\menu_project.lua
["Step &Over"] = "Trans&salti", -- src\editor\menu_project.lua
["Step O&ut"] = "Eliri el", -- src\editor\menu_project.lua
["Step into"] = "Eniri enen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Eliri el la kuranta funkcio", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Transsalti", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Fini sencimigon kaj plenumadi la procezon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Fini la nunfunkciatan procezon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Interŝanĝi al aŭ el plenekrana reĝimo", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.lua
["Text not found."] = "Teksto ne trovitis", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "La dosiero de API devas troviĝi en subdosierujo de la API-a dosierujo.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Baskuli legosignon", -- src\editor\markers.lua, src\editor\menu_edit.lua
["Toggle Breakpoint"] = "Baskuli haltopunkto", -- src\editor\markers.lua, src\editor\menu_project.lua
["Toggle bookmark"] = "Baskuli legosignon", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
["Toggle breakpoint"] = "Baskuli haltopunkto", -- src\editor\markers.lua, src\editor\toolbar.lua
["Tr&ace"] = "Spuri", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Spurili plenumon per montri ĉiun plenumitan linion", -- src\editor\menu_project.lua
["Unable to create directory '%s'."] = "Ne kapablas krei je la dosierujo '%s'.", -- src\editor\filetree.lua
["Unable to create file '%s'."] = "Ne kapablas krei je la dosiero '%s'.", -- src\editor\filetree.lua
["Unable to delete directory '%s': %s"] = "Ne kapablas forigi je la dosierujo '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Ne kapablas ŝarĝi je la dosiero '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Ne kapablas renomigi je la dosiero '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Ne kapablas konservi je la dosiero '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Ne kapablas fini la programon (pid: %d), kodo %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Malfari la antaŭan redakton", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Uzu je '%s' por vidi plenan priskribon", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Uzu je '%s' por montri linifinojn kaj je '%s' por konverti ilin", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Tajpu 'clear' por viŝi la eligon kaj historion de la ŝelo.", -- src\editor\shellbox.lua
["Use Shift-Enter for multiline code."] = "Uzu <Majuskligklavon-Enenklavon> por plurlinia fontkodo.", -- src\editor\shellbox.lua
["View the markers window"] = nil, -- src\editor\menu_view.lua
["View the outline window"] = "Vidi la skemo-fenestron", -- src\editor\menu_view.lua
["View the output/console window"] = "Vidi la eligo/konzolo-fenestron", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Vidi la projekto/dosierarbo-fenestron", -- src\editor\menu_view.lua
["View the stack window"] = "Vidi la stako-fenestron", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Vidi la observado-fenestron", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Observado", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bonvenon al la interaga interpretilo de Lua.", -- src\editor\shellbox.lua
["Wrap around"] = "Ĉirkaŭflui", -- src\editor\toolbar.lua
["You must save the program first."] = "Vi unue devas konservi la programon.", -- src\editor\commands.lua
["Zoom In"] = "Zomi", -- src\editor\menu_view.lua
["Zoom Out"] = "Malzomi", -- src\editor\menu_view.lua
["Zoom to 100%"] = "Zomi al 100%", -- src\editor\menu_view.lua
["Zoom"] = "Zomo", -- src\editor\menu_view.lua
["on line %d"] = "sur la linio %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
["traced %d instruction"] = {"spuris je %d instrukcio", "spuris je %d instrukcioj"}, -- src\editor\debugger.lua
["unknown error"] = "obskura eraro", -- src\editor\debugger.lua
}

View File

@@ -1,288 +1,346 @@
-- Traducción realiazada por Iñigo Sola
--- Traducción realiazada por Iñigo Sola
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%d instance"] = nil, -- src\editor\findreplace.lua
["%s event failed: %s"] = nil, -- src\editor\package.lua
["%s event failed: %s"] = "El evento %s ha fallado: %s", -- src\editor\package.lua
["%s%% formatted..."] = "%s%% formateado...", -- src\editor\print.lua
["%s%% loaded..."] = "%s%% cargado...", -- src\editor\commands.lua
["&About"] = "&Acerca de...", -- src\editor\menu_help.lua
["&Add Watch"] = "Añadir observación", -- src\editor\debugger.lua
["&Add Watch"] = "&Añadir inspección", -- src\editor\debugger.lua
["&Break"] = "Ruptura", -- src\editor\menu_project.lua
["&Close Page"] = "Cerrar página", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = nil, -- src\editor\menu_help.lua
["&Compile"] = "Compilar", -- src\editor\menu_project.lua
["&Copy"] = "Copiar", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Default Layout"] = "Diseño por defecto", -- src\editor\menu_view.lua
["&Delete Watch"] = "Eliminar observación", -- src\editor\debugger.lua
["&Delete"] = nil, -- src\editor\filetree.lua
["&Documentation"] = nil, -- src\editor\menu_help.lua
["&Down"] = nil, -- src\editor\findreplace.lua
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
["&Edit Watch"] = "Editar observación", -- src\editor\debugger.lua
["&Edit"] = "Editar", -- src\editor\menu_edit.lua
["&Close Page"] = "&Cerrar página", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Comunidad", -- src\editor\menu_help.lua
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
["&Copy Value"] = "&Copiar valor", -- src\editor\debugger.lua
["&Copy"] = "&Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "&Diseño por defecto", -- src\editor\menu_view.lua
["&Delete Watch"] = "Eliminar inspección", -- src\editor\debugger.lua
["&Delete"] = "Eliminar", -- src\editor\filetree.lua
["&Documentation"] = "&Documentación", -- src\editor\menu_help.lua
["&Edit Project Directory"] = "&Editar directorio del proyecto", -- src\editor\filetree.lua
["&Edit Value"] = "&Editar valor", -- src\editor\debugger.lua
["&Edit Watch"] = "&Editar inspección", -- src\editor\debugger.lua
["&Edit"] = "&Editar", -- src\editor\menu_edit.lua
["&File"] = "Archivo", -- src\editor\menu_file.lua
["&Find All"] = nil, -- src\editor\findreplace.lua
["&Find Next"] = nil, -- src\editor\findreplace.lua
["&Find"] = "Buscar", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Plegar/desplegar todo", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
["&Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
["&Frequently Asked Questions"] = "Preguntas &Frecuentes", -- src\editor\menu_help.lua
["&Getting Started Guide"] = "&Guía de iniciación", -- src\editor\menu_help.lua
["&Help"] = "Ayuda", -- src\editor\menu_help.lua
["&New Directory"] = nil, -- src\editor\filetree.lua
["&New Directory"] = "&Nuevo directorio", -- src\editor\filetree.lua
["&New"] = "&Nuevo", -- src\editor\menu_file.lua
["&Open..."] = "&Abrir...", -- src\editor\menu_file.lua
["&Output/Console Window"] = "Salida/Consola", -- src\editor\menu_view.lua
["&Paste"] = "Pegar", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Project Page"] = nil, -- src\editor\menu_help.lua
["&Project"] = "Proyecto", -- src\editor\inspect.lua, src\editor\menu_project.lua
["&Redo"] = "Rehacer", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Rename"] = nil, -- src\editor\filetree.lua
["&Replace All"] = nil, -- src\editor\findreplace.lua
["&Replace"] = "Remplazar", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Paste"] = "Pegar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Print..."] = "Im&primir", -- src\editor\print.lua
["&Project Page"] = "&Página de proyecto", -- src\editor\menu_help.lua
["&Project"] = "Proyecto", -- src\editor\menu_project.lua
["&Redo"] = "Rehacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Renombrar", -- src\editor\filetree.lua
["&Replace"] = "Remplazar", -- src\editor\menu_search.lua
["&Run"] = "Ejecutar", -- src\editor\menu_project.lua
["&Save"] = "Guardar", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "Buscar", -- src\editor\menu_search.lua
["&Select Command"] = "&Seleccionar comando", -- src\editor\gui.lua
["&Sort"] = "Clasificar", -- src\editor\menu_edit.lua
["&Stack Window"] = "Ventana de la pila de ejecución", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Lanzar servidor de depuración", -- src\editor\menu_project.lua
["&Status Bar"] = nil, -- src\editor\menu_view.lua
["&Subdirectories"] = nil, -- src\editor\findreplace.lua
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
["&Tutorials"] = nil, -- src\editor\menu_help.lua
["&Undo"] = "Deshacer", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Up"] = nil, -- src\editor\findreplace.lua
["&Status Bar"] = "Barra de e&stado", -- src\editor\menu_view.lua
["&Tool Bar"] = "Barra de herramientas", -- src\editor\menu_view.lua
["&Tutorials"] = "&Tutoriales", -- src\editor\menu_help.lua
["&Undo"] = "Deshacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&View"] = "Ver", -- src\editor\menu_view.lua
["&Watch Window"] = "Ventana de observaciones", -- src\editor\menu_view.lua
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
["&Watch Window"] = "Ventana de inspección", -- src\editor\menu_view.lua
["About %s"] = "Acerca de %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Añadir al borrador", -- src\editor\editor.lua
["Add Watch Expression"] = "Añadir expresión de observación", -- src\editor\editor.lua
["Add Watch Expression"] = "Añadir expresión de inspección", -- src\editor\editor.lua
["All files"] = "Todos los archivos", -- src\editor\commands.lua
["Allow external process to start debugging"] = "Permitir proceso externo para iniciar depuración", -- src\editor\menu_project.lua
["Analyze the source code"] = "Analizar el código fuente", -- src\editor\inspect.lua
["Analyze"] = "Analizar", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Autocompletar mientras se escribe", -- src\editor\menu_edit.lua
["Bookmark"] = nil, -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\menu_project.lua
["Binary file is shown as read-only as it is only partially loaded."] = "El archivo binario es mostrado como solo lectura ya que solo ha sido cargado parcialmente.", -- src\editor\commands.lua
["Bookmark"] = "Marcador", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Breakpoint"] = "Punto de ruptura", -- src\editor\menu_project.lua
["C&lear Console Window"] = "Limpiar ventana de Consola", -- src\editor\gui.lua
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&omment/Uncomment"] = "Comentar/descomentar", -- src\editor\menu_edit.lua
["Can't debug the script in the active editor window."] = "No se puede depurar el script en la ventana activa del editor", -- src\editor\debugger.lua
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "No se puede encontrar el archivo '%s' en el proyecto actual para activar la depuración. Actualiza el proyecto o abre el archivo en el editor antes de depurar.", -- src\editor\debugger.lua
["Can't evaluate the expression while the application is running."] = "No se puede evaluar la expresión mientras la aplicación se está ejecutando.", -- src\editor\debugger.lua
["Can't open file '%s': %s"] = "No se puede abrir el archivo '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "No se puede procesar la autorrecuperación; formato inválido: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "No se puede remplazar en modo solo lectura.", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "No se pude ejecutar el punto de entrada del script (%s).", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "No se puede iniciar el servidor de depuración %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "No se puede iniciar la depuración para '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "No se puede iniciar la sesión de depuración debido a un error interno '%s'.'", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "No se puede iniciar la depuración sin abrir un archivo o si no ha sido guardado ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = nil, -- src\editor\debugger.lua
["Cancel"] = nil, -- src\editor\findreplace.lua
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
["Choose a project directory"] = "Elegir el directorio del proyecto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\gui.lua, src\editor\filetree.lua
["Choose..."] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = nil, -- src\editor\menu_file.lua
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
["Can't stop debugger server as it is not started."] = "No se puede parar el servidor de puración ya que no se ha iniciado.", -- src\editor\debugger.lua
["Cancelled by the user."] = "Cancelado por el usuario.", -- src\editor\findreplace.lua
["Choose a directory to map"] = "Elegir un directorio para mapear", -- src\editor\filetree.lua
["Choose a project directory"] = "Elegir un directorio de proyecto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Elegir un directorio de búsqueda", -- src\editor\findreplace.lua
["Choose..."] = "Elegir...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Limpiar objetos", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Limpiar objectos de esta lista", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Limpiar la ventana de salida antes de compilar o depurar", -- src\editor\menu_project.lua
["Close &Other Pages"] = nil, -- src\editor\gui.lua
["Close A&ll Pages"] = nil, -- src\editor\gui.lua
["Close &Other Pages"] = "Cerrar &Otras Páginas", -- src\editor\gui.lua
["Close A&ll Pages"] = "Cerrar todas las páginas", -- src\editor\gui.lua
["Close the current editor window"] = "Cerrar la ventana actual del editor", -- src\editor\menu_file.lua
["Co&ntinue"] = "Continuar", -- src\editor\menu_project.lua
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
["Command Line Parameters..."] = nil, -- src\editor\menu_project.lua
["Command line parameters"] = nil, -- src\editor\menu_project.lua
["Command Line Parameters..."] = "Parámetros de línea de comandos...", -- src\editor\menu_project.lua
["Command line parameters"] = "Parámetros de línea de comandos", -- src\editor\menu_project.lua
["Comment or uncomment current or selected lines"] = {"Comentar o descomentar la línea activa (seleccionada)","Comentar o descomentar las líneas activas (seleccionadas)"}, -- src\editor\menu_edit.lua
["Compilation error"] = "Error de compilación", -- src\editor\commands.lua, src\editor\debugger.lua
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilación exitosa; factor de éxito: %.0f%% (%d/%d).", -- src\editor\commands.lua
["Compile the current file"] = "Compilar el archivo actual", -- src\editor\menu_project.lua
["Complete &Identifier"] = "Completar identificador", -- src\editor\menu_edit.lua
["Complete the current identifier"] = "Completar el actual identificador", -- src\editor\menu_edit.lua
["Consider removing backslash from escape sequence '%s'."] = nil, -- src\editor\commands.lua
["Copy Full Path"] = nil, -- src\editor\filetree.lua
["Consider removing backslash from escape sequence '%s'."] = "Considerar la eliminación de las barras invertidas de la secuencia de escape '%s'.", -- src\editor\commands.lua
["Copy Full Path"] = "Copiar ruta completa", -- src\editor\gui.lua, src\editor\filetree.lua
["Copy selected text to clipboard"] = "Copiar el texto seleccionado al portapapeles", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Corregir &Identación", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "No se pudo activar el archivo '%s' para la depuración; continuar sin él.", -- src\editor\debugger.lua
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\gui.lua, src\editor\menu_file.lua
["Cu&t"] = "Cortar", -- src\editor\menu_edit.lua, src\editor\editor.lua
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "Cortar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Cortar el texto selecionado al portapapeles", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%s", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Seridor de depuración parado en %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sesión de depuración completada (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sesión de depuración iniciada en '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = nil, -- src\editor\debugger.lua
["Detach &Process"] = nil, -- src\editor\menu_project.lua
["Directory"] = nil, -- src\editor\findreplace.lua
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
["Do you want to overwrite it?"] = nil, -- src\editor\commands.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Depuración suspendida en '%s:%s' (no se pudo activar el archivo)", -- src\editor\debugger.lua
["Detach &Process"] = "Separar &Proceso", -- src\editor\menu_project.lua
["Disable Indexing For '%s'"] = "Deshabilitar indexación para '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "¿Quieres borrar '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "¿Quieres sobrescribirlo?", -- src\editor\commands.lua
["Do you want to reload it?"] = "¿Quieres recargarlo?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "¿Quieres guardar los cambios en '%s'?", -- src\editor\commands.lua
["E&xit"] = "Salir", -- src\editor\menu_file.lua
["Enable Indexing"] = "Habilitar indexación", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Introduce código Lua y pulsa <Entrer> para ejecutarlo.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
["Enter line number"] = "Introduce número de línea", -- src\editor\menu_search.lua
["Enter command line parameters (use Cancel to clear)"] = "Introduce parámetros de línea de comandos (usa Cancel para limpiar)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Introduce el texto de remplazo", -- src\editor\editor.lua
["Error while loading API file: %s"] = "Error mientras se cargaba el archivo de API: %s", -- src\editor\autocomplete.lua
["Error while loading configuration file: %s"] = nil, -- src\editor\style.lua
["Error while loading configuration file: %s"] = "Error mientras se cargaba el fichero de configuración: %s", -- src\editor\style.lua
["Error while processing API file: %s"] = "Error mientras se procesaba el archivo de API: %s", -- src\editor\autocomplete.lua
["Error while processing configuration file: %s"] = nil, -- src\editor\style.lua
["Error while processing configuration file: %s"] = "Error mientras se procesaba el fichero de configuración: %s", -- src\editor\style.lua
["Error"] = "Error", -- src\editor\commands.lua
["Evaluate In Console"] = "Evaluar en consola", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Ejecutar el proyecto/archivo actual y manteniendo actualizado el código para ver resultados en tiempo real", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Error de ejecución", -- src\editor\debugger.lua
["Exit program"] = "Salir del programa", -- src\editor\menu_file.lua
["Expr"] = "Expr.", -- src\editor\debugger.lua
["Expression"] = "Expresión", -- src\editor\debugger.lua
["File '%s' has been modified on disk."] = "El archivo '%s' ha sido modificado en el disco.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "El archivo '%s' tiene una fecha más reciente que el restaurado '%s'; por favor, revísalo antes de guardar.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "El archivo '%s' no se encuenta y no puede ser recuperado.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "El archivo '%s' no existe.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = nil, -- src\editor\findreplace.lua
["File already exists."] = nil, -- src\editor\commands.lua
["File already exists."] = "El fichero ya existe", -- src\editor\commands.lua
["File history"] = "Historial de archivos", -- src\editor\menu_file.lua
["Find &In Files"] = "Buscar en archivos", -- src\editor\menu_search.lua
["Find &Next"] = "Buscar siguiente", -- src\editor\menu_search.lua
["Find &Previous"] = "Buscar anterior", -- src\editor\menu_search.lua
["Find In Files"] = nil, -- src\editor\findreplace.lua
["Find and insert library function"] = "Buscar e insertar función de librería", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Buscar y remplazar texto en archivos", -- src\editor\menu_search.lua
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\gui.lua, src\editor\menu_search.lua
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Buscar en ficheros", -- src\editor\toolbar.lua
["Find text in files"] = "Buscar texto en archivos", -- src\editor\menu_search.lua
["Find text"] = "Buscar texto", -- src\editor\gui.lua, src\editor\menu_search.lua
["Find text"] = "Buscar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Buscar la anterior aparición del texto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Buscar la siguiente aparecición del texto", -- src\editor\menu_search.lua
["Find"] = nil, -- src\editor\findreplace.lua
["Find"] = "Buscar", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Plegar o desplegar todo el código plegado", -- src\editor\menu_edit.lua
["Formatting page %d..."] = "Formateando página %d...", -- src\editor\print.lua
["Found %d instance."] = {"Encontrada una instancia", "Encontradas %d instancias"}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Encontrada autorrecuperación y sesión restaurada.", -- src\editor\commands.lua
["Found"] = nil, -- src\editor\findreplace.lua
["Full &Screen"] = "Pantalla completa", -- src\editor\menu_view.lua
["Go To Definition"] = nil, -- src\editor\editor.lua
["Go To Line"] = "Ir a línea", -- src\editor\menu_search.lua
["Go To Next Bookmark"] = nil, -- src\editor\menu_edit.lua
["Go To Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
["Go to a selected line"] = "Ir a línea seleccionada", -- src\editor\menu_search.lua
["Go To Definition"] = "Ir a definición", -- src\editor\editor.lua
["Go To File..."] = "Ir a fichero...", -- src\editor\menu_search.lua
["Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
["Go To Next Bookmark"] = "Ir al siguiente marcador", -- src\editor\menu_edit.lua
["Go To Next Breakpoint"] = "Ir al siguiente punto de ruptura", -- src\editor\menu_project.lua
["Go To Previous Bookmark"] = "Ir al marcador anterior", -- src\editor\menu_edit.lua
["Go To Previous Breakpoint"] = "Ir al punto de ruptura anterior", -- src\editor\menu_project.lua
["Go To Symbol..."] = "Ir a símbolo...", -- src\editor\menu_search.lua
["Go to file"] = "Ir a archivo", -- src\editor\menu_search.lua
["Go to line"] = "Ir a línea", -- src\editor\menu_search.lua
["Go to symbol"] = "Ir a símbolo", -- src\editor\menu_search.lua
["Hide '.%s' Files"] = "Ocultar archivos '.%s'", -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["In Files"] = nil, -- src\editor\findreplace.lua
["Jump to a function definition..."] = "Saltar a la definición de la función...", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = "Ignorar y no indexar símbolos de archivos en el directorio seleccionado", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Error ignorado en código de inicialización de depurador: %s.", -- src\editor\debugger.lua
["Indexing %d files: '%s'..."] = "Indexando %d archivos: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Indexado completado.", -- src\editor\outline.lua
["Insert Library Function..."] = "Insertar función de librería...", -- src\editor\menu_search.lua
["Known Files"] = "Archivos conocidos", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Consola local", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Intérprete Lua", -- src\editor\menu_project.lua
["Mapped remote request for '%s' to '%s'."] = nil, -- src\editor\debugger.lua
["Match &case"] = nil, -- src\editor\findreplace.lua
["Match &whole word"] = nil, -- src\editor\findreplace.lua
["Mixed end-of-line encodings detected."] = nil, -- src\editor\commands.lua
["New &File"] = nil, -- src\editor\filetree.lua
["Map Directory..."] = "Mapeo de directorio...", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Mapeada petición remota de '%s' a '%s'.", -- src\editor\debugger.lua
["Markers Window"] = "Ventana de marcas", -- src\editor\menu_view.lua
["Markers"] = "Marcas", -- src\editor\markers.lua
["Match case"] = "Emparejar mayúsculas/minúsuclas", -- src\editor\toolbar.lua
["Match whole word"] = "Emparejar palabras completas", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Detectadas condificaciones de final de línea distintas", -- src\editor\commands.lua
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
["New &File"] = "Nuevo %Fichero", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = nil, -- src\editor\filetree.lua
["Open an existing document"] = "Abrir un documento existente", -- src\editor\gui.lua, src\editor\menu_file.lua
["Open With Default Program"] = "Abrir con programa por defecto", -- src\editor\filetree.lua
["Open an existing document"] = "Abrir un documento existente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Abrir archivo", -- src\editor\commands.lua
["Options"] = nil, -- src\editor\findreplace.lua
["Output (running)"] = "Salida (en ejecución)", -- src\editor\output.lua
["Output"] = "Salida", -- src\editor\gui.lua, src\editor\output.lua, src\editor\settings.lua
["Outline Window"] = "Ventana de esquema", -- src\editor\menu_view.lua
["Outline"] = "Esquema", -- src\editor\outline.lua
["Output (running)"] = "Salida (en ejecución)", -- src\editor\debugger.lua, src\editor\output.lua
["Output (suspended)"] = "Salida (suspendida)", -- src\editor\debugger.lua
["Output"] = "Salida", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
["Page Setup..."] = "Configuración de página", -- src\editor\print.lua
["Paste text from the clipboard"] = "Pegar texto desde el portapapeles", -- src\editor\menu_edit.lua
["Preferences"] = nil, -- src\editor\menu_edit.lua
["Preferences"] = "Preferencias", -- src\editor\menu_edit.lua
["Prepend '!' to force local execution."] = "Antepón '!' para forzar una ejecución local.", -- src\editor\shellbox.lua
["Prepend '=' to show complex values on multiple lines."] = "Antepón '=' para ver valores complejos en líneas múltiples", -- src\editor\shellbox.lua
["Press cancel to abort."] = "Presiona cancelar para abortar.", -- src\editor\commands.lua
["Print the current document"] = "Imprimir el documento actual", -- src\editor\print.lua
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado en '%s' (pid: %d).", -- src\editor\output.lua
["Program can't start because conflicting process is running as '%s'."] = "El programa no puede iniciarse porque hay un proceso conflictivo en ejecución como '%s'.", -- src\editor\output.lua
["Program completed in %.2f seconds (pid: %d)."] = "Programa completado en %.2f segundos (pid: %d).", -- src\editor\output.lua
["Program starting as '%s'."] = "Programa iniciado como '%s'.", -- src\editor\output.lua
["Program stopped (pid: %d)."] = "Programa parado (pid: %d).", -- src\editor\debugger.lua
["Program unable to run as '%s'."] = "No se puede ejecutar el programa como '%s'.", -- src\editor\output.lua
["Project Directory"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
["Project history"] = nil, -- src\editor\menu_file.lua
["Project"] = "Proyecto", -- src\editor\gui.lua
["Project Directory"] = "Directorio de proyecto", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Project history"] = "Historial de proyecto", -- src\editor\menu_file.lua
["Project"] = "Proyecto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
["Provide command line parameters"] = "Proveer parámetros de línea de comandos", -- src\editor\menu_project.lua
["Queued %d files to index."] = "Encolar %d ficheros al índice", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Remplazar en archivos", -- src\editor\menu_search.lua
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
["Re-indent selected lines"] = "Volver a indentar las líneas seleccionadas", -- src\editor\menu_edit.lua
["Reached end of selection and wrapped around."] = "Alcanzado el final de la selección y vuelta a empezar.", -- src\editor\findreplace.lua
["Reached end of text and wrapped around."] = "Alcanzado el final del texto y vuelta a empezar", -- src\editor\findreplace.lua
["Recent Files"] = "Archivos recientes", -- src\editor\menu_file.lua
["Recent Projects"] = "Projectos recientes", -- src\editor\menu_file.lua
["Redo last edit undone"] = "Rehacer la última edición deshecha", -- src\editor\menu_edit.lua
["Refresh Index"] = "Refrescar índice", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Refrescar símbolos indexados en los ficheros del directorio seleccionado", -- src\editor\outline.lua
["Refresh"] = "Refrescar", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "No se pudo lanzar una nueva sesión de depuración porque ya hay una en curso.", -- src\editor\debugger.lua
["Regular &expression"] = nil, -- src\editor\findreplace.lua
["Regular expression"] = "Expresión regular", -- src\editor\toolbar.lua
["Remote console"] = "Consola remota", -- src\editor\shellbox.lua
["Rename All Instances"] = nil, -- src\editor\editor.lua
["Replace A&ll"] = nil, -- src\editor\findreplace.lua
["Replace"] = nil, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = nil, -- src\editor\commands.lua
["Replaced"] = nil, -- src\editor\findreplace.lua
["Replacing"] = nil, -- src\editor\findreplace.lua
["Rename All Instances"] = "Renombrar rodas las instancias", -- src\editor\editor.lua
["Replace All Selections"] = "Remplazar todas las selecciones", -- src\editor\editor.lua
["Replace all"] = "Remplazar todo", -- src\editor\toolbar.lua
["Replace next instance"] = "Reemplazar siguiente instancia", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"Remplazada una instancia", "Remplazada %d instancias."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Remplazado un caracter UTF8 inválido con %s.", -- src\editor\commands.lua
["Reset to default layout"] = "Restablecer el diseño por defecto", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
["Run As Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
["Run To Cursor"] = "Ejecutar hasta cursor", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\toolbar.lua
["Run to cursor"] = "Ejecutar hasta cursor", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "Parar depuración", -- src\editor\menu_project.lua
["S&top Process"] = "Parar proceso", -- src\editor\menu_project.lua
["Save &As..."] = "Guardar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Guardar todo", -- src\editor\menu_file.lua
["Save Changes?"] = "¿Guardar cambios?", -- src\editor\commands.lua
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Guardar archivo como", -- src\editor\commands.lua
["Save file?"] = "¿Guardar archivo?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Guardar el documento actual en un archivo con un nombre nuevo", -- src\editor\menu_file.lua
["Save the current document"] = "Guardar el documento actual", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save the current document"] = "Guardar el documento actual", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Guardar autorrecuperación en %s.", -- src\editor\commands.lua
["Scope"] = nil, -- src\editor\findreplace.lua
["Scratchpad error"] = "Error en el borrador", -- src\editor\debugger.lua
["Searching for"] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
["Select &All"] = "Seleccionar todo", -- src\editor\menu_edit.lua, src\editor\editor.lua
["Search direction"] = "Dirección de búsqueda", -- src\editor\toolbar.lua
["Search in selection"] = "Buscar en selección", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Buscar en subdirectorios", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Buscando para '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Seleccionar todo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Seleccionar y buscar siguiente", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Seleccionar y buscar anterior", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Seleccionar todo el texto en el editor", -- src\editor\menu_edit.lua
["Select and Find Next"] = nil, -- src\editor\menu_search.lua
["Select and Find Previous"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
["Set From Current File"] = nil, -- src\editor\menu_project.lua
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\gui.lua, src\editor\menu_project.lua
["Select the word under cursor and find its next occurrence"] = "Seleccionar palabra bajo cursor y encontrar la siguiente aparición", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Seleccionar palabra bajo cursor y encontar la anterior aparición", -- src\editor\menu_search.lua
["Set As Start File"] = "Establecer como fchero de inicio", -- src\editor\filetree.lua
["Set From Current File"] = "Establecer fichero actual", -- src\editor\menu_project.lua
["Set To Project Directory"] = "Establecer a directorio de proyecto", -- src\editor\findreplace.lua
["Set To Selected Directory"] = "Establcer a directorio seleccionado", -- src\editor\filetree.lua
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set project directory to the selected one"] = "Configurar el directorio de proyecto al seleccionado", -- src\editor\filetree.lua
["Set search directory"] = "Establecer directorio de búsqueda", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Establecer el intérprete a ser usado", -- src\editor\menu_project.lua
["Set the project directory to be used"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = nil, -- src\editor\menu_edit.lua
["Settings: User"] = nil, -- src\editor\menu_edit.lua
["Set the project directory to be used"] = "Establecer el directorio de proyecto para ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Configuración: Sistema", -- src\editor\menu_edit.lua
["Settings: User"] = "Configuración: Usuario", -- src\editor\menu_edit.lua
["Show &Tooltip"] = "Ver tooltip", -- src\editor\menu_edit.lua
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
["Show All Files"] = "Ver todos los ficheros", -- src\editor\filetree.lua
["Show Hidden Files"] = "Ver ficheros ocultos", -- src\editor\filetree.lua
["Show Location"] = "Ver ubicación", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Ver todos los ficheros", -- src\editor\filetree.lua
["Show context"] = "Ver contexto", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Ver fichero previamente ocultados", -- src\editor\filetree.lua
["Show multiple result windows"] = "Ver múltiples ventanas de resultados", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Ver tooltip para la posición actual; posicionar el cursor después de abrir el paréntisis de los argumentos de la función", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
["Show/Hide the status bar"] = "Ver/Ocultar la barra de estado", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Ver/Ocultar la barra de herramientas", -- src\editor\menu_view.lua
["Sort By Name"] = "Ordenar por nombre", -- src\editor\outline.lua
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_edit.lua
["Stack"] = nil, -- src\editor\debugger.lua, src\editor\gui.lua
["Source"] = "Fuente", -- src\editor\menu_edit.lua
["Stack"] = "Pila", -- src\editor\debugger.lua
["Start &Debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua
["Start or Continue debugging"] = nil, -- src\editor\gui.lua
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
["Start or continue debugging"] = "Inciar o continuar depuración", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Paso dentro", -- src\editor\menu_project.lua
["Step &Over"] = "Paso sin entrar", -- src\editor\menu_project.lua
["Step O&ut"] = "Paso fuera", -- src\editor\menu_project.lua
["Step into"] = "Paso dentro", -- src\editor\gui.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\gui.lua, src\editor\menu_project.lua
["Step over"] = "Paso sin entrar", -- src\editor\gui.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = nil, -- src\editor\gui.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\gui.lua, src\editor\menu_project.lua
["Step into"] = "Paso dentro", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Paso sin entrar", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Parar depuración y continuar ejecutando el proceso", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Conmutar el modo de pantalla completa", -- src\editor\menu_view.lua
["Text not found."] = nil, -- src\editor\findreplace.lua
["Symbol Index"] = "Índice de símbolo", -- src\editor\outline.lua
["Text not found."] = "Texto no encontrado.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "El archivo de API debe ser almacenado en un subdirectorio del directorio de API.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
["Toggle Break&point"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\gui.lua, src\editor\menu_project.lua
["Toggle Bookmark"] = "Conmutar marcador", -- src\editor\markers.lua, src\editor\menu_edit.lua
["Toggle Breakpoint"] = "Conmutar punto de ruptura", -- src\editor\markers.lua, src\editor\menu_project.lua
["Toggle bookmark"] = "Conmutar marcador", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\markers.lua, src\editor\toolbar.lua
["Tr&ace"] = "Traza", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Traza de ejecución mostrando cada línea ejecutada", -- src\editor\menu_project.lua
["Unable to create directory '%s'."] = nil, -- src\editor\filetree.lua
["Unable to create file '%s'."] = nil, -- src\editor\filetree.lua
["Unable to create directory '%s'."] = "No se pudo crear el directorio '%s'.", -- src\editor\filetree.lua
["Unable to create file '%s'."] = "No se pudo crear el fichero '%s'.", -- src\editor\filetree.lua
["Unable to delete directory '%s': %s"] = "No se pudo borrar el directorio '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = "No se pudo borrar el ficheor '%s': %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "No se pudo cargar el archivo '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
["Unable to rename file '%s'."] = "No se pudo renombrar el fichero '%s'", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "No se pudo guardar el archivo '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "No se puedo parar el programa (pid: %d), código %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Deshacer la última edición", -- src\editor\menu_edit.lua
["Use '%s' to see full description."] = nil, -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = nil, -- src\editor\commands.lua
["Unmap Directory"] = "Desmapear directorio", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "Quitar '%s' como fichero de inicio", -- src\editor\filetree.lua
["Updated %d file."] = {"Un fichero actualizado", "%d ficheros actualizados"}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Actualizando índice de símbolos y configurando...", -- src\editor\outline.lua
["Use %s to close."] = "Usa %s para cerrar.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Usa '%s' para ver la descripción completa.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Usa '%s' para ver los finales de línea y '%s' para convertirlos", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Usa 'clear' para limpiar la consola de salida y el historial.", -- src\editor\shellbox.lua
["Use Shift-Enter for multiline code."] = "Usa <Shift-Enter> para código multilínea.", -- src\editor\shellbox.lua
["Value"] = "Valor", -- src\editor\debugger.lua
["View the markers window"] = "Ver la ventana de marcas", -- src\editor\menu_view.lua
["View the outline window"] = "Ver la ventana de esquema", -- src\editor\menu_view.lua
["View the output/console window"] = "Ver ventana de salida/consola", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Ver la ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\gui.lua, src\editor\menu_view.lua
["View the watch window"] = "Ver la ventana de observación", -- src\editor\gui.lua, src\editor\menu_view.lua
["Watch"] = nil, -- src\editor\debugger.lua, src\editor\gui.lua
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Ver la ventana de observación", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Inspeccionar", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bienvenido al intérprete interactico de Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = nil, -- src\editor\findreplace.lua
["Wrap around"] = "Vuelta a empezar", -- src\editor\toolbar.lua
["You must save the program first."] = "Debes guardar el programa primero", -- src\editor\commands.lua
["Zoom In"] = nil, -- src\editor\menu_view.lua
["Zoom Out"] = nil, -- src\editor\menu_view.lua
["Zoom to 100%"] = nil, -- src\editor\menu_view.lua
["Zoom"] = nil, -- src\editor\menu_view.lua
["Zoom In"] = "Acercar zoom", -- src\editor\menu_view.lua
["Zoom Out"] = "Alejar zoom", -- src\editor\menu_view.lua
["Zoom to 100%"] = "Zoom al 100%", -- src\editor\menu_view.lua
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
["on line %d"] = "en la línea %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
["traced %d instruction"] = {"%d instrucción trazada", "%d instrucciones trazadas"}, -- src\editor\debugger.lua
["unknown error"] = nil, -- src\editor\debugger.lua
["unknown error"] = "Error desconocido", -- src\editor\debugger.lua
}

View File

@@ -1,181 +1,205 @@
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%d instance"] = {"%d occurrence", "%d occurrences"}, -- src\editor\findreplace.lua
["%s event failed: %s"] = "L'événement %s a échoué : %s", -- src\editor\package.lua
["&About"] = "À &propos", -- src\editor\menu_help.lua
["%s%% formatted..."] = "%s%% formattés...", -- src\editor\print.lua
["%s%% loaded..."] = "%s%% chargé", -- src\editor\commands.lua
["&About"] = "&À propos", -- src\editor\menu_help.lua
["&Add Watch"] = "&Ajouter une expression", -- src\editor\debugger.lua
["&Break"] = "&Interrompre", -- src\editor\menu_project.lua
["&Close Page"] = "&Fermer la page", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Communauté", -- src\editor\menu_help.lua
["&Compile"] = "&Compiler", -- src\editor\menu_project.lua
["&Copy"] = "Co&pier", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Copy Value"] = "Copier la &valeur", -- src\editor\debugger.lua
["&Copy"] = "Co&pier", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Affichage par &défaut", -- src\editor\menu_view.lua
["&Delete Watch"] = "&Supprimer une expression", -- src\editor\debugger.lua
["&Delete"] = "&Supprimer", -- src\editor\filetree.lua
["&Documentation"] = "&Documentation", -- src\editor\menu_help.lua
["&Down"] = "Vers le &bas", -- src\editor\findreplace.lua
["&Edit Project Directory"] = "&Modifier le répertoire de projet", -- src\editor\filetree.lua
["&Edit Value"] = "&Modifier une valeur", -- src\editor\debugger.lua
["&Edit Watch"] = "&Modifier une expression", -- src\editor\debugger.lua
["&Edit"] = "É&dition", -- src\editor\menu_edit.lua
["&File"] = "&Fichier", -- src\editor\menu_file.lua
["&Find All"] = "&Rechercher tout", -- src\editor\findreplace.lua
["&Find Next"] = "&Rechercher", -- src\editor\findreplace.lua
["&Find"] = "&Rechercher", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Re&plier/Déplier tout", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "&Questions Fréquemment Posées" , -- src\editor\menu_help.lua
["&Getting Started Guide"] = "&Guide de Prise en Main", -- src\editor\menu_help.lua
["&Go To Line..."] = "&Aller à la ligne...", -- src\editor\menu_search.lua
["&Frequently Asked Questions"] = "&Foire aux questions" , -- src\editor\menu_help.lua
["&Getting Started Guide"] = "&Guide de prise en main", -- src\editor\menu_help.lua
["&Help"] = "Aid&e", -- src\editor\menu_help.lua
["&New Directory"] = "&Nouveau Répertoire", -- src\editor\filetree.lua
["&New Directory"] = "&Nouveau répertoire", -- src\editor\filetree.lua
["&New"] = "&Nouveau", -- src\editor\menu_file.lua
["&Open..."] = "&Ouvrir...", -- src\editor\menu_file.lua
["&Output/Console Window"] = "&Sortie/Console", -- src\editor\menu_view.lua
["&Paste"] = "Co&ller", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Project Page"] = "&Site Web de ZeroBrane", -- src\editor\menu_help.lua
["&Project"] = "&Projet", -- src\editor\inspect.lua, src\editor\menu_project.lua
["&Redo"] = "&Rétablir", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Paste"] = "Co&ller", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Print..."] = "&Imprimer", -- src\editor\print.lua
["&Project Page"] = "&Site web de ZeroBrane", -- src\editor\menu_help.lua
["&Project"] = "&Projet", -- src\editor\menu_project.lua
["&Redo"] = "&Rétablir", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Renommer", -- src\editor\filetree.lua
["&Replace All"] = "Remplacer &tout", -- src\editor\findreplace.lua
["&Replace"] = "Re&mplacer", -- src\editor\findreplace.lua, src\editor\menu_search.lua
["&Replace"] = "Re&mplacer", -- src\editor\menu_search.lua
["&Run"] = "&Exécuter", -- src\editor\menu_project.lua
["&Save"] = "&Enregistrer", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "&Recherche", -- src\editor\menu_search.lua
["&Select Command"] = "Selectionner la &Commande", -- src\editor\gui.lua
["&Sort"] = "&Trier", -- src\editor\menu_edit.lua
["&Stack Window"] = "&Pile d'exécution", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Lancer le &serveur de débogage", -- src\editor\menu_project.lua
["&Status Bar"] = "&Barre d'état", -- src\editor\menu_view.lua
["&Subdirectories"] = "&Sous-répertoires", -- src\editor\findreplace.lua
["&Tool Bar"] = "&Barre d'outils", -- src\editor\menu_view.lua
["&Status Bar"] = "Barre d'&état", -- src\editor\menu_view.lua
["&Tool Bar"] = "Barre d'&outils", -- src\editor\menu_view.lua
["&Tutorials"] = "&Tutoriels", -- src\editor\menu_help.lua
["&Undo"] = "&Annuler", -- src\editor\menu_edit.lua, src\editor\editor.lua
["&Up"] = "Vers le &haut", -- src\editor\findreplace.lua
["&Undo"] = "&Annuler", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&View"] = "&Affichage", -- src\editor\menu_view.lua
["&Watch Window"] = "&Expressions espionnes", -- src\editor\menu_view.lua
[".&bak on Replace"] = ".&bak avant remplacement", -- src\editor\findreplace.lua
["&Watch Window"] = "E&xpressions espionnes", -- src\editor\menu_view.lua
["About %s"] = "À propos de %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Ajouter au brouillon", -- src\editor\editor.lua
["Add Watch Expression"] = "Ajouter une expression", -- src\editor\editor.lua
["Add Watch Expression"] = "Ajouter une expression espionne", -- src\editor\editor.lua
["All files"] = "Tous les fichiers", -- src\editor\commands.lua
["Allow external process to start debugging"] = "Autoriser les processus externes à lancer le débogage", -- src\editor\menu_project.lua
["Analyze the source code"] = "Analyser le code source", -- src\editor\inspect.lua
["Allow external process to start debugging"] = "Autorise les processus externes à lancer le débogage", -- src\editor\menu_project.lua
["Analyze the source code"] = "Analyse le code source", -- src\editor\inspect.lua
["Analyze"] = "Analyser", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Auto-compléter les identifiants", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Auto-compléter lors de la saisie", -- src\editor\menu_edit.lua
["Bookmark"] = "&Marque-pages", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interrompre l'exécution à la ligne suivante", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&lear Output Window"] = "E&ffacer la fenêtre de sortie", -- src\editor\menu_project.lua
["Auto complete while typing"] = "Auto-complète lors de la saisie", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = "Le fichier binaire est affiché en lecture seule parce qu'il a été chargé partiellement.", -- src\editor\commands.lua
["Bookmark"] = "Marque-pages", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interrompt l'exécution à la ligne suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Breakpoint"] = "Point d'arrêt", -- src\editor\menu_project.lua
["C&lear Console Window"] = "E&ffacer la fenêtre console", -- src\editor\gui.lua
["C&lear Output Window"] = "E&ffacer la fenêtre de sortie", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&omment/Uncomment"] = "Co&mmenter/Décommenter", -- src\editor\menu_edit.lua
["Can't debug the script in the active editor window."] = "Impossible de déboguer le script dans la fenêtre d'édition active.", -- src\editor\debugger.lua
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Impossible de trouver le fichier '%s' dans le projet courant pour permettre le débogage. Mettez le projet à jour ou ouvrez le fichier dans l'éditeur avant débogage.", -- src\editor\debugger.lua
["Can't evaluate the expression while the application is running."] = "Impossible d'évaluer l'expression pendant que l'application est en cours d'exécution.", -- src\editor\debugger.lua
["Can't open file '%s': %s"] = "Impossible d'ouvrir le fichier '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Impossible de lire la récupération automatique ; format invalide : %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = "Impossible de remplacer dans un texte en lecture seule.", -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Impossible d'exécuter le point d'entrée du script ('%s').", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Impossible de lancer le serveur de débogage à %s:%d: %s." , -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = "Impossible de lancer le débogage pour '%s'.", -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Impossible de lancer la session de débogage : erreur interne '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossible de lancer le débogage si aucun fichier n'est ouvert ou si le fichier courant n'a pas été enregistré ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Impossible d'arrêter le serveur de débogage car il n'a pas été démarré", -- src\editor\debugger.lua
["Cancel"] = "Annuler", -- src\editor\findreplace.lua
["Can't stop debugger server as it is not started."] = "Impossible d'arrêter le serveur de débogage car il n'a pas été démarré.", -- src\editor\debugger.lua
["Cancelled by the user."] = "Annulé par l'utilisateur.", -- src\editor\findreplace.lua
["Choose a project directory"] = "Choisissez un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\gui.lua, src\editor\filetree.lua
["Choose..."] = "Choisir...", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Effacer les éléments", -- src\editor\menu_file.lua
["Clear items from this list"] = "Effacer les éléments de cette liste", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Effacer la fenêtre de sortie avant compilation ou débogage", -- src\editor\menu_project.lua
["Choose a directory to map"] = "Choisir un répertoire à mapper", -- src\editor\filetree.lua
["Choose a project directory"] = "Choisir un répertoire de projet", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = "Choisir un répertoire dans lequel rechercher", -- src\editor\findreplace.lua
["Choose..."] = "Choisir...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Effacer les éléments", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Efface les éléments de cette liste", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Efface la fenêtre de sortie avant compilation ou débogage", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fermer les &autres pages", -- src\editor\gui.lua
["Close A&ll Pages"] = "Fermer &toutes les pages", -- src\editor\gui.lua
["Close the current editor window"] = "Fermer la fenêtre d'édition active", -- src\editor\menu_file.lua
["Close the current editor window"] = "Ferme la fenêtre d'édition courante", -- src\editor\menu_file.lua
["Co&ntinue"] = "Co&ntinuer", -- src\editor\menu_project.lua
["Col: %d"] = "Col : %d", -- src\editor\editor.lua
["Command Line Parameters..."] = "Paramètres de Ligne de Commande...", -- src\editor\menu_project.lua
["Command Line Parameters..."] = "Paramètres de ligne de commande...", -- src\editor\menu_project.lua
["Command line parameters"] = "Paramètres de ligne de commande", -- src\editor\menu_project.lua
["Comment or uncomment current or selected lines"] = "Commenter ou décommenter les lignes courantes ou sélectionnées", -- src\editor\menu_edit.lua
["Comment or uncomment current or selected lines"] = "Commente ou décommente les lignes courantes ou sélectionnées", -- src\editor\menu_edit.lua
["Compilation error"] = "Erreur de compilation", -- src\editor\commands.lua, src\editor\debugger.lua
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilation réussie ; taux de succès : %.0f%% (%d/%d).", -- src\editor\commands.lua
["Compile the current file"] = "Сompiler le fichier courant", -- src\editor\menu_project.lua
["Compile the current file"] = "Сompile le fichier courant", -- src\editor\menu_project.lua
["Complete &Identifier"] = "Compléter l'&identifiant", -- src\editor\menu_edit.lua
["Complete the current identifier"] = "Compléter l'identifiant courant", -- src\editor\menu_edit.lua
["Complete the current identifier"] = "Complète l'identifiant courant", -- src\editor\menu_edit.lua
["Consider removing backslash from escape sequence '%s'."] = "Essayez de supprimer les antislashs dans '%s'.", -- src\editor\commands.lua
["Copy Full Path"] = "Copier le chemin absolu", -- src\editor\filetree.lua
["Copy selected text to clipboard"] = "Copier le texte sélectionné dans le presse-papiers", -- src\editor\menu_edit.lua
["Copy Full Path"] = "Copier le chemin absolu", -- src\editor\gui.lua, src\editor\filetree.lua
["Copy selected text to clipboard"] = "Copie le texte sélectionné dans le presse-papiers", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Corriger l'&indentation", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossible d'activer le fichier '%s' pour débogage ; poursuite du processus en ignorant le fichier.", -- src\editor\debugger.lua
["Create an empty document"] = "Créer un document vierge", -- src\editor\gui.lua, src\editor\menu_file.lua
["Cu&t"] = "&Couper", -- src\editor\menu_edit.lua, src\editor\editor.lua
["Cut selected text to clipboard"] = "Couper le texte sélectionné et copier dans le presse-papiers", -- src\editor\menu_edit.lua
["Create an empty document"] = "Crée un document vierge", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "&Couper", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Coupe le texte sélectionné et le copie dans le presse-papiers", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Serveur de débogage démarré à %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Serveur de débogage stoppé à %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Session de débogage terminée (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Session de débogage démarrée dans '%s'.", -- src\editor\debugger.lua
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Débogage interrompu à %s:%s (impossible d'activer le fichier).", -- src\editor\debugger.lua
["Detach &Process"] = "Détacher le &processus", -- src\editor\menu_project.lua
["Directory"] = "Répertoire ", -- src\editor\findreplace.lua
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Voulez-vous l'écraser?", -- src\editor\commands.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Débogage interrompu à '%s:%s' (impossible d'activer le fichier).", -- src\editor\debugger.lua
["Detach &Process"] = "Détacher le p&rocessus", -- src\editor\menu_project.lua
["Disable Indexing For '%s'"] = "Désactiver l'indexation pour '%s'", -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s' ?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Voulez-vous l'écraser ?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Voulez-vous le recharger ?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Voulez-vous enregistrer les modifications dans '%s' ?", -- src\editor\commands.lua
["E&xit"] = "&Quitter", -- src\editor\menu_file.lua
["Enable Indexing"] = "Activer l'indexation", -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Saisissez du code Lua et appuyez sur <Entrée> pour l´exécuter.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Entrez des paramètres de ligne de commande (pressez Annuler pour effacer)", -- src\editor\menu_project.lua
["Enter line number"] = "Entrez le numéro de ligne", -- src\editor\menu_search.lua
["Enter command line parameters (use Cancel to clear)"] = "Saisissez les paramètres de ligne de commande (cliquez sur Annuler pour effacer)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Saisissez le texte de remplacement", -- src\editor\editor.lua
["Error while loading API file: %s"] = "Erreur lors du chargement du fichier d'API : %s", -- src\editor\autocomplete.lua
["Error while loading configuration file: %s"] = "Erreur lors du chargement du fichier de configuration : %s", -- src\editor\style.lua
["Error while processing API file: %s"] = "Erreur lors de la lecture du fichier d'API : %s", -- src\editor\autocomplete.lua
["Error while processing configuration file: %s"] = "Erreur lors de la lecture du fichier de configuration : %s", -- src\editor\style.lua
["Error"] = "Erreur", -- src\editor\commands.lua
["Evaluate In Console"] = "Évaluer dans la console", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Exécuter le projet/fichier courant en mettant le code à jour afin de voir les résultats en temps réel", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Exécuter le projet/fichier courant", -- src\editor\menu_project.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Exécute le projet/fichier courant en prenant en compte à la volée les modifications de code", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Exécute le projet/fichier courant", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Erreur d'exécution", -- src\editor\debugger.lua
["Exit program"] = "Quitter le programme", -- src\editor\menu_file.lua
["Expr"] = "Expr.", -- src\editor\debugger.lua
["Expression"] = "Expression", -- src\editor\debugger.lua
["Exit program"] = "Quitte le programme", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Le fichier '%s' a été modifié sur le disque.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Le fichier '%s' a un horodatage plus récent que celui restauré '%s' ; veuillez vérifier avant d'enregistrer.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Le fichier '%s' est manquant et ne peut pas être récupéré.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Le fichier '%s' n'existe plus.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File Type"] = "Type de fichier ", -- src\editor\findreplace.lua
["File already exists."] = "Le fichier existe déjà.", -- src\editor\commands.lua
["File history"] = "Historique de fichier", -- src\editor\menu_file.lua
["Find &In Files"] = "Rec&hercher dans les fichiers", -- src\editor\menu_search.lua
["Find &Next"] = "Rechercher l'occurrence &suivante", -- src\editor\menu_search.lua
["Find &Previous"] = "Rechercher l'occurrence &précédente", -- src\editor\menu_search.lua
["Find In Files"] = "Rechercher dans les fichiers", -- src\editor\findreplace.lua
["Find and replace text in files"] = "Rechercher et remplacer le texte dans les fichiers", -- src\editor\menu_search.lua
["Find and replace text"] = "Rechercher et remplacer le texte", -- src\editor\gui.lua, src\editor\menu_search.lua
["Find text in files"] = "Rechercher le texte dans les fichiers", -- src\editor\menu_search.lua
["Find text"] = "Rechercher le texte", -- src\editor\gui.lua, src\editor\menu_search.lua
["Find &Next"] = "Rechercher le &suivant", -- src\editor\menu_search.lua
["Find &Previous"] = "Rechercher le &précédent", -- src\editor\menu_search.lua
["Find and insert library function"] = "Recherche et insère une fonction d'une bibliothèque", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Recherche et remplace le texte dans les fichiers", -- src\editor\menu_search.lua
["Find and replace text"] = "Recherche et remplace le texte", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Rechercher dans les fichiers", -- src\editor\toolbar.lua
["Find text in files"] = "Recherche le texte dans les fichiers", -- src\editor\menu_search.lua
["Find text"] = "Recherche le texte", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Recherche l'occurrence précédente du texte", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Recherche l'occurrence suivante du texte", -- src\editor\menu_search.lua
["Find"] = "Rechercher ", -- src\editor\findreplace.lua
["Fold or unfold all code folds"] = "Replier ou déplier tous les blocs de code", -- src\editor\menu_edit.lua
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvé et la session a été restaurée.", -- src\editor\commands.lua
["Found"] = "Occurrences trouvées :", -- src\editor\findreplace.lua
["Full &Screen"] = "&Plein écran", -- src\editor\menu_view.lua
["Find"] = "Rechercher ", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Replie ou déplie tous les blocs de code", -- src\editor\menu_edit.lua
["Formatting page %d..."] = "Formattage de la page %d en cours...", -- src\editor\print.lua
["Found %d instance."] = {"%d occurence trouvée.", "%d occurences trouvées."}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvée et la session a été restaurée.", -- src\editor\commands.lua
["Full &Screen"] = "Plein é&cran", -- src\editor\menu_view.lua
["Go To Definition"] = "Aller à la définition", -- src\editor\editor.lua
["Go To Line"] = "Aller à la ligne", -- src\editor\menu_search.lua
["Go To File..."] = "Aller au fichier...", -- src\editor\menu_search.lua
["Go To Line..."] = "Aller à la ligne...", -- src\editor\menu_search.lua
["Go To Next Bookmark"] = "Aller au marque-page suivant", -- src\editor\menu_edit.lua
["Go To Next Breakpoint"] = "Aller au prochain point d'arrêt", -- src\editor\menu_project.lua
["Go To Previous Bookmark"] = "Aller au marque-page précédent", -- src\editor\menu_edit.lua
["Go to a selected line"] = "Aller à la ligne sélectionnée", -- src\editor\menu_search.lua
["Go To Previous Breakpoint"] = "Aller au point d'arrêt précédent", -- src\editor\menu_project.lua
["Go To Symbol..."] = "Aller au symbole...", -- src\editor\menu_search.lua
["Go to file"] = "Permet d'accéder directement à un fichier", -- src\editor\menu_search.lua
["Go to line"] = "Permet d'accéder directement à une ligne", -- src\editor\menu_search.lua
["Go to symbol"] = "Permet d'accéder directement à un symbole", -- src\editor\menu_search.lua
["Hide '.%s' Files"] = "Masquer les fichiers '.%s'", -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["In Files"] = "Dans les fichiers", -- src\editor\findreplace.lua
["Jump to a function definition..."] = "Aller à la définition de fonction...", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = "Ignorer et ne pas indexer les symboles dans les fichiers provenant du répertoire sélectionné", -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Une erreur dans le code d'initialisation du debogage a été ignorée: %s.", -- src\editor\debugger.lua
["Indexing %d files: '%s'..."] = "%d fichiers indexés: '%s'...", -- src\editor\outline.lua
["Indexing completed."] = "Indexation terminée.", -- src\editor\outline.lua
["Insert Library Function..."] = "Insérer une fonction d'une bibliothèque...", -- src\editor\menu_search.lua
["Known Files"] = "Fichiers connus", -- src\editor\commands.lua
["Ln: %d"] = "Lig : %d", -- src\editor\editor.lua
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "Interpréteur L&ua", -- src\editor\menu_project.lua
["Map Directory..."] = "Mapper un répertoire...", -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "La requête distante pour '%s' a été associée à '%s'.", -- src\editor\debugger.lua
["Match &case"] = "Respecter la &casse", -- src\editor\findreplace.lua
["Match &whole word"] = "&Mot entier uniquement", -- src\editor\findreplace.lua
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne détectés.", -- src\editor\commands.lua
["New &File"] = "Nouveau &Fichier", -- src\editor\filetree.lua
["Markers Window"] = "Fenêtre des marqueurs", -- src\editor\menu_view.lua
["Markers"] = "Marqueurs", -- src\editor\markers.lua
["Match case"] = "Respecter la casse", -- src\editor\toolbar.lua
["Match whole word"] = "Mot entier uniquement", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne ont été détectés.", -- src\editor\commands.lua
["Navigate"] = "Naviguer", -- src\editor\menu_search.lua
["New &File"] = "Nouveau &fichier", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Ouvrir avec le programme par défaut", -- src\editor\filetree.lua
["Open an existing document"] = "Ouvrir un document existant", -- src\editor\gui.lua, src\editor\menu_file.lua
["Open an existing document"] = "Ouvre un document existant", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Ouvrir un fichier", -- src\editor\commands.lua
["Options"] = "Options", -- src\editor\findreplace.lua
["Output (running)"] = "Sortie (en cours d'exécution)", -- src\editor\output.lua
["Output"] = "Sortie", -- src\editor\gui.lua, src\editor\output.lua, src\editor\settings.lua
["Paste text from the clipboard"] = "Coller le texte depuis le presse-papiers", -- src\editor\menu_edit.lua
["Outline Window"] = "Structure", -- src\editor\menu_view.lua
["Outline"] = "Structure", -- src\editor\outline.lua
["Output (running)"] = "Sortie (en cours d'exécution)", -- src\editor\debugger.lua, src\editor\output.lua
["Output (suspended)"] = "Sortie (interrompu)", -- src\editor\debugger.lua
["Output"] = "Sortie", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
["Page Setup..."] = "Configuration de la page...", -- src\editor\print.lua
["Paste text from the clipboard"] = "Colle le texte depuis le presse-papiers", -- src\editor\menu_edit.lua
["Preferences"] = "Préférences", -- src\editor\menu_edit.lua
["Prepend '!' to force local execution."] = "Préfixez par '!' pour forcer une execution locale.", -- src\editor\shellbox.lua
["Prepend '=' to show complex values on multiple lines."] = "Préfixez par '=' pour afficher les valeurs complexes sur plusieurs lignes.", -- src\editor\shellbox.lua
["Press cancel to abort."] = "Cliquez sur Annuler pour annuler.", -- src\editor\commands.lua
["Print the current document"] = "Imprimer le document courant", -- src\editor\print.lua
["Program '%s' started in '%s' (pid: %d)."] = "Programme '%s' démarré dans '%s' (pid : %d).", -- src\editor\output.lua
["Program can't start because conflicting process is running as '%s'."] = "Le programme ne peut démarrer à cause d'un conflit de processus avec '%s' (en cours d'exécution).", -- src\editor\output.lua
["Program completed in %.2f seconds (pid: %d)."] = "Programme terminé en %.2f secondes (pid : %d).", -- src\editor\output.lua
@@ -184,98 +208,132 @@ return {
["Program unable to run as '%s'."] = "Impossible d'exécuter le programme en tant que '%s'.", -- src\editor\output.lua
["Project Directory"] = "Répertoire de projet", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Project history"] = "Historique de projet", -- src\editor\menu_file.lua
["Project"] = "Projet", -- src\editor\gui.lua
["Project"] = "Projet", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "&Explorateur de projet", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Renseignez les paramètres de ligne de commande", -- src\editor\menu_project.lua
["Provide command line parameters"] = "Définit les paramètres de ligne de commande", -- src\editor\menu_project.lua
["Queued %d files to index."] = "%d fichiers mis en attente pour l'indexation.", -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Remp&lacer dans les fichiers", -- src\editor\menu_search.lua
["Recent &Projects"] = "&Projets récents", -- src\editor\menu_file.lua
["Re-indent selected lines"] = "Ré-indente les lignes sélectionnées", -- src\editor\menu_edit.lua
["Reached end of selection and wrapped around."] = "Fin de sélection atteinte et repositionnement en début de sélection.", -- src\editor\findreplace.lua
["Reached end of text and wrapped around."] = "Fin de texte atteinte et repositionnement en début de texte.", -- src\editor\findreplace.lua
["Recent Files"] = "Fichiers récents", -- src\editor\menu_file.lua
["Redo last edit undone"] = "Rétablir la dernière modification", -- src\editor\menu_edit.lua
["Recent Projects"] = "Projets récents", -- src\editor\menu_file.lua
["Redo last edit undone"] = "Rétablit la dernière modification", -- src\editor\menu_edit.lua
["Refresh Index"] = "Actualiser l'index", -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = "Actualiser les symboles indexés à partir des fichiers du répertoire sélectionné", -- src\editor\outline.lua
["Refresh"] = "Rafraîchir", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Une requête de lancement de débogage a été refusée car une session de débogage est déjà en cours.", -- src\editor\debugger.lua
["Regular &expression"] = "&Expression régulière", -- src\editor\findreplace.lua
["Regular expression"] = "Expression régulière", -- src\editor\toolbar.lua
["Remote console"] = "Console à distance", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renommer toutes les occurrences", -- src\editor\editor.lua
["Replace A&ll"] = "Remplacer &tout", -- src\editor\findreplace.lua
["Replace"] = "Remplacer par ", -- src\editor\findreplace.lua
["Replace All Selections"] = "Remplacer toutes les sélections", -- src\editor\editor.lua
["Replace all"] = "Remplacer tout", -- src\editor\toolbar.lua
["Replace next instance"] = "Remplacer l'occurence suivante", -- src\editor\toolbar.lua
["Replaced %d instance."] = {"%d occurence remplacée.","%d occurences remplacées."}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Un caractère UTF8 invalide a été remplacé par %s.", -- src\editor\commands.lua
["Replaced"] = "Occurrences remplacées :", -- src\editor\findreplace.lua
["Replacing"] = "Remplacement de", -- src\editor\findreplace.lua
["Reset to default layout"] = "Restaurer l'affichage par défaut", -- src\editor\menu_view.lua
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
["Reset to default layout"] = "Restaure l'affichage par défaut", -- src\editor\menu_view.lua
["Run As Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
["Run To Cursor"] = "Exécuter jusqu'au curseur", -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\toolbar.lua
["Run to cursor"] = "Exécuter jusqu'au curseur", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "&Arrêter le débogage", -- src\editor\menu_project.lua
["S&top Process"] = "&Arrêter le processus", -- src\editor\menu_project.lua
["Save &As..."] = "Enregistrer &sous...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Enregistrer &tout", -- src\editor\menu_file.lua
["Save Changes?"] = "Enregistrer les modifications ?", -- src\editor\commands.lua
["Save all open documents"] = "Enregistrer tous les documents ouverts", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save all open documents"] = "Enregistre tous les documents ouverts", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Enregistrer le fichier sous", -- src\editor\commands.lua
["Save file?"] = "Enregistrer le fichier ?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Enregistrer le document courant sous un nouveau nom", -- src\editor\menu_file.lua
["Save the current document"] = "Enregistrer le document courant", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save the current document to a file with a new name"] = "Enregistre le document courant sous un nouveau nom", -- src\editor\menu_file.lua
["Save the current document"] = "Enregistre le document courant", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Récup. auto enregistrée à %s.", -- src\editor\commands.lua
["Scope"] = "Direction", -- src\editor\findreplace.lua
["Scratchpad error"] = "Erreur dans le brouillon", -- src\editor\debugger.lua
["Searching for"] = "Recherche de", -- src\editor\findreplace.lua
["Search direction"] = "Direction de recherche", -- src\editor\toolbar.lua
["Search in selection"] = "Rechercher dans la sélection", -- src\editor\toolbar.lua
["Search in subdirectories"] = "Rechercher dans les sous-répertoires", -- src\editor\toolbar.lua
["Searching for '%s'."] = "Recherche de '%s'.", -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Sélectionner &tout", -- src\editor\menu_edit.lua, src\editor\editor.lua
["Select all text in the editor"] = "Sélectionner tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
["Select and Find Next"] = "Sélectionner et chercher le suivant", -- src\editor\menu_search.lua
["Select and Find Previous"] = "Sélectionner et chercher le précédent", -- src\editor\menu_search.lua
["Select the word under cursor and find its next occurrence"] = "Sélectionner le mot sous le curseur et chercher son occurence suivante", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Sélectionner le mot sous le curseur et chercher son occurence précédente", -- src\editor\menu_search.lua
["Set From Current File"] = "Définir depuis le fichier courant", -- src\editor\menu_project.lua
["Set project directory from current file"] = "Définir le répertoire de projet depuis le fichier courant", -- src\editor\gui.lua, src\editor\menu_project.lua
["Set the interpreter to be used"] = "Définir l'interpréteur à utiliser", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Définir le répertoire de projet à utiliser", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Select &All"] = "Sélectionner &tout", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Sélectionner et rechercher le suivant", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Sélectionner et rerchercher le précédent", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Sélectionne tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
["Select the word under cursor and find its next occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence suivante", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence précédente", -- src\editor\menu_search.lua
["Set As Start File"] = "Définir le fichier en tant que point d'entrée", -- src\editor\filetree.lua
["Set From Current File"] = "Définir à partir du fichier courant", -- src\editor\menu_project.lua
["Set To Project Directory"] = "Utiliser le répertoire de projet", -- src\editor\findreplace.lua
["Set To Selected Directory"] = "Utiliser le répertoire sélectionné", -- src\editor\filetree.lua
["Set project directory from current file"] = "Définit le répertoire de projet à partir du chemin du fichier courant", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set project directory to the selected one"] = "Faire du répertoire sélectionné le répertoire de projet", -- src\editor\filetree.lua
["Set search directory"] = "Définir le répertoire de recherche", -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Définit l'interpréteur à utiliser", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Définit le répertoire de projet à utiliser", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Paramètres : Système", -- src\editor\menu_edit.lua
["Settings: User"] = "Paramètres : Utilisateur", -- src\editor\menu_edit.lua
["Show &Tooltip"] = "Afficher l'info-&bulle", -- src\editor\menu_edit.lua
["Show All Files"] = "Afficher tous les fichiers", -- src\editor\filetree.lua
["Show Hidden Files"] = "Afficher les fichiers masqués", -- src\editor\filetree.lua
["Show Location"] = "Afficher l'emplacement", -- src\editor\gui.lua, src\editor\filetree.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Afficher l'info-bulle pour la position actuelle ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Afficher/Masquer la barre de statut", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Afficher/Masquer la barre d'outils", -- src\editor\menu_view.lua
["Sort selected lines"] = "Trier les lignes sélectionnées", -- src\editor\menu_edit.lua
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua, src\editor\gui.lua
["Show all files"] = "Affiche tous les fichiers", -- src\editor\filetree.lua
["Show context"] = "Affiche le contexte", -- src\editor\toolbar.lua
["Show files previously hidden"] = "Affiche les fichiers précédemment masqués", -- src\editor\filetree.lua
["Show multiple result windows"] = "Affiche les multiples fenêtres de résultat", -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Affiche l'info-bulle pour la position courante ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Affiche/Masque la barre d'état", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Affiche/Masque la barre d'outils", -- src\editor\menu_view.lua
["Sort By Name"] = "Trie par nom", -- src\editor\outline.lua
["Sort selected lines"] = "Trie les lignes sélectionnées", -- src\editor\menu_edit.lua
["Source"] = "Code", -- src\editor\menu_edit.lua
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua
["Start &Debugging"] = "Lancer le &débogage", -- src\editor\menu_project.lua
["Start or Continue debugging"] = "Démarrer ou Continuer le debogage", -- src\editor\gui.lua
["Start or continue debugging"] = "Démarrer ou continuer le debogage", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Démarre ou continue le debogage", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Pas à pas détai&llé", -- src\editor\menu_project.lua
["Step &Over"] = "Pas à pas so&mmaire", -- src\editor\menu_project.lua
["Step O&ut"] = "Pas à pas so&rtant", -- src\editor\menu_project.lua
["Step into"] = "Rentrer dans l'instruction suivante", -- src\editor\gui.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Sortir de la fonction courante", -- src\editor\gui.lua, src\editor\menu_project.lua
["Step over"] = "Enjamber l'instruction suivante", -- src\editor\gui.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Arrêter le débogage et continuer l'exécution du processus", -- src\editor\gui.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Arrêter le processus en cours d'exécution", -- src\editor\gui.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Activer ou désactiver le mode plein écran", -- src\editor\menu_view.lua
["Step into"] = "Rentre dans l'instruction suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Sort de la fonction courante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Enjambe l'instruction suivante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Arrête le débogage et continue l'exécution du processus", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Arrête le processus en cours d'exécution", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Active ou désactive le mode plein écran", -- src\editor\menu_view.lua
["Symbol Index"] = "Index des symboles", -- src\editor\outline.lua
["Text not found."] = "Texte non trouvé.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "Le fichier d'API doit être placé dans un sous-répertoire du répertoire d'API.", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\menu_edit.lua
["Toggle Break&point"] = "Créer/Supprimer un &point d'arrêt", -- src\editor\menu_project.lua
["Toggle breakpoint"] = "Créer ou supprimer un point d'arrêt", -- src\editor\gui.lua, src\editor\menu_project.lua
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\markers.lua, src\editor\menu_edit.lua
["Toggle Breakpoint"] = "Créer/Supprimer un point d'arrêt", -- src\editor\markers.lua, src\editor\menu_project.lua
["Toggle bookmark"] = "Crée ou supprime un marque-page", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
["Toggle breakpoint"] = "Crée ou supprime un point d'arrêt", -- src\editor\markers.lua, src\editor\toolbar.lua
["Tr&ace"] = "&Tracer", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Tracer l'exécution en montrant chaque ligne de code exécutée", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Trace l'exécution en affichant chaque ligne de code exécutée", -- src\editor\menu_project.lua
["Unable to create directory '%s'."] = "Impossible de créer le répertoire '%s'.", -- src\editor\filetree.lua
["Unable to create file '%s'."] = "Impossible de créer le fichier '%s'.", -- src\editor\filetree.lua
["Unable to delete directory '%s': %s"] = "Impossible de supprimer le répertoire '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = "Impossible de supprimer le fichier '%s': %s", -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Impossible de charger le le fichier '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Impossible de renommer le fichier '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Impossible d'enregistrer le fichier '%s' : %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Impossible d'arrêter le programme (pid : %d), code %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Annuler la dernière modification", -- src\editor\menu_edit.lua
["Undo last edit"] = "Annule la dernière modification", -- src\editor\menu_edit.lua
["Unmap Directory"] = "Démapper le répertoire", -- src\editor\filetree.lua
["Unset '%s' As Start File"] = "Ne plus utiliser le fichier '%s' en tant que point d'entrée", -- src\editor\filetree.lua
["Updated %d file."] = {"%d fichier mis à jour.","%d fichiers mis à jour."}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = "Mise à jour en cours de l'index des symboles et des paramètres...", -- src\editor\outline.lua
["Use %s to close."] = "Utiliser %s pour fermer.", -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Utilisez '%s' pour voir la description complète.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Utilisez '%s' pour afficher les fins de ligne et '%s' pour les convertir.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Utilisez 'clear' pour effacer la sortie console et l´historique.", -- src\editor\shellbox.lua
["Use Shift-Enter for multiline code."] = "Appuyez sur <Shift-Entrée> pour du code multiligne.", -- src\editor\shellbox.lua
["Value"] = "Valeur", -- src\editor\debugger.lua
["View the output/console window"] = "Afficher la fenêtre de sortie/console", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Afficher la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
["View the stack window"] = "Afficher la fenêtre de pile d'exécution", -- src\editor\gui.lua, src\editor\menu_view.lua
["View the watch window"] = "Afficher la fenêtre d'expressions espionnes", -- src\editor\gui.lua, src\editor\menu_view.lua
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua, src\editor\gui.lua
["View the markers window"] = "Afficher la fenêtre des marqueurs", -- src\editor\menu_view.lua
["View the outline window"] = "Affiche la fenêtre de structure", -- src\editor\menu_view.lua
["View the output/console window"] = "Affiche la fenêtre de sortie/console", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Affiche la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
["View the stack window"] = "Affiche la fenêtre de pile d'exécution", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Affiche la fenêtre d'expressions espionnes", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bienvenue dans l´interpréteur interactif Lua.", -- src\editor\shellbox.lua
["Wrap ar&ound"] = "B&oucler", -- src\editor\findreplace.lua
["Wrap around"] = "Boucler", -- src\editor\toolbar.lua
["You must save the program first."] = "Vous devez d'abord enregistrer le programme.", -- src\editor\commands.lua
["Zoom In"] = "Zoomer", -- src\editor\menu_view.lua
["Zoom Out"] = "Dézoomer", -- src\editor\menu_view.lua

View File

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

347
cfg/i18n/pt-br.lua Normal file
View File

@@ -0,0 +1,347 @@
--- @author Evandro Costa <evandro.co>
--- @date 26/12/2014
return {
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
["%s event failed: %s"] = "Evento %s falhou: %s", -- src\editor\package.lua
["%s%% formatted..."] = nil, -- src\editor\print.lua
["%s%% loaded..."] = nil, -- src\editor\commands.lua
["&About"] = "Sobre", -- src\editor\menu_help.lua
["&Add Watch"] = "&Adicionar observador", -- src\editor\debugger.lua
["&Break"] = "Interromper", -- src\editor\menu_project.lua
["&Close Page"] = "Fe&char guia", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Community"] = "&Comunidade", -- src\editor\menu_help.lua
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
["&Copy Value"] = nil, -- src\editor\debugger.lua
["&Copy"] = "&Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Default Layout"] = "Re&definir painéis", -- src\editor\menu_view.lua
["&Delete Watch"] = "Remover observa&dor", -- src\editor\debugger.lua
["&Delete"] = "Apagar", -- src\editor\filetree.lua
["&Documentation"] = "&Documentação", -- src\editor\menu_help.lua
["&Edit Project Directory"] = "&Editar pasta do projeto", -- src\editor\filetree.lua
["&Edit Value"] = "&Editar valor", -- src\editor\debugger.lua
["&Edit Watch"] = "&Editar observador", -- src\editor\debugger.lua
["&Edit"] = "&Editar", -- src\editor\menu_edit.lua
["&File"] = "Arquivo", -- src\editor\menu_file.lua
["&Find"] = "Localizar", -- src\editor\menu_search.lua
["&Fold/Unfold All"] = "Expandir/Recolher tudo", -- src\editor\menu_edit.lua
["&Frequently Asked Questions"] = "Perguntas &frequentes", -- src\editor\menu_help.lua
["&Getting Started Guide"] = "Primeiros passos", -- src\editor\menu_help.lua
["&Help"] = "Ajuda", -- src\editor\menu_help.lua
["&New Directory"] = "&Nova pasta", -- src\editor\filetree.lua
["&New"] = "&Novo", -- src\editor\menu_file.lua
["&Open..."] = "Abrir...", -- src\editor\menu_file.lua
["&Output/Console Window"] = "Saída/Console", -- src\editor\menu_view.lua
["&Paste"] = "Colar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Print..."] = nil, -- src\editor\print.lua
["&Project Page"] = "&Página do projeto", -- src\editor\menu_help.lua
["&Project"] = "&Projeto", -- src\editor\menu_project.lua
["&Redo"] = "&Refazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&Rename"] = "&Renomear", -- src\editor\filetree.lua
["&Replace"] = "Substitui&r", -- src\editor\menu_search.lua
["&Run"] = "Executa&r", -- src\editor\menu_project.lua
["&Save"] = "&Salvar", -- src\editor\gui.lua, src\editor\menu_file.lua
["&Search"] = "Localizar", -- src\editor\menu_search.lua
["&Select Command"] = nil, -- src\editor\gui.lua
["&Sort"] = "Ordenar", -- src\editor\menu_edit.lua
["&Stack Window"] = "Pilha de execução", -- src\editor\menu_view.lua
["&Start Debugger Server"] = "Iniciar &servidor de depuração", -- src\editor\menu_project.lua
["&Status Bar"] = "Barra de &status", -- src\editor\menu_view.lua
["&Tool Bar"] = "Barra de ferramen&tas", -- src\editor\menu_view.lua
["&Tutorials"] = "&Tutoriais", -- src\editor\menu_help.lua
["&Undo"] = "Desfazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["&View"] = "Exibir", -- src\editor\menu_view.lua
["&Watch Window"] = "Observador", -- src\editor\menu_view.lua
["About %s"] = "Sobre %s", -- src\editor\menu_help.lua
["Add To Scratchpad"] = "Adicionar ao rascunho", -- src\editor\editor.lua
["Add Watch Expression"] = "Adicionar observador", -- src\editor\editor.lua
["All files"] = "Todos os arquivos", -- src\editor\commands.lua
["Allow external process to start debugging"] = "Permitir processo externo para iniciar a depuração", -- src\editor\menu_project.lua
["Analyze the source code"] = "Analisar o código-fonte", -- src\editor\inspect.lua
["Analyze"] = "Analisar", -- src\editor\inspect.lua
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
["Auto complete while typing"] = "Autocompletar ao digitar", -- src\editor\menu_edit.lua
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
["Bookmark"] = "Marcador", -- src\editor\menu_edit.lua
["Break execution at the next executed line of code"] = "Interromper execução na próxima linha de código", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Breakpoint"] = nil, -- src\editor\menu_project.lua
["C&lear Console Window"] = nil, -- src\editor\gui.lua
["C&lear Output Window"] = "&Limpar janela de saída", -- src\editor\gui.lua, src\editor\menu_project.lua
["C&omment/Uncomment"] = "C&omentar/Descomentar", -- src\editor\menu_edit.lua
["Can't evaluate the expression while the application is running."] = "Impossível executar a expressão enquanto a aplicação estiver em execução.", -- src\editor\debugger.lua
["Can't open file '%s': %s"] = "Impossível abrir o arquivo '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
["Can't process auto-recovery record; invalid format: %s."] = "Impossível de processar registro de autorrecuperação; formato inválido: %s.", -- src\editor\commands.lua
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.lua
["Can't run the entry point script ('%s')."] = "Impossível de executar o ponto de entrada do script ('%s').", -- src\editor\debugger.lua
["Can't start debugger server at %s:%d: %s."] = "Impossível de iniciar o sevidor de depuração em %s:%d: %s.", -- src\editor\debugger.lua
["Can't start debugging for '%s'."] = nil, -- src\editor\debugger.lua
["Can't start debugging session due to internal error '%s'."] = "Impossível iniciar sessão de depuração devido ao erro interno '%s'.", -- src\editor\debugger.lua
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossível iniciar depuração sem abrir um arquivo ou se o arquivo atual não foi salvo ainda ('%s').", -- src\editor\debugger.lua
["Can't stop debugger server as it is not started."] = "Impossível interromper servidor de depuração se ele não foi iniciado.", -- src\editor\debugger.lua
["Cancelled by the user."] = "Cancelado pelo usuário", -- src\editor\findreplace.lua
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
["Choose a project directory"] = "Selecionar pasta do projeto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
["Choose..."] = "Selecionar...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
["Clear Items"] = "Limpar itens", -- src\editor\findreplace.lua, src\editor\menu_file.lua
["Clear items from this list"] = "Limpar itens desta lista", -- src\editor\menu_file.lua
["Clear the output window before compiling or debugging"] = "Limpar janela de saída antes de compilar ou depurar", -- src\editor\menu_project.lua
["Close &Other Pages"] = "Fechar &outras guias", -- src\editor\gui.lua
["Close A&ll Pages"] = "Fechar todas as guias", -- src\editor\gui.lua
["Close the current editor window"] = "Fechar janela do editor atual", -- src\editor\menu_file.lua
["Co&ntinue"] = "Co&ntinuar", -- src\editor\menu_project.lua
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
["Command Line Parameters..."] = "Parâmetros da linha de comandos...", -- src\editor\menu_project.lua
["Command line parameters"] = "Parâmetros da linha de comandos", -- src\editor\menu_project.lua
["Comment or uncomment current or selected lines"] = {"Comentar ou descomentar a linha atual", "Comentar ou descomentar as linhas selecionadas"}, -- src\editor\menu_edit.lua
["Compilation error"] = "Erro na compilação", -- src\editor\commands.lua, src\editor\debugger.lua
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilação com êxito; taxa de sucesso: %.0f%% (%d/%d).", -- src\editor\commands.lua
["Compile the current file"] = "Compilar arquivo atual", -- src\editor\menu_project.lua
["Complete &Identifier"] = "Completar &identificador", -- src\editor\menu_edit.lua
["Complete the current identifier"] = "Completar o identificador atual", -- src\editor\menu_edit.lua
["Consider removing backslash from escape sequence '%s'."] = "Considere a remoção da contrabarra da sequência de escape '%s'.", -- src\editor\commands.lua
["Copy Full Path"] = "Copiar o caminho completo", -- src\editor\gui.lua, src\editor\filetree.lua
["Copy selected text to clipboard"] = "Copiar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
["Correct &Indentation"] = "Corr&igir recuo", -- src\editor\menu_edit.lua
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossível ativar o arquivo '%s' para a depuração; continuando sem ele.", -- src\editor\debugger.lua
["Create an empty document"] = "Criar um documento em branco", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Cu&t"] = "Recor&tar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Cut selected text to clipboard"] = "Recortar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
["Debugger server started at %s:%d."] = "Servidor de depuração iniciado em %s:%d.", -- src\editor\debugger.lua
["Debugger server stopped at %s:%d."] = "Servidor de depuração interrompido em %s:%d.", -- src\editor\debugger.lua
["Debugging session completed (%s)."] = "Sessão de depuração completada (%s).", -- src\editor\debugger.lua
["Debugging session started in '%s'."] = "Sessão de depuração iniciada em '%s'.", -- src\editor\debugger.lua
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Depuração suspendida em '%s:%s' (impossível ativar o arquivo).", -- src\editor\debugger.lua
["Detach &Process"] = "Separar &processo", -- src\editor\menu_project.lua
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.lua
["Do you want to delete '%s'?"] = "Deseja mesmo apagar '%s'?", -- src\editor\filetree.lua
["Do you want to overwrite it?"] = "Deseja mesmo sobrescrevê-lo?", -- src\editor\commands.lua
["Do you want to reload it?"] = "Deseja mesmo atualizá-lo?", -- src\editor\editor.lua
["Do you want to save the changes to '%s'?"] = "Deseja salvar as alterações em '%s'?", -- src\editor\commands.lua
["E&xit"] = "Sair", -- src\editor\menu_file.lua
["Enable Indexing"] = nil, -- src\editor\outline.lua
["Enter Lua code and press Enter to run it."] = "Digite o código Lua e pressione Enter para executá-lo.", -- src\editor\shellbox.lua
["Enter command line parameters (use Cancel to clear)"] = "Digite os parâmetros da linha de comandos (use Cancelar para limpar)", -- src\editor\menu_project.lua
["Enter replacement text"] = "Digite o texto para substituir", -- src\editor\editor.lua
["Error while loading API file: %s"] = "Erro ao carregar arquivo de API: %s", -- src\editor\autocomplete.lua
["Error while loading configuration file: %s"] = "Erro ao carregar arquivo de configuração: %s", -- src\editor\style.lua
["Error while processing API file: %s"] = "Erro ao processar arquivo de API: %s", -- src\editor\autocomplete.lua
["Error while processing configuration file: %s"] = "Erro ao processar arquivo de configuração: %s", -- src\editor\style.lua
["Error"] = "Erro", -- src\editor\commands.lua
["Evaluate In Console"] = "Executar no console", -- src\editor\editor.lua
["Execute the current project/file and keep updating the code to see immediate results"] = "Executar o projeto/arquivo atual, mantendo o código atualizado para ver os resultados em tempo real", -- src\editor\menu_project.lua
["Execute the current project/file"] = "Executar o projeto/arquivo atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Execution error"] = "Erro na execução", -- src\editor\debugger.lua
["Exit program"] = "Sair do programa", -- src\editor\menu_file.lua
["File '%s' has been modified on disk."] = "Arquivo '%s' foi alterado no disco.", -- src\editor\editor.lua
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Arquivo '%s' possui uma data mais recente do que o restaurado '%s'; verifique antes de salvar.", -- src\editor\commands.lua
["File '%s' is missing and can't be recovered."] = "Arquivo '%s' está faltando e não pode ser restaurado.", -- src\editor\commands.lua
["File '%s' no longer exists."] = "Arquivo '%s' não existe mais.", -- src\editor\menu_file.lua, src\editor\editor.lua
["File already exists."] = "Arquivo já existe", -- src\editor\commands.lua
["File history"] = "Histórico do arquivo", -- src\editor\menu_file.lua
["Find &In Files"] = "Local&izar em arquivos", -- src\editor\menu_search.lua
["Find &Next"] = "Localizar próximo", -- src\editor\menu_search.lua
["Find &Previous"] = "Localizar anterior", -- src\editor\menu_search.lua
["Find and insert library function"] = "Localizar e inserir função de biblioteca", -- src\editor\menu_search.lua
["Find and replace text in files"] = "Localizar e substituir texto em arquivos", -- src\editor\menu_search.lua
["Find and replace text"] = "Localizar e substituir texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find in files"] = "Localizar em arquivos", -- src\editor\toolbar.lua
["Find text in files"] = "Localizar texto em arquivos", -- src\editor\menu_search.lua
["Find text"] = "Localizar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
["Find the earlier text occurence"] = "Localizar a ocorrência anterior do texto", -- src\editor\menu_search.lua
["Find the next text occurrence"] = "Localizar a ocorrência posterior do texto", -- src\editor\menu_search.lua
["Find"] = "Localizar", -- src\editor\toolbar.lua
["Fold or unfold all code folds"] = "Expandir ou recolher todos os blocos do código", -- src\editor\menu_edit.lua
["Formatting page %d..."] = nil, -- src\editor\print.lua
["Found %d instance."] = {}, -- src\editor\findreplace.lua
["Found auto-recovery record and restored saved session."] = "Registro de autorrecuperação encontrado e sessão restaurada.", -- src\editor\commands.lua
["Full &Screen"] = "Tela inteira", -- src\editor\menu_view.lua
["Go To Definition"] = "Ir para a definição", -- src\editor\editor.lua
["Go To File..."] = "Ir para o arquivo...", -- src\editor\menu_search.lua
["Go To Line..."] = "Ir para a linha...", -- src\editor\menu_search.lua
["Go To Next Bookmark"] = "Ir para o próximo marcador", -- src\editor\menu_edit.lua
["Go To Next Breakpoint"] = nil, -- src\editor\menu_project.lua
["Go To Previous Bookmark"] = "Ir para o marcador anterior", -- src\editor\menu_edit.lua
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.lua
["Go To Symbol..."] = "Ir para o símbolo...", -- src\editor\menu_search.lua
["Go to file"] = "Ir para o arquivo", -- src\editor\menu_search.lua
["Go to line"] = "Ir para a linha", -- src\editor\menu_search.lua
["Go to symbol"] = "Ir para o símbolo", -- src\editor\menu_search.lua
["Hide '.%s' Files"] = "Ocultar arquivos '.%s'", -- src\editor\filetree.lua
["INS"] = "INS", -- src\editor\editor.lua
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Ignored error in debugger initialization code: %s."] = "Erro ignorado no código de inicialização do depurador: %s.", -- src\editor\debugger.lua
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
["Indexing completed."] = nil, -- src\editor\outline.lua
["Insert Library Function..."] = "Inserir função de biblioteca...", -- src\editor\menu_search.lua
["Known Files"] = "Arquivos conhecidos", -- src\editor\commands.lua
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
["Local console"] = "Console local", -- src\editor\gui.lua, src\editor\shellbox.lua
["Lua &Interpreter"] = "&Interpretador Lua", -- src\editor\menu_project.lua
["Map Directory..."] = nil, -- src\editor\filetree.lua
["Mapped remote request for '%s' to '%s'."] = "Solicitação remota '%s' mapeada para '%s'.", -- src\editor\debugger.lua
["Markers Window"] = nil, -- src\editor\menu_view.lua
["Markers"] = nil, -- src\editor\markers.lua
["Match case"] = "Diferenciar maiúsc/minúsc", -- src\editor\toolbar.lua
["Match whole word"] = "Somente palavras inteiras", -- src\editor\toolbar.lua
["Mixed end-of-line encodings detected."] = "Multíplas codificações de fim-de-linha encontradas.", -- src\editor\commands.lua
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
["New &File"] = "Novo arquivo", -- src\editor\filetree.lua
["OVR"] = "OVR", -- src\editor\editor.lua
["Open With Default Program"] = "Abrir com o programa padrão", -- src\editor\filetree.lua
["Open an existing document"] = "Abrir um documento existente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Open file"] = "Abrir arquivo", -- src\editor\commands.lua
["Outline Window"] = "Saída", -- src\editor\menu_view.lua
["Outline"] = "Definições", -- src\editor\outline.lua
["Output (running)"] = "Saída (executando)", -- src\editor\debugger.lua, src\editor\output.lua
["Output (suspended)"] = "Saída (suspendido)", -- src\editor\debugger.lua
["Output"] = "Saída", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
["Page Setup..."] = nil, -- src\editor\print.lua
["Paste text from the clipboard"] = "Colar texto da área de transfêrencia", -- src\editor\menu_edit.lua
["Preferences"] = "Preferências", -- src\editor\menu_edit.lua
["Prepend '!' to force local execution."] = "Prefixe com '!' para forçar a execução local.", -- src\editor\shellbox.lua
["Prepend '=' to show complex values on multiple lines."] = "Prefixe com '=' para exibir valores complexos em multíplas linhas.", -- src\editor\shellbox.lua
["Press cancel to abort."] = "Pressionar cancelar para abortar.", -- src\editor\commands.lua
["Print the current document"] = nil, -- src\editor\print.lua
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado em '%s' (pid: %d).", -- src\editor\output.lua
["Program can't start because conflicting process is running as '%s'."] = "Impossível iniciar programa porque um processo conflitante está em execução como '%s'.", -- src\editor\output.lua
["Program completed in %.2f seconds (pid: %d)."] = "Programa completado em %.2f segundos (pid: %d).", -- src\editor\output.lua
["Program starting as '%s'."] = "Iniciando programa como '%s'.", -- src\editor\output.lua
["Program stopped (pid: %d)."] = "Programa interrompido (pid: %d).", -- src\editor\debugger.lua
["Program unable to run as '%s'."] = "Impossível de executar programa como '%s'.", -- src\editor\output.lua
["Project Directory"] = "Pasta do projeto", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Project history"] = "Histórico do projeto", -- src\editor\menu_file.lua
["Project"] = "Projeto", -- src\editor\filetree.lua
["Project/&FileTree Window"] = "Projeto/Hierarquia de arquivos", -- src\editor\menu_view.lua
["Provide command line parameters"] = "Informar os parâmetros da linha de comandos", -- src\editor\menu_project.lua
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
["R/O"] = "R/O", -- src\editor\editor.lua
["R/W"] = "R/W", -- src\editor\editor.lua
["Re&place In Files"] = "Substituir em arquivos", -- src\editor\menu_search.lua
["Re-indent selected lines"] = "Inserir recuos nas linhas selecionadas", -- src\editor\menu_edit.lua
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.lua
["Recent Files"] = "Arquivos recentes", -- src\editor\menu_file.lua
["Recent Projects"] = "Projetos recentes", -- src\editor\menu_file.lua
["Redo last edit undone"] = "Refazer última edição desfeita", -- src\editor\menu_edit.lua
["Refresh Index"] = nil, -- src\editor\outline.lua
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
["Refresh"] = "Refrescar", -- src\editor\filetree.lua
["Refused a request to start a new debugging session as there is one in progress already."] = "Solicitação de início de uma nova sessão de depuração recusado porque já existe um em progresso.", -- src\editor\debugger.lua
["Regular expression"] = "Expressão regular", -- src\editor\toolbar.lua
["Remote console"] = "Console remoto", -- src\editor\shellbox.lua
["Rename All Instances"] = "Renomear todas as instâncias", -- src\editor\editor.lua
["Replace All Selections"] = "Substituir todas as seleções", -- src\editor\editor.lua
["Replace all"] = "Substituir tudo", -- src\editor\toolbar.lua
["Replace next instance"] = nil, -- src\editor\toolbar.lua
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
["Replaced an invalid UTF8 character with %s."] = "Caractere UTF8 inválido susbtituído por %s.", -- src\editor\commands.lua
["Reset to default layout"] = "Redefinir painéis para o padrão", -- src\editor\menu_view.lua
["Run As Scratchpad"] = "Executar como rascunho", -- src\editor\menu_project.lua
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
["Run as Scratchpad"] = "Executar como rascunho", -- src\editor\toolbar.lua
["Run to cursor"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
["S&top Debugging"] = "In&terromper depuração", -- src\editor\menu_project.lua
["S&top Process"] = "In&terromper processo", -- src\editor\menu_project.lua
["Save &As..."] = "S&alvar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
["Save A&ll"] = "Sa&lvar tudo", -- src\editor\menu_file.lua
["Save Changes?"] = "Salvar alterações?", -- src\editor\commands.lua
["Save all open documents"] = "Salvar todos os documentos abertos", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Save file as"] = "Salvar arquivo como", -- src\editor\commands.lua
["Save file?"] = "Salvar arquivo?", -- src\editor\commands.lua
["Save the current document to a file with a new name"] = "Salvar documento atual para um arquivo com outro nome", -- src\editor\menu_file.lua
["Save the current document"] = "Salvar documento atual", -- src\editor\toolbar.lua, src\editor\menu_file.lua
["Saved auto-recover at %s."] = "Autorrecuperação salvo às %s.", -- src\editor\commands.lua
["Scratchpad error"] = "Erro no rascunho", -- src\editor\debugger.lua
["Search direction"] = nil, -- src\editor\toolbar.lua
["Search in selection"] = nil, -- src\editor\toolbar.lua
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
["Select &All"] = "Selecion&ar tudo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
["Select And Find Next"] = "Selecionar e localizar próxima", -- src\editor\menu_search.lua
["Select And Find Previous"] = "Selecionar e localizar anterior", -- src\editor\menu_search.lua
["Select all text in the editor"] = "Selecionar todo o texto do editor", -- src\editor\menu_edit.lua
["Select the word under cursor and find its next occurrence"] = "Selecionar palavra no cursor e localizar sua próxima ocorrência", -- src\editor\menu_search.lua
["Select the word under cursor and find its previous occurrence"] = "Selecionar palavra no cursor e localizar sua ocorrência anterior", -- src\editor\menu_search.lua
["Set As Start File"] = nil, -- src\editor\filetree.lua
["Set From Current File"] = "Alterar para o arquivo atual", -- src\editor\menu_project.lua
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
["Set project directory from current file"] = "Alterar pasta do projeto para a pasta do arquivo atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
["Set search directory"] = nil, -- src\editor\toolbar.lua
["Set the interpreter to be used"] = "Alterar interpretador a ser utilizado", -- src\editor\menu_project.lua
["Set the project directory to be used"] = "Alterar pasta do projeto a ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
["Settings: System"] = "Opções: Sistema", -- src\editor\menu_edit.lua
["Settings: User"] = "Opções: Usuário", -- src\editor\menu_edit.lua
["Show &Tooltip"] = "Exibir dica", -- src\editor\menu_edit.lua
["Show All Files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
["Show Hidden Files"] = "Exibir arquivos ocultos", -- src\editor\filetree.lua
["Show Location"] = "Exibir pasta no sistema", -- src\editor\gui.lua, src\editor\filetree.lua
["Show all files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
["Show context"] = nil, -- src\editor\toolbar.lua
["Show files previously hidden"] = "Exibir arquivos anteriormente ocultos", -- src\editor\filetree.lua
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
["Show tooltip for current position; place cursor after opening bracket of function"] = "Exibir dica para a posição atual; posicione o cursor após abrir o parênteses da função", -- src\editor\menu_edit.lua
["Show/Hide the status bar"] = "Exibir/Ocultar a barra de status", -- src\editor\menu_view.lua
["Show/Hide the toolbar"] = "Exibir/Ocultar a barra de ferramentas", -- src\editor\menu_view.lua
["Sort By Name"] = nil, -- src\editor\outline.lua
["Sort selected lines"] = "Ordenar linhas selecionadas", -- src\editor\menu_edit.lua
["Source"] = "Código", -- src\editor\menu_edit.lua
["Stack"] = "Pilha de execução", -- src\editor\debugger.lua
["Start &Debugging"] = "Iniciar &depuração", -- src\editor\menu_project.lua
["Start or continue debugging"] = "Iniciar ou continuar depuração", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step &Into"] = "Passar para dentro", -- src\editor\menu_project.lua
["Step &Over"] = "Passar s&obre", -- src\editor\menu_project.lua
["Step O&ut"] = "Passar para fora", -- src\editor\menu_project.lua
["Step into"] = "Passar para dentro", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step out of the current function"] = "Passar para fora da função atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Step over"] = "Passar para fora", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop debugging and continue running the process"] = "Interromper depuração e continuar executando o processo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Stop the currently running process"] = "Interromper o processo atual em execução", -- src\editor\toolbar.lua, src\editor\menu_project.lua
["Switch to or from full screen mode"] = "Entrar/Sair do modo tela inteira", -- src\editor\menu_view.lua
["Symbol Index"] = nil, -- src\editor\outline.lua
["Text not found."] = "Texto não encontrado.", -- src\editor\findreplace.lua
["The API file must be located in a subdirectory of the API directory."] = "O arquivo de API deve estar localizado em uma subpasta da pasta de API", -- src\editor\autocomplete.lua
["Toggle Bookmark"] = "Alternar marcador", -- src\editor\markers.lua, src\editor\menu_edit.lua
["Toggle Breakpoint"] = "Alternar ponto de interrupção", -- src\editor\markers.lua, src\editor\menu_project.lua
["Toggle bookmark"] = "Alternar marcador", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
["Toggle breakpoint"] = "Alternar ponto de interrupção", -- src\editor\markers.lua, src\editor\toolbar.lua
["Tr&ace"] = "R&astrear", -- src\editor\menu_project.lua
["Trace execution showing each executed line"] = "Rastrear execução exibindo cada linha de código executada", -- src\editor\menu_project.lua
["Unable to create directory '%s'."] = "Impossível criar pasta '%s'.", -- src\editor\filetree.lua
["Unable to create file '%s'."] = "Impossível criar arquivo '%s'.", -- src\editor\filetree.lua
["Unable to delete directory '%s': %s"] = "Impossível apagar a pasta '%s': %s", -- src\editor\filetree.lua
["Unable to delete file '%s': %s"] = nil, -- src\editor\filetree.lua
["Unable to load file '%s'."] = "Impossível carregar o arquivo '%s'.", -- src\editor\commands.lua
["Unable to rename file '%s'."] = "Impossível renomear o arquivo '%s'.", -- src\editor\filetree.lua
["Unable to save file '%s': %s"] = "Impossível salvar o arquivo '%s': %s", -- src\editor\commands.lua
["Unable to stop program (pid: %d), code %d."] = "Impossível de interromper programa (pid: %d), código %d.", -- src\editor\debugger.lua
["Undo last edit"] = "Refazer última edição", -- src\editor\menu_edit.lua
["Unmap Directory"] = nil, -- src\editor\filetree.lua
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
["Updated %d file."] = {}, -- src\editor\findreplace.lua
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
["Use %s to close."] = nil, -- src\editor\findreplace.lua
["Use '%s' to see full description."] = "Use '%s' para ver a descrição completa.", -- src\editor\editor.lua
["Use '%s' to show line endings and '%s' to convert them."] = "Use '%s' para exibir os finais de linha e '%s' para convertê-los.", -- src\editor\commands.lua
["Use 'clear' to clear the shell output and the history."] = "Use 'clear' para limpar a saída e o histórico.", -- src\editor\shellbox.lua
["Use Shift-Enter for multiline code."] = "Usar Shift-Enter para adicionar uma nova linha ao código.", -- src\editor\shellbox.lua
["View the markers window"] = nil, -- src\editor\menu_view.lua
["View the outline window"] = "Exibir a janela de definições", -- src\editor\menu_view.lua
["View the output/console window"] = "Exibir a janela de saída/console", -- src\editor\menu_view.lua
["View the project/filetree window"] = "Exibir janela do projeto/hierarquia de arquivos", -- src\editor\menu_view.lua
["View the stack window"] = "Exibir janela da pilha de execução", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["View the watch window"] = "Exibir janela do observador", -- src\editor\toolbar.lua, src\editor\menu_view.lua
["Watch"] = "Observador", -- src\editor\debugger.lua
["Welcome to the interactive Lua interpreter."] = "Bem-vindo ao interpretador do Lua.", -- src\editor\shellbox.lua
["Wrap around"] = "Repetir direção", -- src\editor\toolbar.lua
["You must save the program first."] = "Você deve salvar o programa primeiro.", -- src\editor\commands.lua
["Zoom In"] = "Ampliar", -- src\editor\menu_view.lua
["Zoom Out"] = "Afastar", -- src\editor\menu_view.lua
["Zoom to 100%"] = "Ir para 100%", -- src\editor\menu_view.lua
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
["on line %d"] = "na linha %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
["traced %d instruction"] = {"%d instrução rastreada", "%d instruções rastreadas"}, -- src\editor\debugger.lua
["unknown error"] = "erro desconhecido", -- src\editor\debugger.lua
}

View File

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

View File

@@ -19,8 +19,7 @@
2. Add the following code with the scheme you selected to `cfg/user.lua`.
--]]
local G = ...
styles = G.loadfile('cfg/tomorrow.lua')('TomorrowNightBlue')
styles = loadfile('cfg/tomorrow.lua')('TomorrowNightBlue')
stylesoutshell = styles -- apply the same scheme to Output/Console windows
styles.auxwindow = styles.text -- apply text colors to auxiliary windows
styles.calltip = styles.text -- apply text colors to tooltips

View File

@@ -10,14 +10,14 @@ See [configuration](http://studio.zerobrane.com/doc-configuration.html) page for
--]]--
-- to modify loaded configuration for recognized extensions for lua files
local G = ... -- this now points to the global environment in the script
local luaspec = G.ide.specs['lua']
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
local luaspec = ide.specs.lua
luaspec.exts[#luaspec.exts+1] = "luaz"
luaspec.keywords[1] = luaspec.keywords[1] .. ' foo'
-- to modify a key mapping; see the full list of IDs in src/editor/keymap.lua
local G = ...
keymap[G.ID_STARTDEBUG] = "Ctrl-Shift-D"
-- starting from v0.95, ID.<menuid> can be used instead of G.ID_<menuid>
keymap[ID.STARTDEBUG] = "Ctrl-Shift-D"
-- to change font size to 12
editor.fontsize = 12 -- this is mapped to ide.config.editor.fontsize
@@ -82,8 +82,8 @@ styles.text = {bg = {240,240,220}}
-- to change the default color scheme; check tomorrow.lua for the list
-- of supported schemes or use cfg/scheme-picker.lua to pick a scheme.
local G = ...
styles = G.loadfile('cfg/tomorrow.lua')('Tomorrow')
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
styles = loadfile('cfg/tomorrow.lua')('Tomorrow')
-- also apply the same scheme to Output and Console windows
stylesoutshell = styles
@@ -95,7 +95,7 @@ styles.marker.prompt = {ch = wxstc.wxSTC_MARK_CHARACTER+('>'):byte(), fg = {0, 0
stylesoutshell = styles
-- to disable indicators (underlining) on function calls
styles.indicator.fncall = nil
-- styles.indicator.fncall = nil
-- to change the color of the indicator used for function calls
styles.indicator.fncall.fg = {240,0,0}
@@ -112,8 +112,8 @@ styles.indicator.fncall.st = wxstc.wxSTC_INDIC_PLAIN
wxSTC_INDIC_HIDDEN No visual effect;
--]]
-- to enable additional spec files (like spec/cpp.lua)
load.specs(function(file) return file:find('spec[/\\]cpp%.lua$') end)
-- to enable additional spec files (like spec/glsl.lua)
load.specs(function(file) return file:find('spec[/\\]glsl%.lua$') end)
-- to specify a default EOL encoding to be used for new files:
-- `wxstc.wxSTC_EOL_CRLF` or `wxstc.wxSTC_EOL_LF`;
@@ -142,8 +142,8 @@ editor.nomousezoom = true
corona = { skin = "iPad" }
-- to style individual keywords; `return` and `break` are shown in red
local G = ... -- this now points to the global environment in the script
local luaspec = G.ide.specs.lua
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
local luaspec = ide.specs.lua
local num = #luaspec.keywords
-- take a new slot in the list of keywords (starting from 1)
@@ -153,3 +153,18 @@ luaspec.keywords[1] = luaspec.keywords[1]:gsub(' return', ''):gsub(' break', '')
-- assign new style to the added slot (starting from 0)
styles["keywords"..num] = {fg = {240, 0, 0}, b = true}
-- enable `Opt+Shift+Left/Right` shortcut on OSX
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_LEFT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDLEFTEXTEND, "Macintosh"}
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_RIGHT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDRIGHTENDEXTEND, "Macintosh"}
-- enable Emacs bindings to use `Ctrl-A` and `Ctrl-E` to go to the line start/end
editor.keymap[#editor.keymap+1] = {('A'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_HOME}
editor.keymap[#editor.keymap+1] = {('E'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_LINEEND}
keymap[ID.SELECTALL] = nil -- remove `Ctrl-A` shortcut from `SelectAll`
-- updated shortcuts to use them as of v1.20
keymap[ID.BREAK] = "Shift-F9"
keymap[ID.BREAKPOINTTOGGLE] = "F9"
keymap[ID.BREAKPOINTNEXT] = ""
keymap[ID.BREAKPOINTPREV] = ""

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.BREAKPOINTTOGGLE] = "Ctrl-\\",
[ID.CLEAROUTPUT] = "",
[ID.INTERPRETER] = "",
[ID.PROJECTDIR] = "",
-- Help menu
[G.ID_ABOUT] = "F1",
[ID.ABOUT] = "F1",
-- Watch window menu items
[G.ID_ADDWATCH] = "Ins",
[G.ID_EDITWATCH] = "F2",
[G.ID_DELETEWATCH] = "Del",
[ID.ADDWATCH] = "Ins",
[ID.EDITWATCH] = "F2",
[ID.DELETEWATCH] = "Del",
-- Editor popup menu items
[G.ID_QUICKADDWATCH] = "",
[G.ID_QUICKEVAL] = "",
[ID.QUICKADDWATCH] = "",
[ID.QUICKEVAL] = "",
}
local G = ...
for id, key in G.pairs(xcode) do keymap[id] = key end

View File

@@ -11,55 +11,46 @@ return {
busted = busted or ide.config.path.busted -- check if the path is configured
if not busted then
local sep = win and ';' or ':'
local path = (os.getenv('PATH') or '')..sep
local default =
win and GenerateProgramFilesPath('LuaRocks\\systree\\bin', sep)..sep
or ''
local path = default
..(os.getenv('PATH') or '')..sep
..(os.getenv('HOME') and os.getenv('HOME') .. '/bin' or '')
local paths = {}
for p in path:gmatch("[^"..sep.."]+") do
busted = busted or GetFullPathIfExists(p, win and 'busted.exe' or 'busted')
busted = busted or GetFullPathIfExists(p, win and 'busted.bat' or 'busted')
table.insert(paths, p)
end
if not busted then
DisplayOutput("Can't find busted executable in any of the folders in PATH: "
..table.concat(paths, ", ").."\n")
DisplayOutputLn("Can't find busted executable in any of the folders in PATH: "
..table.concat(paths, ", "))
return
end
end
local file
local file = wfilename:GetFullPath()
local helper
if rundebug then
-- start running the application right away
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
local code = (
[=[xpcall(function() io.stdout:setvbuf('no')
require('mobdebug').start(); dofile [[%s]]
end, function(err) print(debug.traceback(err)) end)]=])
:format(wfilename:GetFullPath())
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart ~= false})
local tmpfile = wx.wxFileName()
tmpfile:AssignTempFileName(".")
file = tmpfile:GetFullPath()
local f = io.open(file, "w")
helper = tmpfile:GetFullPath()..".lua" -- busted likes .lua files more than .tmp files
local f = io.open(helper, "w")
if not f then
DisplayOutput("Can't open temporary file '"..file.."' for writing\n")
DisplayOutputLn("Can't open temporary file '"..helper.."' for writing.")
return
end
f:write(code)
f:write("require('mobdebug').start()")
f:close()
end
file = file or wfilename:GetFullPath()
local options = ide.config.busted and ide.config.busted.options
or "--output=TAP"
local cmd = ('"%s" %s "%s"'):format(busted, options, file)
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
local options = ide.config.busted and ide.config.busted.options or "--output=TAP"
local cmd = ('"%s" %s %s "%s"'):format(busted, helper and "--helper="..helper or "", options, file)
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
function() if rundebug then wx.wxRemoveFile(file) end end)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
function() if helper then wx.wxRemoveFile(helper) end end)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,

View File

@@ -1,6 +1,6 @@
-- Copyright 2011-13 Paul Kulchenko, ZeroBrane LLC
local corona
local pathcache
local win = ide.osname == "Windows"
local mac = ide.osname == "Macintosh"
@@ -9,7 +9,7 @@ return {
description = "Corona SDK mobile framework",
api = {"baselib", "corona"},
frun = function(self,wfilename,rundebug)
corona = corona or ide.config.path.corona -- check if the path is configured
local corona = ide.config.path.corona or pathcache -- check if the path is configured
if not corona then
local sep = win and ';' or ':'
local default =
@@ -26,21 +26,23 @@ return {
table.insert(paths, p)
end
if not corona then
DisplayOutput("Can't find corona executable in any of the folders in PATH: "
..table.concat(paths, ", ").."\n")
DisplayOutputLn("Can't find corona executable in any of the folders in PATH: "
..table.concat(paths, ", "))
return
end
pathcache = corona
end
local file = GetFullPathIfExists(self:fworkdir(wfilename), 'main.lua')
if not file then
DisplayOutput("Can't find 'main.lua' file in the current project folder.\n")
DisplayOutputLn(("Can't find 'main.lua' file in the current project folder: '%s'.")
:format(self:fworkdir(wfilename)))
return
end
if rundebug then
-- start running the application right away
DebuggerAttachDefault({startwith = file, redirect = mac and "r" or "c",
DebuggerAttachDefault({startwith = file, redirect = "r",
runstart = ide.config.debugger.runonstart ~= false})
local function needRefresh(mdbl, mdbc)
@@ -79,19 +81,20 @@ return {
end
end
local cfg = ide.config.corona or {}
local debugopt = mac and "-debug 1 -project " or "-debug "
local skin = ide.config.corona and ide.config.corona.skin
and (" -skin "..ide.config.corona.skin) or ""
local cmd = ('"%s" %s"%s"%s')
:format(corona, rundebug and debugopt or "", file, skin)
local skin = cfg.skin and (" -skin "..cfg.skin) or ""
local noconsole = (cfg.showconsole and ""
or (mac and "-no-console YES " or "-no-console "))
local cmd = ('"%s" %s%s"%s"%s')
:format(corona, noconsole, rundebug and debugopt or "", file, skin)
local uhw = ide.config.unhidewindow
local cwc = uhw and uhw.ConsoleWindowClass
if uhw and cfg.showconsole then uhw.ConsoleWindowClass = 0 end
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
return CommandLineRun(cmd,self:fworkdir(wfilename),true,true,nil,nil,
function() if uhw and cfg.showconsole then uhw.ConsoleWindowClass = cwc end end)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,

View File

@@ -9,7 +9,4 @@ return {
ShellExecuteFile(wfilename)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
}

View File

@@ -135,12 +135,6 @@ return {
end
return pid
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
scratchextloop = true,

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)
@@ -81,12 +81,6 @@ return {
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
function() if rundebug then wx.wxRemoveFile(filepath) end end)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
skipcompile = true,

View File

@@ -17,11 +17,23 @@ return {
frun = function(self,wfilename,rundebug)
exe = exe or exePath()
local filepath = wfilename:GetFullPath()
local script
if rundebug then
DebuggerAttachDefault({basedir = self:fworkdir(wfilename),
runstart = ide.config.debugger.runonstart == true})
script = rundebug
-- update arg to point to the proper file
rundebug = ('if arg then arg[0] = [[%s]] end '):format(filepath)..rundebug
local tmpfile = wx.wxFileName()
tmpfile:AssignTempFileName(".")
filepath = tmpfile:GetFullPath()
local f = io.open(filepath, "w")
if not f then
DisplayOutputLn("Can't open temporary file '"..filepath.."' for writing.")
return
end
f:write(rundebug)
f:close()
else
-- if running on Windows and can't open the file, this may mean that
-- the file path includes unicode characters that need special handling
@@ -32,11 +44,10 @@ return {
winapi.set_encoding(winapi.CP_UTF8)
filepath = winapi.short_path(filepath)
end
script = ('dofile [[%s]]'):format(filepath)
end
local code = ([[xpcall(function() io.stdout:setvbuf('no'); %s end,function(err) print(debug.traceback(err)) end)]]):format(script)
local cmd = '"'..exe..'" -e "'..code..'"'
local params = ide.config.arg.any or ide.config.arg.lua
local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
local cmd = '"'..exe..'" '..code..(params and " "..params or "")
-- add "LUA_DEV\clibs" to PATH to allow required DLLs to load
local _, path = wx.wxGetEnv("PATH")
@@ -46,15 +57,13 @@ return {
end
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false)
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
function() if rundebug then wx.wxRemoveFile(filepath) end end)
-- restore PATH
wx.wxSetEnv("PATH", path)
return pid
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function (self,wfilename)
return (not ide.config.lfw or ide.config.lfw.chdirtofile ~= true)
and ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
@@ -63,4 +72,5 @@ return {
fattachdebug = function(self) DebuggerAttachDefault() end,
scratchextloop = false,
unhideanywindow = true,
takeparameters = true,
}

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,17 +42,17 @@ return {
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
end
-- suppress hiding ConsoleWindowClass as this is used by Love console
local uhw = ide.config.unhidewindow
local cwc = uhw and uhw.ConsoleWindowClass
if uhw then uhw.ConsoleWindowClass = 0 end
local params = ide.config.arg.any or ide.config.arg.love2d
local cmd = ('"%s" "%s"%s%s'):format(love2d, self:fworkdir(wfilename),
params and " "..params or "", rundebug and ' -debug' or '')
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
return CommandLineRun(cmd,self:fworkdir(wfilename),true,true)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
return CommandLineRun(cmd,self:fworkdir(wfilename),true,true,nil,nil,
function() if uhw then uhw.ConsoleWindowClass = cwc end end)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,

View File

@@ -13,12 +13,34 @@ end
return {
name = ("Lua%s"):format(name or version or ""),
description = ("Lua%s interpreter with debugger"):format(name or version or ""),
api = {"wxwidgets","baselib"},
api = {"baselib"},
luaversion = version or '5.1',
fexepath = exePath,
frun = function(self,wfilename,rundebug)
local exe = self:fexepath(version or "")
local filepath = wfilename:GetFullPath()
do
-- if running on Windows and can't open the file, this may mean that
-- the file path includes unicode characters that need special handling
local fh = io.open(filepath, "r")
if fh then fh:close() end
if ide.osname == 'Windows' and pcall(require, "winapi")
and wfilename:FileExists() and not fh then
winapi.set_encoding(winapi.CP_UTF8)
local shortpath = winapi.short_path(filepath)
if shortpath == filepath then
DisplayOutputLn(
("Can't get short path for a Unicode file name '%s' to open the file.")
:format(filepath))
DisplayOutputLn(
("You can enable short names by using `fsutil 8dot3name set %s: 0` and recreate the file or directory.")
:format(wfilename:GetVolume()))
end
filepath = shortpath
end
end
if rundebug then
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
@@ -30,50 +52,43 @@ return {
filepath = tmpfile:GetFullPath()
local f = io.open(filepath, "w")
if not f then
DisplayOutput("Can't open temporary file '"..filepath.."' for writing\n")
DisplayOutputLn("Can't open temporary file '"..filepath.."' for writing.")
return
end
f:write(rundebug)
f:close()
else
-- if running on Windows and can't open the file, this may mean that
-- the file path includes unicode characters that need special handling
local fh = io.open(filepath, "r")
if fh then fh:close() end
if ide.osname == 'Windows' and pcall(require, "winapi")
and wfilename:FileExists() and not fh then
winapi.set_encoding(winapi.CP_UTF8)
filepath = winapi.short_path(filepath)
end
end
local params = ide.config.arg.any or ide.config.arg.lua
local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
local cmd = '"'..exe..'" '..code..(params and " "..params or "")
-- modify CPATH to work with other Lua versions
local clibs = ('/clibs%s/'):format(version and tostring(version):gsub('%.','') or '')
local _, cpath = wx.wxGetEnv("LUA_CPATH")
if rundebug and cpath then
wx.wxSetEnv("LUA_CPATH", ide.osclibs..';'..cpath)
local envname = "LUA_CPATH"
if version then
local env = "LUA_CPATH_"..string.gsub(version, '%.', '_')
if os.getenv(env) then envname = env end
end
if version and cpath and not cpath:find(clibs, 1, true) then
local _, cpath = wx.wxGetEnv("LUA_CPATH")
wx.wxSetEnv("LUA_CPATH", cpath:gsub('/clibs/', clibs))
local cpath = os.getenv(envname)
if rundebug and cpath and not ide.config.path['lua'..(version or "")] then
-- prepend osclibs as the libraries may be needed for debugging,
-- but only if no path.lua is set as it may conflict with system libs
wx.wxSetEnv(envname, ide.osclibs..';'..cpath)
end
if version and cpath then
local cpath = os.getenv(envname)
local clibs = string.format('/clibs%s/', version):gsub('%.','')
if not cpath:find(clibs, 1, true) then cpath = cpath:gsub('/clibs/', clibs) end
wx.wxSetEnv(envname, cpath)
end
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
function() if rundebug then wx.wxRemoveFile(filepath) end end)
if (rundebug or version) and cpath then wx.wxSetEnv("LUA_CPATH", cpath) end
if (rundebug or version) and cpath then wx.wxSetEnv(envname, cpath) end
return pid
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function (self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
scratchextloop = false,

View File

@@ -0,0 +1,4 @@
dofile 'interpreters/luabase.lua'
local interpreter = MakeLuaInterpreter(5.3, ' 5.3')
interpreter.skipcompile = true
return interpreter

View File

@@ -1,12 +1,13 @@
return {
name = "Luxinia2",
description = "Luxinia2",
api = {"baselib","glfw","glewgl","assimp20","luxmath","luxscene","luajit2",},
api = {"baselib","glfw","glewgl","assimp20","luajit2",},
frun = function(self,wfilename,rundebug)
if not ide.config.path.luxinia2 then wx.wxMessageBox("Please define 'path.luxinia2' in your cfg/user.lua (see estrela.lua for examples)"); return end
local editorDir = string.gsub(ide.editorFilename:gsub("[^/\\]+$",""),"\\","/")
local luxDir = ide.config.path.luxinia2 or os.getenv("LUXINIA2")
local luxDir = ide.config.path.luxinia2
local scratchpad = rundebug and rundebug:match("scratchpad")
local filename = wfilename:GetFullName()
@@ -63,12 +64,6 @@ return {
return CommandLineRun(cmd,wdir,true,true,nil,self:fuid(wfilename))
end,
fuid = function(self,wfilename) return "luxinia2: luajit "..wfilename:GetFullName() end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function (self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
scratchextloop = true,

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,27 +228,10 @@ return {
end
end
local dll = GetFullPathIfExists(s3e, "../quick/target/quick_prebuilt_d.s86")
or MergeFullPath(s3e, ("../quick/target/%s/quick_prebuilt_d.s86"):format(mac and 'osx' or 'win'))
local options = table.concat({
([[--dll="%s"]]):format(dll),
(datadir and ([[--data="%s"]]):format(datadir) or ''),
-- Quick doesn't handle correctly spaces in quoted parameters on OSX,
-- so replace those with escaped spaces; still quote on Windows
(icf1 and ([[--app-icf1=%s]]):format(mac and icf1:gsub(" ", "\\ ") or '"'..icf1..'"') or ''),
(icf2 and ([[--app-icf2=%s]]):format(mac and icf2:gsub(" ", "\\ ") or '"'..icf2..'"') or nil),
}, " ")
local cmd = ('"%s" %s'):format(quick, options)
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
return CommandLineRun(cmd,GetPathWithSep(projdir),true,true)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
}

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)
@@ -86,12 +86,6 @@ return {
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
function() if rundebug then wx.wxRemoveFile(file) end end)
end,
fprojdir = function(self,wfilename)
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
fworkdir = function(self,wfilename)
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
end,
hasdebugger = true,
fattachdebug = function(self) DebuggerAttachDefault() end,
scratchextloop = true,

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)
@@ -83,6 +93,7 @@ end
local sym = newset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_")
local dig = newset('0123456789')
local name = "([_A-Za-z][_A-Za-z0-9]*)"
local op = newset('=~<>.+-*/%^#=<>;:,.{}[]()')
op['=='] = true
@@ -90,23 +101,26 @@ op['<='] = true
op['>='] = true
op['~='] = true
op['..'] = true
op['<<'] = true
op['>>'] = true
op['//'] = true
local is_keyword = qws[[
and break do else elseif end false for function if
in local nil not or repeat return
then true until while]]
then true until while goto]]
function M.lex(code, f, pos)
local pos = pos or 1
local tok = code:match('^#![^\n]*\n', pos) -- shebang
if tok then f('Shebang', tok, 1) pos = pos + #tok end
while pos <= #code do
local p2, n2, n1 = code:match('^%s*()((%S)%S?)', pos)
local p2, n2, n1, n3 = code:match('^%s*()((%S)(%S?))', pos)
if not p2 then assert(code:sub(pos):match('^%s*$')); break end
pos = p2
if sym[n1] then
local tok = code:match('^([_A-Za-z][_A-Za-z0-9]*)', pos)
local tok = code:match('^'..name, pos)
assert(tok)
if is_keyword[tok] then
f('Keyword', tok, pos)
@@ -119,6 +133,15 @@ function M.lex(code, f, pos)
assert(tok)
f('Comment', tok, pos)
pos = pos2
elseif n2 == '::' then
local tok = code:match('^(::%s*'..name..'%s*::)', pos)
if tok then
f('Label', tok, pos)
pos = pos + #tok
else
f('Unknown', code:sub(pos, pos+1), pos) -- unterminated label
pos = pos + 2
end
elseif n1 == '\'' or n1 == '\"' or n2 == '[[' or n2 == '[=' then
local tok = match_string(code, pos)
if tok then
@@ -128,7 +151,7 @@ function M.lex(code, f, pos)
f('Unknown', code:sub(pos), pos) -- unterminated string
pos = #code + 1
end
elseif dig[n1] then
elseif dig[n1] or (n1 == '.' and dig[n3]) then
local tok = match_numberlike(code, pos)
assert(tok)
f('Number', tok, pos)
@@ -178,9 +201,10 @@ function M.lexc(code, f, pos)
local yield = coroutine.yield
local func = coroutine.wrap(f or function()
M.lex(code, function(tag, name, pos)
yield {tag=tag, name, lineinfo=pos}
-- skip Comment tags as they may arbitrarily split statements and affects their processing
if tag ~= 'Comment' then yield {tag=tag, name, lineinfo=pos} end
end, pos)
yield {tag='Eof'}
yield {tag='Eof', lineinfo = #code+1}
end)
return setmetatable({f=func}, Stream)
end

View File

@@ -6,12 +6,9 @@
local PARSE = {}
local unpack = table.unpack or unpack
local LEX = require 'lua_lexer_loose'
local function warn(message, position)
io.stderr:write('WARNING: ', tostring(position), ': ', message, '\n')
end
--[[
Loose parser.
@@ -31,6 +28,7 @@ end
'Scope', opt - beginning of scope block.
'EndScope', nil, lineinfo - end of scope block.
'FunctionCall', name, lineinfo - function call (in addition to other events).
'Function', name, lineinfo - function definition.
--]]
function PARSE.parse_scope(lx, f, level)
local cprev = {tag='Eof'}
@@ -39,36 +37,46 @@ function PARSE.parse_scope(lx, f, level)
local scopes = {{}}
for l = 2, (level or 1) do scopes[l] = {} end
local function scope_begin(opt, lineinfo)
local function scope_begin(opt, lineinfo, nobreak)
scopes[#scopes+1] = {}
f('Scope', opt, lineinfo)
f('Scope', opt, lineinfo, nobreak)
end
local function scope_end(opt, lineinfo)
if #scopes <= 1 then
warn("'end' without opening block", lineinfo)
else
table.remove(scopes)
local scope = #scopes
if scope > 1 then table.remove(scopes) end
local inside_local = false
for scope = scope-1, 1, -1 do
if scopes[scope].inside_local then inside_local = true; break end
end
f('EndScope', opt, lineinfo)
f('EndScope', opt, lineinfo, inside_local)
end
local function parse_function_list(has_self)
local function parse_function_list(has_self, name, pos)
local c = lx:next(); assert(c[1] == '(')
f('Statement', c[1], c.lineinfo) -- generate Statement for function definition
scope_begin(c[1], c.lineinfo)
f('Statement', c[1], c.lineinfo, true) -- generate Statement for function definition
scope_begin(c[1], c.lineinfo, true)
local vars = {} -- accumulate vars (if any) to send after 'Function'
if has_self then
local lineinfo = c.lineinfo+1 -- zero size
f('VarSelf', 'self', lineinfo)
table.insert(vars, {'VarSelf', 'self', lineinfo, true})
end
while lx:peek().tag == 'Id' do
while true do
local n = lx:peek()
if not (n.tag == 'Id' or n.tag == 'Keyword' and n[1] == '...') then break end
local c = lx:next()
f('Var', c[1], c.lineinfo)
if c.tag == 'Id' then table.insert(vars, {'Var', c[1], c.lineinfo, true}) end
-- ignore '...' in this case
if lx:peek()[1] == ',' then lx:next() end
end
if lx:peek()[1] == ')' then lx:next() end
if lx:peek()[1] == ')' then
lx:next()
f('Function', name, pos or c.lineinfo, true)
end
for _, var in ipairs(vars) do f(unpack(var)) end
end
while 1 do
while true do
local c = lx:next()
-- Detect end of previous statement
@@ -87,7 +95,10 @@ function PARSE.parse_scope(lx, f, level)
cprev.tag == 'Number' or cprev.tag == 'String')
then
if scopes[#scopes].inside_until then scope_end(nil, c.lineinfo) end
f('Statement', c[1], c.lineinfo)
local scope = #scopes
if not scopes[scope].inside_table then scopes[scope].inside_local = nil end
f('Statement', c[1], c.lineinfo,
scopes[scope].inside_local or c[1] == 'local' or c[1] == 'function' or c[1] == 'end')
end
if c.tag == 'Eof' then break end
@@ -100,42 +111,48 @@ function PARSE.parse_scope(lx, f, level)
local c = lx:next(); assert(c[1] == 'function')
if lx:peek().tag == 'Id' then
c = lx:next()
f('Var', c[1], c.lineinfo)
if lx:peek()[1] == '(' then parse_function_list() end
f('Var', c[1], c.lineinfo, true)
if lx:peek()[1] == '(' then parse_function_list(nil, c[1], c.lineinfo) end
end
elseif c[1] == 'function' then
if lx:peek()[1] == '(' then -- inline function
parse_function_list()
elseif lx:peek().tag == 'Id' then -- function definition statement
c = lx:next(); assert(c.tag == 'Id')
f('Id', c[1], c.lineinfo)
local name = c[1]
local pos = c.lineinfo
f('Id', name, pos, true)
local has_self
while lx:peek()[1] ~= '(' and lx:peek().tag ~= 'Eof' do
c = lx:next()
name = name .. c[1]
if c.tag == 'Id' then
f('String', c[1], c.lineinfo)
f('String', c[1], c.lineinfo, true)
elseif c.tag == 'Keyword' and c[1] == ':' then
has_self = true
end
end
if lx:peek()[1] == '(' then parse_function_list(has_self) end
if lx:peek()[1] == '(' then parse_function_list(has_self, name, pos) end
end
elseif c[1] == 'local' and lx:peek().tag == 'Id' then
scopes[#scopes].inside_local = true
c = lx:next()
f('VarNext', c[1], c.lineinfo)
f('VarNext', c[1], c.lineinfo, true)
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
c = lx:next(); if lx:peek().tag ~= 'Id' then break end
c = lx:next()
f('VarNext', c[1], c.lineinfo)
f('VarNext', c[1], c.lineinfo, true)
end
elseif c[1] == 'for' and lx:peek().tag == 'Id' then
c = lx:next()
f('VarInside', c[1], c.lineinfo)
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
c = lx:next()
f('VarInside', c[1], c.lineinfo, true)
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
c = lx:next(); if lx:peek().tag ~= 'Id' then break end
c = lx:next()
f('VarInside', c[1], c.lineinfo)
f('VarInside', c[1], c.lineinfo, true)
end
elseif c[1] == 'goto' and lx:peek().tag == 'Id' then
lx:next()
elseif c[1] == 'do' then
scope_begin('do', c.lineinfo)
-- note: do/while/for statement scopes all begin at 'do'.
@@ -156,18 +173,40 @@ function PARSE.parse_scope(lx, f, level)
scopes[#scopes].inside_table = newval
end
elseif c.tag == 'Id' then
local scope = #scopes
local inside_local = scopes[scope].inside_local ~= nil
local inside_table = scopes[scope].inside_table
local cnext = lx:peek()
if cnext.tag == 'Keyword' and (cnext[1] == '(' or cnext[1] == '{')
or cnext.tag == 'String' then
f('FunctionCall', c[1], c.lineinfo)
f('FunctionCall', c[1], c.lineinfo, inside_local)
end
if scopes[#scopes].inside_table and cnext.tag == 'Keyword' and cnext[1] == '=' then
-- table field
f('String', c[1], c.lineinfo)
-- either this is inside a table or it continues from a comma,
-- which may be a field assignment, so assume it's in a table
if (inside_table or cprev[1] == ',') and cnext.tag == 'Keyword' and cnext[1] == '=' then
-- table field; table fields are tricky to handle during incremental
-- processing as "a = 1" may be either an assignment (in which case
-- 'a' is Id) or a field initialization (in which case it's a String).
-- Since it's not possible to decide between two cases in isolation,
-- this is not a good place to insert a break; instead, the break is
-- inserted at the location of the previous keyword, which allows
-- to properly handle those cases. The desired location of
-- the restart point is returned as the `nobreak` value.
f('String', c[1], c.lineinfo,
inside_local or cprev and cprev.tag == 'Keyword' and cprev.lineinfo)
elseif cprev.tag == 'Keyword' and (cprev[1] == ':' or cprev[1] == '.') then
f('String', c[1], c.lineinfo)
f('String', c[1], c.lineinfo, true)
else
f('Id', c[1], c.lineinfo)
f('Id', c[1], c.lineinfo, true)
-- this looks like the left side of (multi-variable) assignment
-- unless it's a part of `= var, field = value`, so skip if inside a table
if not inside_table and not (cprev and cprev.tag == 'Keyword' and cprev[1] == '=') then
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
local c = lx:next(); if lx:peek().tag ~= 'Id' then break end
c = lx:next()
f('Id', c[1], c.lineinfo, true)
end
end
end
end
@@ -203,7 +242,7 @@ function PARSE.parse_scope_resolve(lx, f, vars)
vars = vars or newscope({[0] = 0}, nil, 1)
vars[NEXT] = false -- vars that come into scope upon next statement
vars[INSIDE] = false -- vars that come into scope upon entering block
PARSE.parse_scope(lx, function(op, name, lineinfo)
PARSE.parse_scope(lx, function(op, name, lineinfo, nobreak)
-- in some (rare) cases VarNext can follow Statement event (which copies
-- vars[NEXT]). This may cause vars[0] to be `nil`, so default to 1.
local var = op:find("^Var") and
@@ -221,14 +260,9 @@ function PARSE.parse_scope_resolve(lx, f, vars)
vars = newscope(vars, name, lineinfo)
elseif op == 'EndScope' then
local mt = getmetatable(vars)
if mt == nil then
warn("'end' without opening block.", lineinfo)
else
vars = mt.__index
end
elseif op == 'Id' then
-- Just make callback
elseif op == 'String' or op == 'FunctionCall' then
if mt ~= nil then vars = mt.__index end
elseif op == 'Id'
or op == 'String' or op == 'FunctionCall' or op == 'Function' then
-- Just make callback
elseif op == 'Statement' then -- beginning of statement
-- Apply vars that come into scope upon beginning of statement.
@@ -240,7 +274,7 @@ function PARSE.parse_scope_resolve(lx, f, vars)
else
assert(false)
end
f(op, name, lineinfo, vars)
f(op, name, lineinfo, vars, nobreak)
end, vars[0])
end

View File

@@ -365,14 +365,14 @@ function M.get_keywords(ast, src)
-- Get position range [fpos,lpos] between subsequent children.
local fpos
if i == 0 then -- before first child
fpos = tostring(ast.lineinfo.first):match('|L(%d+)')
fpos = tonumber(tostring(ast.lineinfo.first):match('|L(%d+)'))
else
local last = oast[i].lineinfo.last; local c = last.comments
fpos = (c and #c > 0 and c[#c][3] or tostring(last):match('|L(%d+)')) + 1
end
local lpos
if j == #ast+1 then -- after last child
lpos = tostring(ast.lineinfo.last):match('|L(%d+)')
lpos = tonumber(tostring(ast.lineinfo.last):match('|L(%d+)'))
else
local first = oast[j].lineinfo.first; local c = first.comments
lpos = (c and #c > 0 and c[1][2] or tostring(first):match('|L(%d+)')) - 1
@@ -388,7 +388,6 @@ function M.get_keywords(ast, src)
if mfpos then
local mlpos = mlppos-1
if mlpos > lpos then mlpos = lpos end
--DEBUG('look', ast.tag, #ast,i,j,'*', mfpos, tok, mlppos, fpos, lpos, src:sub(fpos, fpos+5))
if mlpos >= mfpos then
list[#list+1] = mfpos
list[#list+1] = mlpos
@@ -424,7 +423,9 @@ function M.ast_to_tokenlist(top_ast, src)
if isterminal[ast.tag] then -- Extract terminal
local token = ast
if ast.lineinfo then
token.fpos, token.lpos, token.ast = tostring(ast.lineinfo.first):match('|L(%d+)'), tostring(ast.lineinfo.last):match('|L(%d+)'), ast
token.fpos = tonumber(tostring(ast.lineinfo.first):match('|L(%d+)'))
token.lpos = tonumber(tostring(ast.lineinfo.last):match('|L(%d+)'))
token.ast = ast
table.insert(tokens, token)
end
else -- Extract non-terminal
@@ -443,7 +444,9 @@ function M.ast_to_tokenlist(top_ast, src)
if not isseen[comment] then
comment.tag = 'Comment'
local token = comment
token.fpos, token.lpos, token.ast = comment[2], comment[3], comment
token.fpos = tonumber(tostring(comment.lineinfo.first):match('|L(%d+)'))
token.lpos = tonumber(tostring(comment.lineinfo.last):match('|L(%d+)'))
token.ast = comment
table.insert(tokens, token)
isseen[comment] = true
end

View File

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

View File

@@ -169,6 +169,12 @@ return function(M)
{ "/", prec = 70, builder = opf2 "div" },
{ "%", prec = 70, builder = opf2 "mod" },
{ "^", prec = 90, builder = opf2 "pow", assoc = "right" },
{ "//", prec = 70, builder = opf2 "idiv" },
{ "&", prec = 36, builder = opf2 "band" },
{ "|", prec = 32, builder = opf2 "bor" },
{ "~", prec = 34, builder = opf2 "bxor" },
{ "<<", prec = 38, builder = opf2 "shl" },
{ ">>", prec = 38, builder = opf2 "shr" },
{ "..", prec = 40, builder = opf2 "concat", assoc = "right" },
{ "==", prec = 30, builder = opf2 "eq" },
{ "~=", prec = 30, builder = op_ne },
@@ -183,6 +189,7 @@ return function(M)
name = "expr prefix op",
{ "not", prec = 80, builder = opf1 "not" },
{ "#", prec = 80, builder = opf1 "len" },
{ "~", prec = 80, builder = opf2 "bnot" },
{ "-", prec = 80, builder = opf1 "unm" } },
suffix = {

View File

@@ -34,7 +34,8 @@ return function()
"in", "local", "nil", "not", "or", "repeat",
"return", "then", "true", "until", "while",
"...", "..", "==", ">=", "<=", "~=",
"::", -- Lua5,2
"<<", ">>", "//", -- Lua5.3
"::", -- Lua5.2
"+{", "-{" } -- Metalua
for _, w in ipairs(keywords) do lexer :add (w) end

View File

@@ -263,6 +263,10 @@ return function(M)
{ "local", _M.local_stat_parser, builder = unpack },
{ "return", return_expr_list_parser, builder =
function(x) x[1].tag='Return'; return x[1] end },
{ "goto", _M.id, builder =
function(x) x[1].tag='Goto'; return x[1] end },
{ "::", _M.id, "::", builder =
function(x) x[1].tag='Label'; return x[1] end },
{ "break", builder = function() return { tag="Break" } end },
{ "-{", gg.future(M, 'meta').splice_content, "}", builder = unpack },
{ "if", gg.nonempty(elseifs_parser), gg.onkeyword{ "else", M.block }, "end",

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

@@ -1,6 +1,6 @@
--
-- MobDebug 0.60
-- Copyright 2011-14 Paul Kulchenko
-- MobDebug -- Lua remote debugger
-- Copyright 2011-15 Paul Kulchenko
-- Based on RemDebug 1.0 Copyright Kepler Project 2005
--
@@ -10,6 +10,7 @@ local io = io or require "io"
local table = table or require "table"
local string = string or require "string"
local coroutine = coroutine or require "coroutine"
local debug = require "debug"
-- protect require "os" as it may fail on embedded systems without os module
local os = os or (function(module)
local ok, res = pcall(require, module)
@@ -18,12 +19,13 @@ end)("os")
local mobdebug = {
_NAME = "mobdebug",
_VERSION = 0.60,
_VERSION = 0.628,
_COPYRIGHT = "Paul Kulchenko",
_DESCRIPTION = "Mobile Remote Debugger for the Lua programming language",
port = os and os.getenv and tonumber((os.getenv("MOBDEBUG_PORT"))) or 8172,
checkcount = 200,
yieldtimeout = 0.02,
yieldtimeout = 0.02, -- yield timeout (s)
connecttimeout = 2, -- connect timeout (s)
}
local error = error
@@ -35,6 +37,7 @@ local setmetatable = setmetatable
local tonumber = tonumber
local unpack = table.unpack or unpack
local rawget = rawget
local gsub, sub, find = string.gsub, string.sub, string.find
-- if strict.lua is used, then need to avoid referencing some global
-- variables, as they can be undefined;
@@ -59,8 +62,9 @@ local corocreate = ngx and coroutine._create or coroutine.create
local cororesume = ngx and coroutine._resume or coroutine.resume
local coroyield = ngx and coroutine._yield or coroutine.yield
local corostatus = ngx and coroutine._status or coroutine.status
local corowrap = coroutine.wrap
if not setfenv then -- Lua 5.2
if not setfenv then -- Lua 5.2+
-- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html
-- this assumes f is a function
local function findenv(f)
@@ -95,7 +99,6 @@ local iscasepreserving = win or (mac and io.open('/library') ~= nil)
if jit and jit.off then jit.off() end
local socket = require "socket"
local debug = require "debug"
local coro_debugger
local coro_debugee
local coroutines = {}; setmetatable(coroutines, {__mode = "k"}) -- "weak" keys
@@ -123,34 +126,36 @@ local debugee = function ()
for _ = 1, 10 do a = a + 1 end
error(deferror)
end
local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
local function q(s) return string.gsub(s, '([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
local serpent = (function() ---- include Serpent module for serialization
local n, v = "serpent", 0.272 -- (C) 2012-13 Paul Kulchenko; MIT License
local n, v = "serpent", 0.285 -- (C) 2012-15 Paul Kulchenko; MIT License
local c, d = "Paul Kulchenko", "Lua serializer and pretty printer"
local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'}
local badtype = {thread = true, userdata = true, cdata = true}
local getmetatable = debug and debug.getmetatable or getmetatable
local keyword, globals, G = {}, {}, (_G or _ENV)
for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false',
'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat',
'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end
for k,v in pairs(G) do globals[v] = k end -- build func to name mapping
for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do
for k,v in pairs(G[g] or {}) do globals[v] = g..'.'..k end end
for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end
local function s(t, opts)
local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum
local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge
local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge)
local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge)
local numformat = opts.numformat or "%.17g"
local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0
local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)",
-- tostring(val) is needed because __tostring may return a non-string value
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return syms[s] end)) end
local function safestr(s) return type(s) == "number" and (huge and snum[tostring(s)] or s)
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end
local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s))
or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026
or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..tostring(s)..']]' or '' end
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end
local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal
and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end
local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r']
@@ -160,7 +165,7 @@ local function s(t, opts)
return (path or '')..(plain and path and '.' or '')..safe, safe end
local alphanumsort = type(opts.sortkeys) == 'function' and opts.sortkeys or function(k, o, n) -- k=keys, o=originaltable, n=padding
local maxn, to = tonumber(n) or 12, {number = 'a', string = 'b'}
local function padnum(d) return ("%0"..maxn.."d"):format(d) end
local function padnum(d) return ("%0"..tostring(maxn).."d"):format(tonumber(d)) end
table.sort(k, function(a,b)
-- sort numeric keys first: k[key] is not nil for numerical keys
return (k[a] ~= nil and 0 or to[type(a)] or 'z')..(tostring(a):gsub("%d+",padnum))
@@ -174,7 +179,9 @@ local function s(t, opts)
if seen[t] then -- already seen this element
sref[#sref+1] = spath..space..'='..space..seen[t]
return tag..'nil'..comment('ref', level) end
if type(mt) == 'table' and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
-- protect from those cases where __tostring may fail
if type(mt) == 'table' and pcall(function() return mt.__tostring and mt.__tostring(t) end)
and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
seen[t] = insref or spath
if mt.__serialize then t = mt.__serialize(t) else t = tostring(t) end
ttype = type(t) end -- new value falls through to be serialized
@@ -194,6 +201,7 @@ local function s(t, opts)
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
or opts.keyallow and not opts.keyallow[key]
or opts.keyignore and opts.keyignore[key]
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
or sparse and value == nil then -- skipping nils; do nothing
elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then
@@ -202,8 +210,8 @@ local function s(t, opts)
local sname = safename(iname, gensym(key)) -- iname is table for local variables
sref[#sref] = val2str(key,sname,indent,sname,iname,true) end
sref[#sref+1] = 'placeholder'
local path = seen[t]..'['..(seen[key] or globals[key] or gensym(key))..']'
sref[#sref] = path..space..'='..space..(seen[value] or val2str(value,nil,indent,path))
local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']'
sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path))
else
out[#out+1] = val2str(value,key,indent,insref,seen[t],plainindex,level+1)
end
@@ -232,20 +240,16 @@ local function s(t, opts)
end
local function deserialize(data, opts)
local f, res = (loadstring or load)('return '..data)
if not f then f, res = (loadstring or load)(data) end
local env = (opts and opts.safe == false) and G
or setmetatable({}, {
__index = function(t,k) return t end,
__call = function(t,...) error("cannot call functions") end
})
local f, res = (loadstring or load)('return '..data, nil, nil, env)
if not f then f, res = (loadstring or load)(data, nil, nil, env) end
if not f then return f, res end
if opts and opts.safe == false then return pcall(f) end
local count, thread = 0, coroutine.running()
local h, m, c = debug.gethook(thread)
debug.sethook(function (e, l) count = count + 1
if count >= 3 then error("cannot call functions") end
end, "c")
local res = {pcall(f)}
count = 0 -- set again, otherwise it's tripped on the next sethook
debug.sethook(thread, h, m, c)
return (table.unpack or unpack)(res)
if setfenv then setfenv(f, env) end
return pcall(f)
end
local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end
@@ -277,12 +281,22 @@ local function stack(start)
local func = debug.getinfo(f, "f").func
local i = 1
local locals = {}
-- get locals
while true do
local name, value = debug.getlocal(f, i)
if not name then break end
if string.sub(name, 1, 1) ~= '(' then locals[name] = {value, tostring(value)} end
i = i + 1
end
-- get varargs (these use negative indices)
i = 1
while true do
local name, value = debug.getlocal(f, -i)
if not name then break end
locals[name:gsub("%)$"," "..i..")")] = {value, tostring(value)}
i = i + 1
end
-- get upvalues
i = 1
local ups = {}
while func and true do -- check for func as it may be nil for tail calls
@@ -326,6 +340,7 @@ end
local function remove_breakpoint(file, line)
if file == '-' and lastfile then file = lastfile
elseif file == '*' and line == 0 then breakpoints = {}
elseif iscasepreserving then file = string.lower(file) end
if breakpoints[line] then breakpoints[line][file] = nil end
end
@@ -565,26 +580,26 @@ local function debug_hook(event, line)
-- Unfortunately, there is no reliable/quick way to figure out
-- what is the filename and what is the source code.
-- The following will work if the supplied filename uses Unix path.
if file:find("^@") then
file = file:gsub("^@", ""):gsub("\\", "/")
if find(file, "^@") then
file = gsub(gsub(file, "^@", ""), "\\", "/")
-- need this conversion to be applied to relative and absolute
-- file names as you may write "require 'Foo'" to
-- load "foo.lua" (on a case insensitive file system) and breakpoints
-- set on foo.lua will not work if not converted to the same case.
if iscasepreserving then file = string.lower(file) end
if file:find("%./") == 1 then file = file:sub(3)
else file = file:gsub("^"..q(basedir), "") end
if find(file, "%./") == 1 then file = sub(file, 3)
else file = gsub(file, "^"..q(basedir), "") end
-- some file systems allow newlines in file names; remove these.
file = file:gsub("\n", ' ')
file = gsub(file, "\n", ' ')
else
-- this is either a file name coming from loadstring("chunk", "file"),
-- or the actual source code that needs to be serialized (as it may
-- include newlines); assume it's a file name if it's all on one line.
if file:find("[\r\n]") then
if find(file, "[\r\n]") then
file = mobdebug.line(file)
else
if iscasepreserving then file = string.lower(file) end
file = file:gsub("\\", "/"):gsub(file:find("^%./") and "^%./" or "^"..q(basedir), "")
file = gsub(gsub(file, "\\", "/"), find(file, "^%./") and "^%./" or "^"..q(basedir), "")
end
end
@@ -640,7 +655,8 @@ local function debug_hook(event, line)
-- need to recheck once more as resume after 'stack' command may
-- return something else (for example, 'exit'), which needs to be handled
if status and res and res ~= 'stack' then
if abort == nil and res == "exit" then os.exit(1, true); return end
if not abort and res == "exit" then mobdebug.onexit(1, true); return end
if not abort and res == "done" then mobdebug.done(); return end
abort = res
-- only abort if safe; if not, there is another (earlier) check inside
-- debug_hook, which will abort execution at the first safe opportunity
@@ -671,7 +687,7 @@ local function stringify_results(status, ...)
end
local function isrunning()
return coro_debugger and corostatus(coro_debugger) == 'suspended'
return coro_debugger and (corostatus(coro_debugger) == 'suspended' or corostatus(coro_debugger) == 'running')
end
-- this is a function that removes all hooks and closes the socket to
@@ -731,7 +747,7 @@ local function debugger_loop(sev, svars, sfile, sline)
elseif mobdebug.yield then mobdebug.yield()
end
elseif not line and err == "closed" then
error("Debugger connection unexpectedly closed", 0)
error("Debugger connection closed", 0)
else
-- if there is something in the pending buffer, prepend it to the line
if buf then line = buf .. line; buf = nil end
@@ -766,10 +782,12 @@ local function debugger_loop(sev, svars, sfile, sline)
status, res = stringify_results(pcall(func))
end
if status then
server:send("200 OK " .. #res .. "\n")
server:send("200 OK " .. tostring(#res) .. "\n")
server:send(res)
else
server:send("401 Error in Expression " .. #res .. "\n")
-- fix error if not set (for example, when loadstring is not present)
if not res then res = "Unknown error" end
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
server:send(res)
end
else
@@ -782,7 +800,7 @@ local function debugger_loop(sev, svars, sfile, sline)
if abort == nil then -- no LOAD/RELOAD allowed inside start()
if size > 0 then server:receive(size) end
if sfile and sline then
server:send("201 Started " .. sfile .. " " .. sline .. "\n")
server:send("201 Started " .. sfile .. " " .. tostring(sline) .. "\n")
else
server:send("200 OK 0\n")
end
@@ -806,7 +824,7 @@ local function debugger_loop(sev, svars, sfile, sline)
debugee = func
coroyield("load")
else
server:send("401 Error in Expression " .. #res .. "\n")
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
server:send(res)
end
else
@@ -822,9 +840,9 @@ local function debugger_loop(sev, svars, sfile, sline)
watchescnt = watchescnt + 1
local newidx = #watches + 1
watches[newidx] = func
server:send("200 OK " .. newidx .. "\n")
server:send("200 OK " .. tostring(newidx) .. "\n")
else
server:send("401 Error in Expression " .. #res .. "\n")
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
server:send(res)
end
else
@@ -846,13 +864,13 @@ local function debugger_loop(sev, svars, sfile, sline)
local ev, vars, file, line, idx_watch = coroyield()
eval_env = vars
if ev == events.BREAK then
server:send("202 Paused " .. file .. " " .. line .. "\n")
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
elseif ev == events.WATCH then
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
elseif ev == events.RESTART then
-- nothing to do
else
server:send("401 Error in Execution " .. #file .. "\n")
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
server:send(file)
end
elseif command == "STEP" then
@@ -862,13 +880,13 @@ local function debugger_loop(sev, svars, sfile, sline)
local ev, vars, file, line, idx_watch = coroyield()
eval_env = vars
if ev == events.BREAK then
server:send("202 Paused " .. file .. " " .. line .. "\n")
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
elseif ev == events.WATCH then
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
elseif ev == events.RESTART then
-- nothing to do
else
server:send("401 Error in Execution " .. #file .. "\n")
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
server:send(file)
end
elseif command == "OVER" or command == "OUT" then
@@ -883,13 +901,13 @@ local function debugger_loop(sev, svars, sfile, sline)
local ev, vars, file, line, idx_watch = coroyield()
eval_env = vars
if ev == events.BREAK then
server:send("202 Paused " .. file .. " " .. line .. "\n")
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
elseif ev == events.WATCH then
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
elseif ev == events.RESTART then
-- nothing to do
else
server:send("401 Error in Execution " .. #file .. "\n")
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
server:send(file)
end
elseif command == "BASEDIR" then
@@ -905,8 +923,7 @@ local function debugger_loop(sev, svars, sfile, sline)
elseif command == "SUSPEND" then
-- do nothing; it already fulfilled its role
elseif command == "DONE" then
server:send("200 OK\n")
done()
coroyield("done")
return -- done with all the debugging
elseif command == "STACK" then
-- first check if we can execute the stack command
@@ -918,14 +935,14 @@ local function debugger_loop(sev, svars, sfile, sline)
ev, vars = coroyield("stack")
end
if ev and ev ~= events.STACK then
server:send("401 Error in Execution " .. #vars .. "\n")
server:send("401 Error in Execution " .. tostring(#vars) .. "\n")
server:send(vars)
else
local ok, res = pcall(mobdebug.dump, vars, {nocode = true, sparse = false})
if ok then
server:send("200 OK " .. res .. "\n")
server:send("200 OK " .. tostring(res) .. "\n")
else
server:send("401 Error in Execution " .. #res .. "\n")
server:send("401 Error in Execution " .. tostring(#res) .. "\n")
server:send(res)
end
end
@@ -934,7 +951,7 @@ local function debugger_loop(sev, svars, sfile, sline)
if stream and mode and stream == "stdout" then
-- assign "print" in the global environment
local default = mode == 'd'
genv.print = default and iobase.print or coroutine.wrap(function()
genv.print = default and iobase.print or corowrap(function()
-- wrapping into coroutine.wrap protects this function from
-- being stepped through in the debugger.
-- don't use vararg (...) as it adds a reference for its values,
@@ -945,7 +962,7 @@ local function debugger_loop(sev, svars, sfile, sline)
for n = 1, #tbl do
tbl[n] = select(2, pcall(mobdebug.line, tbl[n], {nocode = true, comment = false})) end
local file = table.concat(tbl, "\t").."\n"
server:send("204 Output " .. stream .. " " .. #file .. "\n" .. file)
server:send("204 Output " .. stream .. " " .. tostring(#file) .. "\n" .. file)
end
end)
if not default then genv.print() end -- "fake" print to start printing loop
@@ -963,7 +980,15 @@ local function debugger_loop(sev, svars, sfile, sline)
end
local function connect(controller_host, controller_port)
return (socket.connect4 or socket.connect)(controller_host, controller_port)
local sock, err = socket.tcp()
if not sock then return nil, err end
if sock.settimeout then sock:settimeout(mobdebug.connecttimeout) end
local res, err = sock:connect(controller_host, tostring(controller_port))
if sock.settimeout then sock:settimeout() end
if not res then return nil, err end
return sock
end
local lasthost, lastport
@@ -980,7 +1005,7 @@ local function start(controller_host, controller_port)
controller_port = lastport or mobdebug.port
local err
server, err = (socket.connect4 or socket.connect)(controller_host, controller_port)
server, err = mobdebug.connect(controller_host, controller_port)
if server then
-- correct stack depth which already has some calls on it
-- so it doesn't go into negative when those calls return
@@ -1034,11 +1059,11 @@ local function controller(controller_host, controller_port, scratchpad)
local exitonerror = not scratchpad
local err
server, err = (socket.connect4 or socket.connect)(controller_host, controller_port)
server, err = mobdebug.connect(controller_host, controller_port)
if server then
local function report(trace, err)
local msg = err .. "\n" .. trace
server:send("401 Error in Execution " .. #msg .. "\n")
server:send("401 Error in Execution " .. tostring(#msg) .. "\n")
server:send(msg)
return err
end
@@ -1062,11 +1087,13 @@ local function controller(controller_host, controller_port, scratchpad)
else
if status then -- normal execution is done
break
elseif err and not tostring(err):find(deferror) then
elseif err and not string.find(tostring(err), deferror) then
-- report the error back
-- err is not necessarily a string, so convert to string to report
report(debug.traceback(coro_debugee), tostring(err))
if exitonerror then break end
-- check if the debugging is done (coro_debugger is nil)
if not coro_debugger then break end
-- resume once more to clear the response the debugger wants to send
-- need to use capture_vars(2) as three would be the level of
-- the caller for controller(), but because of the tail call,
@@ -1153,8 +1180,7 @@ local function handle(params, client, options)
local breakpoint = client:receive()
if not breakpoint then
print("Program finished")
os.exit(0, true)
return -- use return here for those cases where os.exit() is not wanted
return
end
local _, _, status = string.find(breakpoint, "^(%d+)")
if status == "200" then
@@ -1183,24 +1209,17 @@ local function handle(params, client, options)
if size then
local msg = client:receive(tonumber(size))
print("Error in remote application: " .. msg)
os.exit(1, true)
return nil, nil, msg -- use return here for those cases where os.exit() is not wanted
return nil, nil, msg
end
else
print("Unknown error")
os.exit(1, true)
-- use return here for those cases where os.exit() is not wanted
return nil, nil, "Debugger error: unexpected response '" .. breakpoint .. "'"
end
if done then break end
end
elseif command == "done" then
client:send(string.upper(command) .. "\n")
if client:receive() ~= "200 OK" then
print("Unknown error")
os.exit(1, true)
return nil, nil, "Debugger error: unexpected response after 'done'"
end
-- no response is expected
elseif command == "setb" or command == "asetb" then
_, _, _, file, line = string.find(params, "^([a-z]+)%s+(.-)%s+(%d+)%s*$")
if file and line then
@@ -1257,15 +1276,12 @@ local function handle(params, client, options)
print("Invalid command")
end
elseif command == "delallb" then
for line, breaks in pairs(breakpoints) do
for file, _ in pairs(breaks) do
client:send("DELB " .. file .. " " .. line .. "\n")
if client:receive() == "200 OK" then
remove_breakpoint(file, line)
else
print("Error: breakpoint at file " .. file .. " line " .. line .. " not removed")
end
end
local file, line = "*", 0
client:send("DELB " .. file .. " " .. tostring(line) .. "\n")
if client:receive() == "200 OK" then
remove_breakpoint(file, line)
else
print("Error: all breakpoints not removed")
end
elseif command == "delw" then
local _, _, index = string.find(params, "^[a-z]+%s+(%d+)%s*$")
@@ -1306,7 +1322,7 @@ local function handle(params, client, options)
if not file then
_, _, file, lines = string.find(exp, "^(%S+)%s+(.+)")
end
client:send("LOAD " .. #lines .. " " .. file .. "\n")
client:send("LOAD " .. tostring(#lines) .. " " .. file .. "\n")
client:send(lines)
else
local file = io.open(exp, "r")
@@ -1324,7 +1340,7 @@ local function handle(params, client, options)
local file = string.gsub(exp, "\\", "/") -- convert slash
file = removebasedir(file, basedir)
client:send("LOAD " .. #lines .. " " .. file .. "\n")
client:send("LOAD " .. tostring(#lines) .. " " .. file .. "\n")
if #lines > 0 then client:send(lines) end
end
while true do
@@ -1451,7 +1467,11 @@ local function handle(params, client, options)
basedir = dir
client:send("BASEDIR "..(remdir or dir).."\n")
local resp = client:receive()
local resp, err = client:receive()
if not resp then
print("Unknown error: "..err)
return nil, nil, "Debugger connection closed"
end
local _, _, status = string.find(resp, "^(%d+)%s+%w+%s*$")
if status == "200" then
print("New base directory is " .. basedir)
@@ -1486,7 +1506,9 @@ local function handle(params, client, options)
print("exit -- exits debugger and the application")
else
local _, _, spaces = string.find(params, "^(%s*)$")
if not spaces then
if spaces then
return nil, nil, "Empty command"
else
print("Invalid command")
return nil, nil, "Invalid command"
end
@@ -1525,9 +1547,11 @@ local function listen(host, port)
while true do
io.write("> ")
local line = io.read("*line")
handle(line, client)
local file, line, err = handle(io.read("*line"), client)
if not file and not err then break end -- completed debugging
end
client:close()
end
local cocreate
@@ -1579,9 +1603,7 @@ mobdebug.coro = coro
mobdebug.done = done
mobdebug.pause = function() step_into = true end
mobdebug.yield = nil -- callback
-- this is needed to make "require 'modebug'" to work when mobdebug
-- module is loaded manually
package.loaded.mobdebug = mobdebug
mobdebug.onexit = os and os.exit or done
mobdebug.basedir = function(b) if b then basedir = b end return basedir end
return mobdebug

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,14 +32,20 @@ local events = {
onEditorKeyDown = function(self, editor, event) end, -- return false
onEditorCharAdded = function(self, editor, event) end, -- return false
onEditorUserlistSelection = function(self, editor, event) end, -- return false
onEditorUpdateUI = function(self, editor, event) end, -- return false
onEditorPainted = function(self, editor, event) end, -- return false
onEditorMarkerUpdate = function(self, editor, marker, line, value) end,
onEditorUpdateUI = function(self, editor, event) end,
onEditorPainted = function(self, editor, event) end,
onEditorCallTip = function(self, editor, tip, value, eval) end, -- return false
onFiletreeActivate = function(self, tree, event, item) end, -- return false
onFiletreeLDown = function(self, tree, event, item) end,
onFiletreeRDown = function(self, tree, event, item) end,
onMenuEditor = function(self, menu, editor, event) end,
onMenuEditorTab = function(self, menu, notebook, event, index) end,
onMenuOutput = function(self, menu, editor, event) end,
onMenuConsole = function(self, menu, editor, event) end,
onMenuFiletree = function(self, menu, tree, event) end,
onMenuOutline = function(self, menu, tree, event) end,
onMenuWatch = function(self, menu, tree, event) end,
onProjectPreLoad = function(self, project) end, -- before project is changed
onProjectLoad = function(self, project) end, -- after project is changed
onProjectClose = function(self, project) end,
@@ -49,11 +57,13 @@ local events = {
onAppFocusSet = function(self, app) end,
onAppLoad = function(self, app) end,
onAppClose = function(self, app) end,
onAppDone = function(self, app) end, -- the last event right before exiting
}
--[[ Uncomment this to see event names printed in the Output window
local skipEvents = {onIdle = true, onEditorPainted = true, onEditorUpdateUI = true}
for k in pairs(events) do
if k:find("^on") then
if not skipEvents[k] then
P[k] = k:find("^onEditor")
and function(self, ed)
-- document can be empty for newly added documents
@@ -107,11 +117,11 @@ local events = {
end
P.onEditorPreSave = function(self, editor, filepath)
if filepath:find("%.txt$") then
if filepath and filepath:find("%.txt$") then
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", "Aborted saving a .txt file")
return false
else
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", filepath)
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", filepath or "New file")
end
end

34
spec/cbase.lua Normal file
View File

@@ -0,0 +1,34 @@
function CMarkSymbols(code, pos, vars)
local idtmpl = "[A-Za-z_][A-Za-z0-9_ ]*"
local funcdeftmpl = "("..idtmpl.."%s+%*?"..idtmpl..")%s*%(([A-Za-z0-9_ %*,]*)%)%s*%{"
local isfndef = function(str, pos)
local s,e,pref,cap
while true do
s,e,pref,cap,parms = str:find("^(%s*)"..funcdeftmpl, pos)
if (not s) then
s,e,pref,cap,parms = str:find("([\r\n]%s*)"..funcdeftmpl, pos)
end
-- skip strange parameters and things of `else if ()` variety
if parms and #parms > 0 and not parms:find(idtmpl)
or cap and cap:find("%sif%s*$") then
pos = s+#pref+#cap+#parms
else
break
end
end
if s then return s+#pref,s+#pref+#cap-1,cap end
end
return coroutine.wrap(function()
-- return a dummy token to produce faster result for quick typing
coroutine.yield("String", "dummy", 1, {})
while true do
local fpos, lpos, name = isfndef(code, pos)
if not fpos then return end
coroutine.yield("Function", name, fpos, {}, 1)
pos = fpos + #name
end
end)
end
return nil -- not a real spec

View File

@@ -3,6 +3,7 @@
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"cg","cgh","cgfx","cgfxh",},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -14,15 +15,7 @@ return {
return string.find(str, funccall .. "%(")
end,
isfndef = function(str)
local l
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
if (not s) then
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
end
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
return s,e,cap,l
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,},

View File

@@ -3,6 +3,7 @@
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"cpp", "c", "hpp", "h"},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -14,6 +15,8 @@ return {
return string.find(str, funccall .. "%(")
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,},

View File

@@ -3,6 +3,7 @@
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"glsl","vert","frag","geom","cont","eval", "glslv", "glslf"},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -14,15 +15,7 @@ return {
return string.find(str, funccall .. "%(")
end,
isfndef = function(str)
local l
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
if (not s) then
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
end
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
return s,e,cap,l
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,},
@@ -90,6 +83,7 @@ return {
local_size_x local_size_y local_size_z
gl_BaseVertexARB gl_BaseInstanceARB gl_DrawIDARB
bindless_sampler bound_sampler bindless_image bound_image early_fragment_tests
gl_HelperInvocation gl_CullDistance
coherent volatile restrict readonly writeonly
image1D image2D image3D image2DRect imageCube imageBuffer image1DArray image2DArray imageCubeArray image2DMS image2DMSArray
@@ -120,16 +114,17 @@ return {
uaddCarry usubBorrow umulExtended imulExtended
bitfeldExtract bitfieldInsert bitfeldReverse bitCount
findLSB findMSB
dFdx dFdy fwidth
dFdx dFdy fwidth dFdxFine dFdyFine fwidthFine dFdxCoarse dFdyCoarse fwidthCoarse
interpolateAtCentroid interpolateAtSample interpolateAtOffset
noise1 noise2 noise3 noise4
EmitStreamVertex EndStreamPrimitive EmitVertex EndPrimitive
barrier
textureSize textureQueryLod texture textureOffset textureProj
textureSize textureSamples textureQueryLod texture textureOffset textureProj
textureLod textureProjOffset textureLodOffset
texelFetchOffset texelFetch textureProjLod textureProjLodOffset
textureGrad textureGradOffset textureProjGrad textureProjGradOffset
textureGather textureGatherOffset
texture2D texture1D texture3D textureCube texture2DRect
texture1DProj texture1DLod texture1DProjLod
texture2DProj texture2DLod texture2DProjLod
@@ -158,7 +153,7 @@ return {
imageAtomicAdd imageAtomicMin imageAtomicMax
imageAtomicIncWrap imageAtomicDecWrap imageAtomicAnd
imageAtomicOr imageAtomixXor imageAtomicExchange
imageAtomicCompSwap imageSize
imageAtomicCompSwap imageSize imageSamples
memoryBarrier groupMemoryBarrier memoryBarrierAtomicCounter memoryBarrierShared memoryBarrierBuffer memoryBarrierImage

View File

@@ -3,6 +3,7 @@
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"hlsl","fx","fxh","usf",},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -14,15 +15,7 @@ return {
return string.find(str, funccall .. "%(")
end,
isfndef = function(str)
local l
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
if (not s) then
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
end
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
return s,e,cap,l
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,},

View File

@@ -2,7 +2,6 @@
---------------------------------------------------------
local funcdef = "([A-Za-z_][A-Za-z0-9_%.%:]*)%s*"
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
local decindent = {
['else'] = true, ['elseif'] = true, ['until'] = true, ['end'] = true}
local incindent = {
@@ -25,19 +24,32 @@ local function isfndef(str)
end
return s,e,cap,l
end
local q = EscapeMagic
local function ldoc(tx, typepatt)
local varname = "([%w_]+)"
-- <type> == ?string, ?|T1|T2
-- anything that follows optional "|..." is ignored
local typename = "%??"..typepatt
-- @tparam[...] <type> <paramname>
-- @param[type=<type>] <paramname>
-- @string[...] <paramname>; not handled
local t, v = tx:match("--%s*@tparam%b[]%s+"..typename.."%s+"..varname)
if not t then -- try without optional [...] part
t, v = tx:match("--%s*@tparam%s+"..typename.."%s+"..varname)
end
if not t then
t, v = tx:match("--%s*@param%s*%[type="..typename.."%]%s+"..varname)
end
return t, v
end
return {
exts = {"lua", "rockspec", "wlua"},
lexer = wxstc.wxSTC_LEX_LUA,
apitype = "lua",
linecomment = "--",
sep = ".:",
isfncall = function(str)
return string.find(str, funccall .. "[%({'\"]")
end,
isfndef = isfndef,
isdecindent = function(str)
str = str:gsub('%-%-%[=*%[.*%]=*%]',''):gsub('%-%-.*','')
-- this handles three different cases:
@@ -58,12 +70,21 @@ return {
return match and 1 or 0, match and term and 1 or 0
end,
isincindent = function(str)
str = (str:gsub('%-%-%[=*%[.*%]=*%]','')
:gsub("'.-\\'","'"):gsub("'.-'","")
:gsub('".-\\"','"'):gsub('".-"','')
-- remove "long" comments and escaped slashes (to process \' and \" below)
str = str:gsub('%-%-%[=*%[.-%]=*%]',''):gsub('\\[\\\'"]','')
while true do
local num, sep = nil, str:match("['\"]")
if not sep then break end
str, num = str:gsub(sep..".-\\"..sep,sep):gsub(sep..".-"..sep,"")
if num == 0 then break end
end
str = (str
:gsub('%[=*%[.-%]=*%]','') -- remove long strings
:gsub('%[=*%[.*','') -- remove partial long strings
:gsub('%-%-.*','') -- strip comments after strings are processed
:gsub("%b()","()") -- remove all function calls
)
local term = str:match("^%s*(%w+)%W*")
local terminc = term and incindent[term] and 1 or 0
-- fix 'if' not terminated with 'then'
@@ -86,14 +107,15 @@ return {
return opened - closed + func + terminc - ended
end,
markvars = function(code, pos, vars)
marksymbols = function(code, pos, vars)
local PARSE = require 'lua_parser_loose'
local LEX = require 'lua_lexer_loose'
local lx = LEX.lexc(code, nil, pos)
return coroutine.wrap(function()
local varnext = {}
PARSE.parse_scope_resolve(lx, function(op, name, lineinfo, vars)
PARSE.parse_scope_resolve(lx, function(op, name, lineinfo, vars, nobreak)
if not(op == 'Id' or op == 'Statement' or op == 'Var'
or op == 'Function' or op == 'String'
or op == 'VarNext' or op == 'VarInside' or op == 'VarSelf'
or op == 'FunctionCall' or op == 'Scope' or op == 'EndScope') then
return end -- "normal" return; not interested in other events
@@ -105,117 +127,94 @@ return {
for _, token in pairs(varnext) do coroutine.yield(unpack(token)) end
varnext = {}
elseif op == 'VarNext' or op == 'VarInside' then
table.insert(varnext, {'Var', name, lineinfo, vars, at})
table.insert(varnext, {'Var', name, lineinfo, vars, at, nobreak})
end
coroutine.yield(op, name, lineinfo, vars, at)
coroutine.yield(op, name, lineinfo, vars, op == 'Function' and at-1 or at, nobreak)
end, vars)
end)
end,
typeassigns = function(editor)
local line = editor:GetCurrentLine()-1
local maxlines = 48 -- scan up to this many lines back
local scopestart = {"if", "do", "while", "function", "local%s+function", "for", "else", "elseif"}
local scopeend = {"end"}
local iscomment = editor.spec.iscomment
local assigns = {}
-- iterate up until a line starts with scopestart
-- always ignore lines whose first symbol is styled as comment
local endline = line
while (line > math.max(endline-maxlines, 0)) do
local ls = editor:PositionFromLine(line)
local s = bit.band(editor:GetStyleAt(ls),31)
if (not iscomment[s]) then
local tx = editor:GetLine(line)
local sstart, send
for _, v in ipairs(scopestart) do
if (tx:match("^%s*"..v.."%f[^%w]")) then sstart = true end
end
for _, v in ipairs(scopeend) do
if (tx:match("%f[%w]"..v.."%s*$")) then send = true end
end
-- if the scope starts, but doesn't end on one line, stop searching
if sstart and not send then break end
end
line = line -1
end
local endline = editor:GetCurrentLine()-1
local line = math.max(endline-maxlines, 0)
while (line <= endline) do
local ls = editor:PositionFromLine(line)
local s = bit.band(editor:GetStyleAt(ls),31)
local tx = editor:GetLine(line) --= string
local s = bit.band(editor:GetStyleAt(ls + #tx:match("^%s*") + 2),31)
if (not iscomment[s]) then
local tx = editor:GetLine(line) --= string
-- check for assignments
local sep = editor.spec.sep
local varname = "([%w_][%w_"..q(sep:sub(1,1)).."]*)"
local identifier = "([%w_][%w_"..q(sep).."%s]*)"
-- check for assignments
local sep = editor.spec.sep
local varname = "([%w_][%w_"..q(sep:sub(1,1)).."]*)"
local identifier = "([%w_][%w_"..q(sep).."%s]*)"
-- special hint
local typ, var = tx:match("%s*%-%-=%s*"..varname.."%s+"..identifier)
local ldoctype, ldocvar = ldoc(tx, varname)
if var and typ then
assigns[var] = typ:gsub("%s","")
elseif ldoctype and ldocvar then
assigns[ldocvar] = ldoctype
elseif not iscomment[s] then
-- real assignments
local var,typ = tx:match("%s*"..identifier.."%s*=%s*([^;]+)")
-- special hint
local typ,var = tx:match("%s*%-%-=%s*"..varname.."%s+"..identifier)
if (var and typ) then
typ = typ:gsub("%s","")
assigns[var] = typ
else
-- real assignments
local var,typ = tx:match("%s*"..identifier.."%s*=%s*([^;]+)")
var = var and var:gsub("local","")
var = var and var:gsub("%s","")
typ = typ and typ
:gsub("%b()","")
:gsub("%b{}","")
:gsub("%b[]",".0")
-- remove comments; they may be in strings, but that's okay here
:gsub("%-%-.*","")
if (typ and (typ:match(",") or typ:match("%sor%s") or typ:match("%sand%s"))) then
typ = nil
end
typ = typ and typ:gsub("%s","")
typ = typ and typ:gsub(".+", function(s)
var = var and var:gsub("local",""):gsub("%s","")
-- handle `require` as a special case that returns a type that matches its parameter
-- (this is without deeper analysis on loaded files and should work most of the time)
local req = typ and typ:match("^require%s*%(?%s*['\"](.+)['\"]%s*%)?")
typ = req or typ
typ = (typ and typ
:gsub("%b()","")
:gsub("%b{}","")
:gsub("%b[]",".0")
-- replace concatenation with addition to avoid misidentifying types
:gsub("%.%.+","+")
-- remove comments; they may be in strings, but that's okay here
:gsub("%-%-.*",""))
if (typ and (typ:match(",") or typ:match("%sor%s") or typ:match("%sand%s"))) then
typ = nil
end
typ = typ and typ:gsub("%s","")
typ = typ and typ:gsub(".+", function(s)
return (s:find("^'[^']*'$")
or s:find('^"[^"]*"$')
or s:find('^%[=*%[.*%]=*%]$')) and 'string' or s
or s:find('^"[^"]*"$')
or s:find('^%[=*%[.*%]=*%]$')) and 'string' or s
end)
-- filter out everything that is not needed
if typ and typ ~= 'string' -- special value for all strings
and (not typ:match('^'..identifier..'$') -- not an identifier
or typ:match('^%d') -- or a number
or editor.api.tip.keys[typ] -- or a keyword
) then
typ = nil
end
-- filter out everything that is not needed
if typ and typ ~= 'string' -- special value for all strings
and (not typ:match('^'..identifier..'$') -- not an identifier
or typ:match('^%d') -- or a number
or editor.api.tip.keys[typ] -- or a keyword
) then
typ = nil
end
if (var and typ) then
class,func = typ:match(varname.."["..q(sep).."]"..varname)
if (assigns[typ]) then
assigns[var] = assigns[typ]
elseif (func) then
-- FIXME remove this, in favor of proper api definitions
local added
local funcnames = {"new","load","create"}
for i,v in ipairs(funcnames) do
if (func == v) then
assigns[var] = class
added = true
break
end
if (var and typ) then
local class,func = typ:match(varname.."["..q(sep).."]"..varname)
if (assigns[typ] and not req) then
assigns[var] = assigns[typ]
elseif (func) then
local added
local funcnames = {"new","load","create"}
for _,v in ipairs(funcnames) do
if (func == v) then
assigns[var] = class
added = true
break
end
if (not added) then
-- let's hope autocomplete info can resolve this
assigns[var] = typ
end
else
end
if (not added) then
-- let's hope autocomplete info can resolve this
assigns[var] = typ
end
else
assigns[var] = typ
end
end
end
@@ -262,6 +261,7 @@ return {
[[bit32.arshift bit32.band bit32.bnot bit32.bor bit32.btest bit32.bxor bit32.extract
bit32.lrotate bit32.lshift bit32.replace bit32.rrotate bit32.rshift
coroutine.create coroutine.resume coroutine.running coroutine.status coroutine.wrap coroutine.yield
coroutine.isyieldable
debug.debug debug.getfenv debug.gethook debug.getinfo debug.getlocal
debug.getmetatable debug.getregistry debug.getupvalue debug.getuservalue debug.setfenv
debug.sethook debug.setlocal debug.setmetatable debug.setupvalue debug.setuservalue
@@ -271,12 +271,14 @@ return {
math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.cosh math.deg math.exp
math.floor math.fmod math.frexp math.ldexp math.log math.log10 math.max math.min math.modf
math.pow math.rad math.random math.randomseed math.sin math.sinh math.sqrt math.tan math.tanh
math.type math.tointeger math.maxinteger math.mininteger math.ult
os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname
package.loadlib package.searchpath package.seeall package.config
package.cpath package.loaded package.loaders package.path package.preload package.searchers
string.byte string.char string.dump string.find string.format string.gmatch string.gsub string.len
string.lower string.match string.rep string.reverse string.sub string.upper
byte find format gmatch gsub len lower match rep reverse sub upper
table.move, string.pack, string.unpack, string.packsize
table.concat table.insert table.maxn table.pack table.remove table.sort table.unpack]]
},
}

View File

@@ -38,6 +38,7 @@ astypeout = table.concat(astypeout, " ")
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"cl","ocl","clh",},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -49,15 +50,7 @@ return {
return string.find(str, funccall .. "%(")
end,
isfndef = function(str)
local l
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
if (not s) then
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
end
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
return s,e,cap,l
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,

View File

@@ -1,6 +1,7 @@
-- author: Christoph Kubisch
---------------------------------------------------------
if not CMarkSymbols then dofile "spec/cbase.lua" end
return {
exts = {"ptx",},
lexer = wxstc.wxSTC_LEX_CPP,
@@ -8,15 +9,7 @@ return {
sep = ".",
linecomment = "//",
isfndef = function(str)
local l
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
if (not s) then
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
end
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
return s,e,cap,l
end,
marksymbols = CMarkSymbols,
lexerstyleconvert = {
text = {wxstc.wxSTC_C_IDENTIFIER,

View File

@@ -64,12 +64,6 @@ style = {
caretlinebg = nil,
fold = nil,
whitespace = nil,
-- special, functioncall indicator
fncall = {
fg = {r,g,b},
st = wxstc.wxSTC_INDIC_BOX,
},
}
-- config definition
@@ -78,11 +72,8 @@ style = {
-- content is optional
-- config is loaded into existing config table
config = {
appname = "zbstudio", -- by default the launcher name
path = { -- path for tools/interpreters
luxinia = "C:/luxbin/", -- path to luxinia exe
projectdir = "", -- the project directory, used by some tools/interpreters
lua = "C:/lua/lua.exe", -- path to lua exe
},
editor = {
fontname = "Courier New", -- default font
@@ -108,6 +99,8 @@ config = {
nomousezoom = nil, -- disable zooming using mouse wheel
autoreload = nil, -- trigger auto-reload when file is updated
saveallonrun = nil, -- save all modified files before Run/Debug
indentguide = true, -- show indentation guides
backspaceunindent = true, -- unindent when backspace is used
},
default = {
@@ -155,12 +148,14 @@ config = {
shorttip = false, -- tooltips are compact during typing
nodynwords = false, -- no dynamic words (user entered words)
ignorecase = false, -- ignores case when performing comparison with autocomplete list
symbols = true, -- include local/global symbols
startat = 2, -- start suggesting dynamic words after 2 characters
strategy = 0,
strategy = 2,
-- 0: is string comparison
-- 1: substring leading characters (camel case or _ separated)
-- 2: leading + any correctly ordered fragments (default)
width = 60, -- width of the tooltip text (in characters)
maxlength = 450, -- max length of the tooltip on the screen
},
arg = {}, -- command line arguments
@@ -176,7 +171,6 @@ config = {
activateoutput = false, -- activate output/console on Run/Debug/Compile
unhidewindow = false, -- to unhide a gui window
allowinteractivescript = false, -- allow interaction in the output window
projectautoopen = false, -- allow auto open/close files on a project switch
autorecoverinactivity = nil, -- period of inactivity (s) for autorecover
hidpi = false, -- HiDPI/Retina display support

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
@@ -111,24 +109,9 @@ end
-- ToolTip and reserved words list
-- also fixes function descriptions
local function formatUpToX(s, x)
local splitstr = "([ \t]*)(%S*)([ \t]*)(\n?)"
local t = {""}
for prefix, word, suffix, newline in s:gmatch(splitstr) do
if #(t[#t]) + #prefix + #word > x and #t > 0 then
table.insert(t, word..suffix)
else
t[#t] = t[#t]..prefix..word..suffix
end
if #newline > 0 then table.insert(t, "") end
end
return table.concat(t, "\n")
end
local function fillTips(api,apibasename)
local apiac = api.ac
local tclass = api.tip
local tipwidth = math.max(20, ide.config.acandtip.width)
tclass.staticnames = {}
tclass.keys = {}
@@ -144,16 +127,17 @@ local function fillTips(api,apibasename)
local shortfinfo = tclass.shortfinfo
local shortfinfoclass = tclass.shortfinfoclass
local function traverse (tab,libname)
local function traverse (tab, libname, format)
if not tab.childs then return end
format = tab.format or format
for key,info in pairs(tab.childs) do
local fullkey = (libname ~= "" and libname.."." or "")..key
traverse(info, fullkey)
traverse(info, fullkey, format)
if info.type == "function" or info.type == "method" or info.type == "value" then
local frontname = (info.returns or "(?)").." "..fullkey.." "..(info.args or "(?)")
frontname = formatUpToX(frontname:gsub("\n"," "):gsub("\t",""), tipwidth)
local description = formatUpToX(info.description or "", tipwidth)
frontname = frontname:gsub("\n"," "):gsub("\t","")
local description = info.description or ""
-- build info
local inf = ((info.type == "value" and "" or frontname.."\n")
@@ -161,6 +145,10 @@ local function fillTips(api,apibasename)
local sentence = description:match("^(.-)%. ?\n")
local infshort = ((info.type == "value" and "" or frontname.."\n")
..(sentence and sentence.."..." or description))
if type(format) == 'function' then -- apply custom formatting if requested
inf = format(fullkey, info, inf)
infshort = format(fullkey, info, infshort)
end
local infshortbatch = (info.returns and info.args) and frontname or infshort
-- add to infoclass
@@ -199,12 +187,12 @@ end
local function generateAPIInfo(only)
for i,api in pairs(apis) do
if ((not only) or i == only) then
fillTips(api,"",i)
fillTips(api,"")
end
end
end
function UpdateAssignCache(editor)
local function updateAssignCache(editor)
if (editor.spec.typeassigns and not editor.assignscache) then
local assigns = editor.spec.typeassigns(editor)
editor.assignscache = {
@@ -236,8 +224,19 @@ local function resolveAssign(editor,tx)
local c
if (assigns) then
-- find assign
local change = true
local change, n, refs, stopat = true, 0, {}, os.clock() + 0.2
while (change) do
-- abort the check if the auto-complete is taking too long
if n > 50 and os.clock() > stopat then
if ide.config.acandtip.warning then
DisplayOutputLn("Warning: Auto-complete was aborted after taking too long to complete."
.. " Please report this warning along with the text you were typing to support@zerobrane.com.")
end
break
else
n = n + 1
end
local classname = nil
c = ""
change = false
@@ -254,7 +253,12 @@ local function resolveAssign(editor,tx)
c = c..w..s
end
end
-- check for loops in type assignment
if refs[tx] then break end
refs[tx] = c
tx = c
-- if there is any class duplication, abort the loop
if classname and select(2, c:gsub(classname, classname)) > 1 then break end
end
else
c = tx
@@ -267,7 +271,7 @@ end
function GetTipInfo(editor, content, short, fullmatch)
if not content then return end
UpdateAssignCache(editor)
updateAssignCache(editor)
-- try to resolve the class
content = content:gsub("%b[]",".0")
@@ -302,16 +306,18 @@ local function reloadAPI(only,subapis)
end
function ReloadLuaAPI()
local interpreterapi = ide.interpreter
interpreterapi = interpreterapi and interpreterapi.api
if (interpreterapi) then
local apinames = {}
for _, v in ipairs(interpreterapi) do
apinames[v] = true
end
interpreterapi = apinames
end
reloadAPI("lua",interpreterapi)
local interp = ide.interpreter
local cfgapi = ide.config.api
local fname = interp and interp.fname
local intapi = cfgapi and fname and cfgapi[fname]
local apinames = {}
-- general APIs as configured
for _, v in ipairs(type(cfgapi) == 'table' and cfgapi or {}) do apinames[v] = true end
-- interpreter-specific APIs as configured
for _, v in ipairs(type(intapi) == 'table' and intapi or {}) do apinames[v] = true end
-- interpreter APIs
for _, v in ipairs(interp and interp.api or {}) do apinames[v] = true end
reloadAPI("lua",apinames)
end
do
@@ -385,7 +391,7 @@ function DynamicWordsReset ()
end
local function getEditorLines(editor,line,numlines)
return editor:GetTextRange(
return editor:GetTextRangeDyn(
editor:PositionFromLine(line),editor:PositionFromLine(line+numlines+1))
end
@@ -410,7 +416,8 @@ function DynamicWordsRem(editor,content,line,numlines)
end
function DynamicWordsRemoveAll(editor)
DynamicWordsRem(editor,editor:GetText())
if ide.config.acandtip.nodynwords then return end
DynamicWordsRem(editor,editor:GetTextDyn())
end
------------
@@ -461,7 +468,7 @@ local function getAutoCompApiList(childs,fragment,method)
return ret
end
if cache[childs] then
if cache[childs] and cache[childs][fragment] then
return cache[childs][fragment]
end
@@ -477,7 +484,6 @@ local function getAutoCompApiList(childs,fragment,method)
((method and v.type ~= "value")
or (not method and v.type ~= "method"))) then
local used = {}
--
local kl = key:lower()
for i=0,#key do
local k = kl:sub(1,i)
@@ -507,8 +513,7 @@ local function getAutoCompApiList(childs,fragment,method)
return t
end
-- make syntype dependent
function CreateAutoCompList(editor,key)
function CreateAutoCompList(editor,key,pos)
local api = editor.api
local tip = api.tip
local ac = api.ac
@@ -519,12 +524,12 @@ function CreateAutoCompList(editor,key)
-- ignore keywords
if tip.keys[key] then return end
UpdateAssignCache(editor)
updateAssignCache(editor)
local tab,rest = resolveAssign(editor,key)
local progress = tab and tab.childs
statusBar:SetStatusText(progress and tab.classname or "",1)
if not (progress) then return end
ide:SetStatusFor(progress and tab.classname and ("Auto-completing '%s'..."):format(tab.classname) or "")
if not progress then return end
if (tab == ac) then
local _, krest = rest:match("([%w_]+)["..q(sep).."]([%w_]*)%s*$")
@@ -538,33 +543,6 @@ function CreateAutoCompList(editor,key)
rest = rest:gsub("[^%w_]","")
end
local last = key:match("([%w_]+)%s*$")
-- build dynamic word list
-- only if api search couldnt descend
-- ie we couldnt find matching sub items
local dw = ""
if (last and #last >= (ide.config.acandtip.startat or 2)) then
last = last:lower()
if dynamicwords[last] then
local list = dynamicwords[last]
table.sort(list,function(a,b)
local ma,mb = a:sub(1,#last)==last, b:sub(1,#last)==last
if (ma and mb) or (not ma and not mb) then return a<b end
return ma
end)
-- ignore if word == last and sole user
for i,v in ipairs(list) do
if (v:lower() == last and dywordentries[v] == 1) then
table.remove(list,i)
break
end
end
dw = table.concat(list," ")
end
end
-- list from api
local apilist = getAutoCompApiList(tab.childs or tab,rest,method)
@@ -588,33 +566,65 @@ function CreateAutoCompList(editor,key)
-- handle (multiple) inheritance; add matches from the parent class/lib
addInheritance(tab, apilist, {[tab] = true})
local compstr = ""
-- include local/global variables
if ide.config.acandtip.symbols and not key:find(q(sep)) then
local vars, context = {}
local tokens = editor:GetTokenList()
for _, token in ipairs(tokens) do
if token.fpos and pos and token.fpos > pos then break end
if token[1] == 'Id' or token[1] == 'Var' then
local var = token.name
if var:find(key, 1, true) == 1
-- skip the variable formed by what's being typed
and (not token.fpos or not pos or token.fpos < pos-#key) then
-- if it's a global variable, store in the auto-complete list,
-- but if it's local, store separately as it needs to be checked
table.insert(token.context[var] and vars or apilist, var)
end
context = token.context
end
end
for _, var in pairs(context and vars or {}) do
if context[var] then table.insert(apilist, var) end
end
end
-- include dynamic words
local last = key:match("([%w_]+)%s*$")
if (last and #last >= (ide.config.acandtip.startat or 2)) then
last = last:lower()
for i,v in ipairs(dynamicwords[last] or {}) do
-- ignore if word == last and sole user
if (v:lower() == last and dywordentries[v] == 1) then break end
table.insert(apilist, v)
end
end
local li
if apilist then
if (#rest > 0) then
local strategy = ide.config.acandtip.strategy
if (strategy == 2 and #apilist < 128) then
local pat = rest:gsub(".",function(c)
local l = c:lower()..c:upper()
return "["..l.."]([^"..l.." ]*)"
end)
local g = string.gsub
-- when matching "ret": "ret." < "re.t" < "r.et"
local patany = rest:gsub(".", function(c) return "["..c:lower()..c:upper().."](.-)" end)
local patcase = rest:gsub(".", function(c) return c.."(.-)" end)
local weights = {}
local penalty = 0.1
local function weight(str)
if not weights[str] then
local w = 0
str:gsub(patany,function(...)
local l = {...}
-- penalize gaps between matches, more so at the beginning
for n, v in ipairs(l) do w = w + #v * (1 + (#l-n)*penalty) end
end)
weights[str] = w + (str:find(patcase) and 0 or penalty)
end
return weights[str]
end
table.sort(apilist,function(a,b)
local ma,mb = 0,0
g(a,pat,function(...)
local l = {...}
for _, v in ipairs(l) do
ma = ma + ((v=="") and 0 or 1)
end
end)
g(b,pat,function(...)
local l = {...}
for _, v in ipairs(l) do
mb = mb + ((v=="") and 0 or 1)
end
end)
local ma, mb = weight(a), weight(b)
if (ma == mb) then return a:lower()<b:lower() end
return ma<mb
end)
@@ -636,11 +646,7 @@ function CreateAutoCompList(editor,key)
else prev = apilist[i] end
end
compstr = table.concat(apilist," ")
li = table.concat(apilist," ")
end
-- concat final, list complete first
local li = compstr .. (#compstr > 0 and #dw > 0 and " " or "") .. dw
return li ~= "" and (#li > 1024 and li:sub(1,1024).."..." or li) or nil
return li and #li > 1024 and li:sub(1,1024).."..." or li
end

359
src/editor/commandbar.lua Normal file
View File

@@ -0,0 +1,359 @@
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
---------------------------------------------------------
local unpack = table.unpack or unpack
local maxlines = 8
local row_height = 46
function CommandBarShow(params)
local onDone, onUpdate, onItem, onSelection, defaultText, selectedText =
params.onDone, params.onUpdate, params.onItem, params.onSelection,
params.defaultText, params.selectedText
local row_width = ide.config.commandbar.width or 0
if row_width < 1 then
row_width = math.max(450, math.floor(row_width * ide:GetMainFrame():GetClientSize():GetWidth()))
end
local lines = {}
local linesnow = #lines
local linenow = 0
local nb = ide:GetEditorNotebook()
local pos = nb:GetScreenPosition()
if pos then
local miny
for p = 0, nb:GetPageCount()-1 do
local y = nb:GetPage(p):GetScreenPosition():GetY()
-- just in case, compare with the position of the notebook itself;
-- this is needed because the tabs that haven't been refreshed yet
-- may report 0 as their screen position on Linux, which is incorrect.
if y > pos:GetY() and (not miny or y < miny) then miny = y end
end
pos:SetX(pos:GetX()+nb:GetClientSize():GetWidth()-row_width-16)
pos:SetY((miny or pos:GetY())+2)
else
pos = wx.wxDefaultPosition
end
local frame = wx.wxFrame(ide:GetMainFrame(), wx.wxID_ANY, "Command Bar",
pos, wx.wxDefaultSize,
wx.wxFRAME_NO_TASKBAR + wx.wxFRAME_FLOAT_ON_PARENT + wx.wxNO_BORDER)
local panel = wx.wxPanel(frame or ide:GetMainFrame(), wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFULL_REPAINT_ON_RESIZE)
local search = wx.wxTextCtrl(panel, wx.wxID_ANY, "\1",
wx.wxDefaultPosition,
-- make the text control a bit smaller on OSX
wx.wxSize(row_width, ide.osname == 'Macintosh' and 20 or 24),
wx.wxTE_PROCESS_ENTER + wx.wxTE_PROCESS_TAB + wx.wxNO_BORDER)
local results = wx.wxScrolledWindow(panel, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxSize(0, 0))
local style, styledef = ide.config.styles, StylesGetDefault()
local textcolor = wx.wxColour(unpack(style.text.fg or styledef.text.fg))
local backcolor = wx.wxColour(unpack(style.text.bg or styledef.text.bg))
local selcolor = wx.wxColour(unpack(style.caretlinebg.bg or styledef.caretlinebg.bg))
local pancolor = ide:GetUIManager():GetArtProvider():GetColor(wxaui.wxAUI_DOCKART_SASH_COLOUR)
local borcolor = ide:GetUIManager():GetArtProvider():GetColor(wxaui.wxAUI_DOCKART_BORDER_COLOUR)
search:SetBackgroundColour(backcolor)
search:SetForegroundColour(textcolor)
local nbrush = wx.wxBrush(backcolor, wx.wxSOLID)
local sbrush = wx.wxBrush(selcolor, wx.wxSOLID)
local bbrush = wx.wxBrush(pancolor, wx.wxSOLID)
local lpen = wx.wxPen(borcolor, 1, wx.wxDOT)
local bpen = wx.wxPen(borcolor, 1, wx.wxSOLID)
local sash = ide:GetUIManager():GetArtProvider():GetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE)
local border = sash + 2
local hoffset = 4
local voffset = 4
local topSizer = wx.wxFlexGridSizer(2, 1, -border*2, 0)
topSizer:SetFlexibleDirection(wx.wxVERTICAL)
topSizer:AddGrowableRow(1, 1)
topSizer:Add(search, wx.wxSizerFlags(0):Expand():Border(wx.wxALL, border))
topSizer:Add(results, wx.wxSizerFlags(1):Expand():Border(wx.wxALL, border))
panel:SetSizer(topSizer)
topSizer:Fit(frame) -- fit the frame/panel around the controls
local minheight = frame:GetClientSize():GetHeight()
local tfont = ide:GetProjectTree():GetFont()
local ffont = (ide:GetEditor() or ide:CreateBareEditor()):GetFont()
ffont:SetPointSize(ffont:GetPointSize()+2)
local sfont = wx.wxFont(tfont)
tfont:SetPointSize(tfont:GetPointSize()+2)
search:SetFont(tfont)
-- make a one-time callback;
-- needed because KILL_FOCUS handler can be called after closing window
local function onExit(index)
onExit = function() end
onDone(index and lines[index], index, search:GetValue())
frame:Close()
end
local function onPaint(event)
-- adjust the scrollbar before working with the canvas
local _, starty = results:GetViewStart()
if #lines ~= linesnow then
-- adjust the starting line when the current line is the last one
if linenow > starty+maxlines then starty = starty + 1 end
results:SetScrollbars(1, row_height, 1, #lines, 0, starty*row_height, false)
linesnow = #lines
end
local dc = wx.wxMemoryDC(results)
results:PrepareDC(dc)
local size = results:GetVirtualSize()
local w,h = size:GetWidth(),size:GetHeight()
local bitmap = wx.wxBitmap(w,h)
dc:SelectObject(bitmap)
-- clear the background
dc:SetBackground(nbrush)
dc:Clear()
dc:SetTextForeground(textcolor)
dc:SetBrush(sbrush)
for r = 1, #lines do
if r == linenow then
dc:SetPen(wx.wxTRANSPARENT_PEN)
dc:DrawRectangle(0, row_height*(r-1), row_width, row_height+1)
end
dc:SetPen(lpen)
dc:DrawLine(hoffset, row_height*(r-1), row_width-hoffset*2, row_height*(r-1))
local fline, sline = onItem(lines[r])
if fline then
dc:SetFont(ffont)
dc:DrawText(fline, hoffset, row_height*(r-1)+voffset)
end
if sline then
dc:SetFont(sfont)
dc:DrawText(sline, hoffset, row_height*(r-1)+row_height/2+voffset)
end
end
dc:SetPen(wx.wxNullPen)
dc:SetBrush(wx.wxNullBrush)
dc:SelectObject(wx.wxNullBitmap)
dc:delete()
dc = wx.wxPaintDC(results)
dc:DrawBitmap(bitmap, 0, 0, true)
dc:delete()
end
local function onPanelPaint(event)
local dc = wx.wxBufferedPaintDC(panel)
dc:SetBrush(bbrush)
dc:SetPen(bpen)
local psize = panel:GetClientSize()
dc:DrawRectangle(0, 0, psize:GetWidth(), psize:GetHeight())
dc:DrawRectangle(sash+1, sash+1, psize:GetWidth()-2*(sash+1), psize:GetHeight()-2*(sash+1))
dc:SetPen(wx.wxNullPen)
dc:SetBrush(wx.wxNullBrush)
dc:delete()
end
local linewas -- line that was reported when updated
local function onTextUpdated(event)
local text = search:GetValue()
lines = onUpdate(text)
linenow = #text > 0 and #lines > 0 and 1 or 0
linewas = nil
local size = frame:GetClientSize()
local height = minheight + row_height*math.min(maxlines,#lines)
if height ~= size:GetHeight() then
results:SetScrollbars(1, 1, 1, 1, 0, 0, false)
size:SetHeight(height)
frame:SetClientSize(size)
end
results:Refresh()
end
local function onKeyDown(event)
local keycode = event:GetKeyCode()
if keycode == wx.WXK_RETURN then
onExit(linenow)
return
elseif event:GetModifiers() ~= wx.wxMOD_NONE then
event:Skip()
return
elseif keycode == wx.WXK_UP then
if linesnow > 0 then
linenow = linenow - 1
if linenow <= 0 then linenow = linesnow end
end
elseif keycode == wx.WXK_DOWN then
if linesnow > 0 then
linenow = linenow % linesnow + 1
end
elseif keycode == wx.WXK_PAGEDOWN then
if linesnow > 0 then
linenow = linenow + maxlines
if linenow > linesnow then linenow = linesnow end
end
elseif keycode == wx.WXK_PAGEUP then
if linesnow > 0 then
linenow = linenow - maxlines
if linenow <= 0 then linenow = 1 end
end
elseif keycode == wx.WXK_ESCAPE then
onExit(false)
return
else
event:Skip()
return
end
local _, starty = results:GetViewStart()
if linenow < starty+1 then results:Scroll(-1, linenow-1)
elseif linenow > starty+maxlines then results:Scroll(-1, linenow-maxlines) end
results:Refresh()
end
local function onMouseLeftDown(event)
local pos = event:GetPosition()
local _, y = results:CalcUnscrolledPosition(pos.x, pos.y)
onExit(math.floor(y / row_height)+1)
end
local function onIdle(event)
if linewas == linenow then return end
linewas = linenow
if linenow == 0 then return end
-- save the selection/insertion point as it's reset on Linux (wxwidgets 2.9.5)
local ip = search:GetInsertionPoint()
local f, t = search:GetSelection()
-- this may set focus to a different object/tab,
-- so disable the focus event and then set the focus back
search:SetEvtHandlerEnabled(false)
onSelection(lines[linenow], search:GetValue())
search:SetFocus()
search:SetEvtHandlerEnabled(true)
if ide.osname == 'Unix' then
search:SetInsertionPoint(ip)
search:SetSelection(f, t)
end
end
frame:Connect(wx.wxEVT_CLOSE_WINDOW, function() frame:Destroy() end)
panel:Connect(wx.wxEVT_PAINT, onPanelPaint)
panel:Connect(wx.wxEVT_ERASE_BACKGROUND, function() end)
panel:Connect(wx.wxEVT_IDLE, onIdle)
results:Connect(wx.wxEVT_PAINT, onPaint)
results:Connect(wx.wxEVT_LEFT_DOWN, onMouseLeftDown)
results:Connect(wx.wxEVT_ERASE_BACKGROUND, function() end)
search:SetFocus()
search:Connect(wx.wxEVT_KEY_DOWN, onKeyDown)
search:Connect(wx.wxEVT_COMMAND_TEXT_UPDATED, onTextUpdated)
search:Connect(wx.wxEVT_COMMAND_TEXT_ENTER, function() onExit(linenow) end)
search:Connect(wx.wxEVT_KILL_FOCUS, function() onExit() end)
frame:Show(true)
frame:Update()
frame:Refresh()
search:SetValue((defaultText or "")..(selectedText or ""))
search:SetSelection(#(defaultText or ""), -1)
end
local sep = "[/\\%-_ ]+"
local weights = {onegram = 0.1, digram = 0.4, trigram = 0.5}
local cache = {}
local missing = 3 -- penalty for missing symbols (1 missing == N matching)
local casemismatch = 0.9 -- score for case mismatch (%% of full match)
local function score(p, v)
local function ngrams(str, num, low, needcache)
local key = str..'\1'..num
if cache[key] then return unpack(cache[key]) end
local t, l, p = {}, {}, 0
for i = 1, #str-num+1 do
local pair = str:sub(i, i+num-1)
p = p + (t[pair] and 0 or 1)
if low and pair:find('%u') then l[pair:lower()] = casemismatch end
t[pair] = 1
end
if needcache then cache[key] = {t, p, l} end
return t, p, l
end
local function overlap(pattern, value, num)
local ph, ps = ngrams(pattern, num, false, true)
local vh, vs, vl = ngrams(value, num, true)
if ps + vs == 0 then return 0 end
local is = 0 -- intersection of two sets of ngrams
for k in pairs(ph) do is = is + (vh[k] or vl[k:lower()] or 0) end
return is / (ps + vs) - (num == 1 and missing * (ps - is) / (ps + vs) or 0)
end
local key = p..'\2'..v
if not cache[key] then
local score = weights.onegram * overlap(p, v, 1)
if score > 0 then -- don't bother with those that can't even score 1grams
p = ' '..(p:gsub(sep, ' '))
v = ' '..(v:gsub(sep, ' '))
score = score + weights.digram * overlap(p, v, 2)
score = score + weights.trigram * overlap(' '..p, ' '..v, 3)
end
cache[key] = 2 * 100 * score
end
return cache[key]
end
function CommandBarScoreItems(t, pattern, limit)
local r, plen = {}, #pattern
local maxp = 0
local num = 0
local prefilter = ide.config.commandbar and ide.config.commandbar.prefilter
-- anchor for 1-2 symbol patterns to speed up search
local needanchor = prefilter and prefilter * 4 <= #t and plen <= 2
local filter = prefilter and prefilter <= #t
-- expand `abc` into `a.*b.*c`, but limit the prefix to avoid penalty for `s.*s.*s.*....`
and pattern:gsub("[^%w_]+",""):sub(1,4):lower():gsub(".", "%1.*"):gsub("%.%*$","")
or nil
for _, v in ipairs(t) do
if #v >= plen then
local match = filter and v:lower():find(filter)
-- check if the current name needs to be prefiltered or anchored (for better performance);
-- if it needs to be anchored, then anchor it at the beginning of the string or the word
if not filter or (match and (not needanchor or match == 1 or v:find("^[%p%s]", match-1))) then
local p = score(pattern, v)
maxp = math.max(p, maxp)
if p > 1 and p > maxp / 4 then
num = num + 1
r[num] = {v, p}
end
end
end
end
table.sort(r, function(a, b) return a[2] > b[2] end)
-- limit the list to be displayed
-- `r[limit+1] = nil` is not desired as the resulting table may be sorted incorrectly
if tonumber(limit) and limit < #r then
local tmp = r
r = {}
for i = 1, limit do r[i] = tmp[i] end
end
return r
end
ide:AddPackage('core.commandbar', {
-- reset ngram cache when switching projects to conserve memory
onProjectLoad = function() cache = {} end
})

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,56 +61,73 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
end
end
-- if not opened yet, try open now
local file_text = FileRead(filePath)
if file_text then
if GetConfigIOFilter("input") then
file_text = GetConfigIOFilter("input")(filePath,file_text)
end
elseif file_must_exist then
return nil
end
local filesize = FileSize(filePath)
if not filesize and file_must_exist then return nil end
local current = editor and editor:GetCurrentPos()
editor = editor or findUnusedEditor() or CreateEditor()
editor:Freeze()
editor:SetupKeywords(GetFileExt(filePath))
editor:MarkerDeleteAll(-1)
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
if filesize then editor:Allocate(filesize) end
editor:SetTextDyn("")
editor.bom = string.char(0xEF,0xBB,0xBF)
if file_text and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8
and file_text:find("^"..editor.bom) then
file_text = file_text:gsub("^"..editor.bom, "")
else
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
editor.bom = false
end
editor:SetText(file_text or "")
-- check the editor as it can be empty if the file has malformed UTF8;
-- skip binary files with unknown extensions as they may have any sequences;
-- can't show them anyway.
if file_text and #file_text > 0 and #(editor:GetText()) == 0
and (editor.spec ~= ide.specs.none or not isBinary(file_text)) then
local replacement, invalid = "\022"
file_text, invalid = FixUTF8(file_text, replacement)
if #invalid > 0 then
editor:AppendText(file_text)
local lastline = nil
for _, n in ipairs(invalid) do
local line = editor:LineFromPosition(n)
if line ~= lastline then
DisplayOutputLn(("%s:%d: %s")
:format(filePath, line+1, TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
lastline = line
local inputfilter = GetConfigIOFilter("input")
local file_text
ide:PushStatus("")
FileRead(filePath, 1024*1024, function(s)
if not file_text then
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
if s and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and s:find("^"..editor.bom) then
s = s:gsub("^"..editor.bom, "")
else
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
editor.bom = false
end
file_text = s
end
if inputfilter then s = inputfilter(filePath, s) end
local expected = editor:GetLength() + #s
editor:AppendTextDyn(s)
-- if the length is not as expected, then either it's a binary file or invalid UTF8
if editor:GetLength() ~= expected then
-- skip binary files with unknown extensions as they may have any sequences
-- when using Raw methods, this can only happen for binary files (that include \0 chars)
if editor.useraw or editor.spec == ide.specs.none and IsBinary(s) then
DisplayOutputLn(("%s: %s"):format(filePath,
TR("Binary file is shown as read-only as it is only partially loaded.")))
file_text = ''
editor:SetReadOnly(true)
return false
end
-- handle invalid UTF8 characters
-- fix: doesn't handle characters split by callback buffer
local replacement, invalid = "\022"
s, invalid = FixUTF8(s, replacement)
if #invalid > 0 then
editor:AppendTextDyn(s)
local lastline = nil
for _, n in ipairs(invalid) do
local line = editor:LineFromPosition(n)
if line ~= lastline then
DisplayOutputLn(("%s:%d: %s"):format(filePath, line+1,
TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
lastline = line
end
end
end
end
end
end
if filesize and filesize > 0 then
ide:PopStatus()
ide:PushStatus(TR("%s%% loaded..."):format(math.floor(100*editor:GetLength()/filesize)))
end
end)
ide:PopStatus()
editor:Colourise(0, -1)
editor:ResetTokenList() -- reset list of tokens if this is a reused editor
editor:Thaw()
local edcfg = ide.config.editor
@@ -127,7 +148,7 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
DisplayOutputLn(("%s: %s")
:format(filePath, TR("Mixed end-of-line encodings detected.")..' '..
TR("Use '%s' to show line endings and '%s' to convert them.")
:format("GetEditor():SetViewEOL(1)", "GetEditor():ConvertEOLs(GetEditor():GetEOLMode())")))
:format("ide:GetEditor():SetViewEOL(1)", "ide:GetEditor():ConvertEOLs(ide:GetEditor():GetEOLMode())")))
elseif foundcrlf then
editor:SetEOLMode(wxstc.wxSTC_EOL_CRLF)
elseif foundlf then
@@ -137,18 +158,19 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
end
editor:EmptyUndoBuffer()
local id = editor:GetId()
if openDocuments[id] then -- existing editor; switch to the tab
notebook:SetSelection(openDocuments[id].index)
local doc = ide:GetDocument(editor)
if doc then -- existing editor; switch to the tab
notebook:SetSelection(doc:GetTabIndex())
else -- the editor has not been added to notebook
AddEditor(editor, wx.wxFileName(filePath):GetFullName()
doc = AddEditor(editor, wx.wxFileName(filePath):GetFullName()
or ide.config.default.fullname)
end
openDocuments[id].filePath = filePath
openDocuments[id].fileName = wx.wxFileName(filePath):GetFullName()
openDocuments[id].modTime = GetFileModTime(filePath)
doc.filePath = filePath
doc.fileName = wx.wxFileName(filePath):GetFullName()
doc.modTime = GetFileModTime(filePath)
SetDocumentModified(id, false, openDocuments[id].fileName)
doc:SetModified(false)
doc:SetTabText(doc:GetFileName())
-- activate the editor; this is needed for those cases when the editor is
-- created from some other element, for example, from a project tree.
@@ -163,13 +185,9 @@ function ReLoadFile(filePath, editor, ...)
if not editor then return LoadFile(filePath, editor, ...) end
-- save all markers
local maskany = 2^24-1
local markers = {}
local line = editor:MarkerNext(0, maskany)
while line > -1 do
table.insert(markers, {line, editor:MarkerGet(line), editor:GetLine(line)})
line = editor:MarkerNext(line + 1, maskany)
end
local markers = editor:MarkerGetAll()
-- add the current line content to retrieved markers to compare later if needed
for _, marker in ipairs(markers) do marker[3] = editor:GetLineDyn(marker[1]) end
local lines = editor:GetLineCount()
-- load file into the same editor
@@ -177,6 +195,9 @@ function ReLoadFile(filePath, editor, ...)
if not editor then return end
if #markers > 0 then -- restore all markers
-- delete all markers as they may be restored by a different mechanism,
-- which may be limited to only restoring some markers
editor:MarkerDeleteAll(-1)
local samelinecount = lines == editor:GetLineCount()
for _, marker in ipairs(markers) do
local line, mask, text = unpack(marker)
@@ -186,13 +207,14 @@ function ReLoadFile(filePath, editor, ...)
else
-- find matching line in the surrounding area and restore marker there
for _, l in ipairs({line, line-1, line-2, line+1, line+2}) do
if text == editor:GetLine(l) then
if text == editor:GetLineDyn(l) then
editor:MarkerAddSet(l, mask)
break
end
end
end
end
PackageEventHandle("onEditorMarkerUpdate", editor)
end
return editor
@@ -200,8 +222,12 @@ end
function ActivateFile(filename)
local name, suffix, value = filename:match('(.+):([lLpP]?)(%d+)$')
if name and not wx.wxFileExists(filename) and wx.wxFileExists(name) then
filename = name
if name and not wx.wxFileExists(filename) then filename = name end
-- check if non-existing file can be loaded from the project folder;
-- this is to handle: "project file" used on the command line
if not wx.wxFileExists(filename) and not wx.wxIsAbsolutePath(filename) then
filename = GetFullPathIfExists(ide:GetProject(), filename) or filename
end
local opened = LoadFile(filename, nil, true)
@@ -213,19 +239,11 @@ function ActivateFile(filename)
return opened
end
local function getExtsString()
local knownexts = ""
for _,spec in pairs(ide.specs) do
if (spec.exts) then
for _,ext in ipairs(spec.exts) do
knownexts = knownexts.."*."..ext..";"
end
end
end
knownexts = knownexts:len() > 0 and knownexts:sub(1,-2) or nil
local exts = knownexts and TR("Known Files").." ("..knownexts..")|"..knownexts.."|" or ""
return exts..TR("All files").." (*)|*"
local function getExtsString(ed)
local exts = ed and ed.spec and ed.spec.exts or {}
local knownexts = #exts > 0 and "*."..table.concat(exts, ";*.") or nil
return (knownexts and TR("Known Files").." ("..knownexts..")|"..knownexts.."|" or "")
.. TR("All files").." (*)|*"
end
function ReportError(msg)
@@ -238,11 +256,13 @@ function OpenFile(event)
local fileDialog = wx.wxFileDialog(ide.frame, TR("Open file"),
(path and GetPathWithSep(path) or FileTreeGetDir() or ""),
"",
getExtsString(),
wx.wxFD_OPEN + wx.wxFD_FILE_MUST_EXIST)
getExtsString(editor),
wx.wxFD_OPEN + wx.wxFD_FILE_MUST_EXIST + wx.wxFD_MULTIPLE)
if fileDialog:ShowModal() == wx.wxID_OK then
if not LoadFile(fileDialog:GetPath(), nil, true) then
ReportError(TR("Unable to load file '%s'."):format(fileDialog:GetPath()))
for _, path in ipairs(fileDialog:GetPaths()) do
if not LoadFile(path, nil, true) then
ReportError(TR("Unable to load file '%s'."):format(path))
end
end
end
fileDialog:Destroy()
@@ -268,8 +288,8 @@ function SaveFile(editor, filePath)
end
end
local st = (editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
.. editor:GetText()
local st = ((editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
.. editor:GetTextDyn())
if GetConfigIOFilter("output") then
st = GetConfigIOFilter("output")(filePath,st)
end
@@ -277,12 +297,14 @@ function SaveFile(editor, filePath)
local ok, err = FileWrite(filePath, st)
if ok then
editor:SetSavePoint()
local id = editor:GetId()
openDocuments[id].filePath = filePath
openDocuments[id].fileName = wx.wxFileName(filePath):GetFullName()
openDocuments[id].modTime = GetFileModTime(filePath)
SetDocumentModified(id, false, openDocuments[id].fileName)
local doc = ide:GetDocument(editor)
doc.filePath = filePath
doc.fileName = wx.wxFileName(filePath):GetFullName()
doc.modTime = GetFileModTime(filePath)
doc:SetModified(false)
doc:SetTabText(doc:GetFileName())
SetAutoRecoveryMark()
FileTreeMarkSelected(filePath)
PackageEventHandle("onEditorSave", editor)
@@ -323,7 +345,7 @@ function SaveFileAs(editor)
fn:GetPath(wx.wxPATH_GET_VOLUME),
fn:GetFullName(),
-- specify the current extension plus all other extensions based on specs
(ext and #ext > 0 and "*."..ext.."|*."..ext.."|" or "")..getExtsString(),
(ext and #ext > 0 and "*."..ext.."|*."..ext.."|" or "")..getExtsString(editor),
wx.wxFD_SAVE)
if fileDialog:ShowModal() == wx.wxID_OK then
@@ -337,12 +359,12 @@ function SaveFileAs(editor)
if cansave and SaveFile(editor, filePath) then
SetEditorSelection() -- update title of the editor
FileTreeMarkSelected(filePath)
if ext ~= GetFileExt(filePath) then
-- new extension, so setup new keywords and re-apply indicators
editor:ClearDocumentStyle() -- remove styles from the document
editor:SetupKeywords(GetFileExt(filePath))
IndicateAll(editor)
IndicateFunctionsOnly(editor)
MarkupStyle(editor)
end
saved = true
@@ -426,6 +448,11 @@ end
function ClosePage(selection)
local editor = GetEditor(selection)
local id = editor:GetId()
if PackageEventHandle("onEditorPreClose", editor) == false then
return false
end
if SaveModifiedDialog(editor, true) ~= wx.wxID_CANCEL then
DynamicWordsRemoveAll(editor)
local debugger = ide.debugger
@@ -445,7 +472,9 @@ function ClosePage(selection)
-- disable full screen if the last tab is closed
if not (notebook:GetSelection() >= 0) then ShowFullScreen(false) end
return true
end
return false
end
function CloseAllPagesExcept(selection)
@@ -501,62 +530,13 @@ function SaveOnExit(allow_cancel)
-- if all documents have been saved or refused to save, then mark those that
-- are still modified as not modified (they don't need to be saved)
-- to keep their tab names correct
for id, document in pairs(openDocuments) do
if document.isModified then SetDocumentModified(id, false) end
for _, document in pairs(openDocuments) do
if document.isModified then document:SetModified(false) end
end
return true
end
-- circle through "fold all" => "hide base lines" => "unfold all"
function FoldSome()
local editor = GetEditor()
editor:Colourise(0, -1) -- update doc's folding info
local foldall = false -- at least on header unfolded => fold all
local hidebase = false -- at least one base is visible => hide all
for ln = 0, editor.LineCount - 1 do
local foldRaw = editor:GetFoldLevel(ln)
local foldLvl = foldRaw % 4096
local foldHdr = (math.floor(foldRaw / 8192) % 2) == 1
-- at least one header is expanded
foldall = foldall or (foldHdr and editor:GetFoldExpanded(ln))
-- at least one base can be hidden
hidebase = hidebase or (
not foldHdr
and ln > 1 -- first line can't be hidden, so ignore it
and foldLvl == wxstc.wxSTC_FOLDLEVELBASE
and bit.band(foldRaw, wxstc.wxSTC_FOLDLEVELWHITEFLAG) == 0
and editor:GetLineVisible(ln))
end
-- shows lines; this doesn't change fold status for folded lines
if not foldall and not hidebase then editor:ShowLines(0, editor.LineCount-1) end
for ln = 0, editor.LineCount-1 do
local foldRaw = editor:GetFoldLevel(ln)
local foldLvl = foldRaw % 4096
local foldHdr = (math.floor(foldRaw / 8192) % 2) == 1
if foldall then
if foldHdr and editor:GetFoldExpanded(ln) then
editor:ToggleFold(ln)
end
elseif hidebase then
if not foldHdr and (foldLvl == wxstc.wxSTC_FOLDLEVELBASE) then
editor:HideLines(ln, ln)
end
else -- unfold all
if foldHdr and not editor:GetFoldExpanded(ln) then
editor:ToggleFold(ln)
end
end
end
editor:EnsureCaretVisible()
end
function SetAllEditorsReadOnly(enable)
for _, document in pairs(openDocuments) do
document.editor:SetReadOnly(enable)
@@ -569,6 +549,7 @@ end
function ClearAllCurrentLineMarkers()
for _, document in pairs(openDocuments) do
document.editor:MarkerDeleteAll(CURRENT_LINE_MARKER)
document.editor:Refresh() -- needed for background markers that don't get refreshed (wx2.9.5)
end
end
@@ -586,12 +567,10 @@ function CompileProgram(editor, params)
}
local doc = ide:GetDocument(editor)
local filePath = doc:GetFilePath() or doc:GetFileName()
local func, err = loadstring(StripShebang(editor:GetText()), '@'..filePath)
local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
if not params.keepoutput and ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT) then
ClearOutput()
end
if not params.keepoutput then ClearOutput() end
compileTotal = compileTotal + 1
if func then
@@ -601,11 +580,12 @@ function CompileProgram(editor, params)
:format(compileOk/compileTotal*100, compileOk, compileTotal))
end
else
ActivateOutput()
DisplayOutputLn(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
DisplayOutputLn((err:gsub("\n$", "")))
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
if err:find('invalid escape sequence') then
local s = editor:GetLine(line-1)
local s = editor:GetLineDyn(line-1)
local cleaned = s
:gsub('\\[abfnrtv\\"\']', ' ')
:gsub('(\\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
@@ -729,7 +709,7 @@ end
function SetOpenTabs(params)
local recovery, nametab = LoadSafe("return "..params.recovery)
if not recovery then
if not recovery or not nametab then
DisplayOutputLn(TR("Can't process auto-recovery record; invalid format: %s."):format(nametab))
return
end
@@ -737,20 +717,21 @@ function SetOpenTabs(params)
DisplayOutputLn(TR("Found auto-recovery record and restored saved session."))
end
for _,doc in ipairs(nametab) do
-- check for missing file is no content is stored
-- check for missing file if no content is stored
if doc.filepath and not doc.content and not wx.wxFileExists(doc.filepath) then
DisplayOutputLn(TR("File '%s' is missing and can't be recovered.")
:format(doc.filepath))
else
local editor = doc.filepath and LoadFile(doc.filepath,nil,true,true) or NewFile(doc.filename)
local opendoc = openDocuments[editor:GetId()]
local editor = (doc.filepath and LoadFile(doc.filepath,nil,true,true)
or findUnusedEditor() or NewFile(doc.filename))
local opendoc = ide:GetDocument(editor)
if doc.content then
editor:SetText(doc.content)
editor:SetTextDyn(doc.content)
if doc.filepath and opendoc.modTime and doc.modified < opendoc.modTime:GetTicks() then
DisplayOutputLn(TR("File '%s' has more recent timestamp than restored '%s'; please review before saving.")
:format(doc.filepath, doc.tabname))
:format(doc.filepath, opendoc:GetTabText()))
end
SetDocumentModified(editor:GetId(), true)
opendoc:SetModified(true)
end
editor:GotoPosDelayed(doc.cursorpos or 0)
end
@@ -762,21 +743,23 @@ end
local function getOpenTabs()
local opendocs = {}
for _, document in pairs(ide.openDocuments) do
local editor = document:GetEditor()
table.insert(opendocs, {
filename = document.fileName,
filepath = document.filePath,
tabname = notebook:GetPageText(document.index),
modified = document.modTime and document.modTime:GetTicks(), -- get number of seconds
content = document.isModified and document.editor:GetText() or nil,
id = document.index, cursorpos = document.editor:GetCurrentPos()})
filename = document:GetFileName(),
filepath = document:GetFilePath(),
tabname = document:GetTabText(),
modified = document:GetModTime() and document:GetModTime():GetTicks(), -- get number of seconds
content = document:IsModified() and editor:GetTextDyn() or nil,
id = document:GetTabIndex(),
cursorpos = editor:GetCurrentPos()})
end
-- to keep tab order
table.sort(opendocs, function(a,b) return (a.id < b.id) end)
local id = GetEditor()
id = id and id:GetId()
return opendocs, {index = (id and openDocuments[id].index or 0)}
local ed = GetEditor()
local doc = ed and ide:GetDocument(ed)
return opendocs, {index = (doc and doc:GetTabIndex() or 0)}
end
function SetAutoRecoveryMark()
@@ -816,8 +799,7 @@ local function saveAutoRecovery(force)
ide.settings:Flush()
end
ide.session.lastsaved = now
ide.frame.statusBar:SetStatusText(
TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")), 1)
ide:SetStatus(TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")))
end
local function fastWrap(func, ...)
@@ -829,9 +811,9 @@ local function fastWrap(func, ...)
SetEditorSelection = SES
end
function StoreRestoreProjectTabs(curdir, newdir)
function StoreRestoreProjectTabs(curdir, newdir, intfname)
local win = ide.osname == 'Windows'
local interpreter = ide.interpreter.fname
local interpreter = intfname or ide.interpreter.fname
local current, closing, restore = notebook:GetSelection(), 0, false
if ide.osname ~= 'Macintosh' then notebook:Freeze() end
@@ -874,8 +856,9 @@ function StoreRestoreProjectTabs(curdir, newdir)
fastWrap(SetOpenFiles, files, {index = #files + notebook:GetPageCount()})
end
if params and params.interpreter then
ProjectSetInterpreter(params.interpreter) -- set the interpreter
-- either interpreter is chosen for the project or the default value is set
if (params and params.interpreter) or (not params and ide.config.interpreter) then
ProjectSetInterpreter(params and params.interpreter or ide.config.interpreter)
end
if ide.osname ~= 'Macintosh' then notebook:Thaw() end
@@ -936,9 +919,12 @@ local function closeWindow(event)
frame.uimgr:UnInit()
frame:Hide() -- hide the main frame while the IDE exits
if ide.session.timer then ide.session.timer:Stop() end
-- stop all the timers
for _, timer in pairs(ide.timers) do timer:Stop() end
event:Skip()
PackageEventHandle("onAppDone")
end
frame:Connect(wx.wxEVT_CLOSE_WINDOW, closeWindow)
@@ -954,7 +940,6 @@ frame:Connect(wx.wxEVT_TIMER, function() saveAutoRecovery() end)
-- tickets: http://trac.wxwidgets.org/ticket/14142
-- and http://trac.wxwidgets.org/ticket/14269)
local infocus
ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
if ide.exitingProgram then return end
@@ -962,8 +947,10 @@ ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
if win then
local class = win:GetClassInfo():GetClassName()
-- don't set focus on the main frame or toolbar
if infocus and (class == 'wxAuiToolBar' or class == 'wxFrame') then
pcall(function() infocus:SetFocus() end)
if ide.infocus and (class == 'wxAuiToolBar' or class == 'wxFrame') then
-- check if the window is shown before returning focus to it,
-- as it may lead to a recursion in event handlers on OSX (wxwidgets 2.9.5).
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
return
end
@@ -983,43 +970,50 @@ ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
parent = parent:GetParent()
end
if mainwin then
if infocus and infocus ~= win and ide.osname == 'Macintosh' then
if ide.infocus and ide.infocus ~= win and ide.osname == 'Macintosh' then
-- kill focus on the control that had the focus as wxwidgets on OSX
-- doesn't do it: http://trac.wxwidgets.org/ticket/14142;
-- wrap into pcall in case the window is already deleted
local ev = wx.wxFocusEvent(wx.wxEVT_KILL_FOCUS)
pcall(function() infocus:GetEventHandler():ProcessEvent(ev) end)
pcall(function() ide.infocus:GetEventHandler():ProcessEvent(ev) end)
end
infocus = win
ide.infocus = win
end
end
event:Skip()
end)
local updateInterval = 250 -- time in ms
wx.wxUpdateUIEvent.SetUpdateInterval(updateInterval)
ide.editorApp:Connect(wx.wxEVT_ACTIVATE_APP,
function(event)
if not ide.exitingProgram then
if ide.osname == 'Macintosh' and infocus and event:GetActive() then
if ide.osname == 'Macintosh' and ide.infocus and event:GetActive() then
-- restore focus to the last element that received it;
-- wrap into pcall in case the element has disappeared
-- while the application was out of focus
pcall(function() infocus:SetFocus() end)
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
end
local active = event:GetActive()
-- save auto-recovery record when making the app inactive
if not event:GetActive() then saveAutoRecovery(true) end
if not active then saveAutoRecovery(true) end
local event = event:GetActive() and "onAppFocusSet" or "onAppFocusLost"
PackageEventHandle(event, ide.editorApp)
-- disable UI refresh when app is inactive, but only when not running
wx.wxUpdateUIEvent.SetUpdateInterval(
(active or ide:GetLaunchedProcess()) and updateInterval or -1)
PackageEventHandle(active and "onAppFocusSet" or "onAppFocusLost", ide.editorApp)
end
event:Skip()
end)
if ide.config.autorecoverinactivity then
ide.session.timer = wx.wxTimer(frame)
ide.timers.session = wx.wxTimer(frame)
-- check at least 5s to be never more than 5s off
ide.session.timer:Start(math.min(5, ide.config.autorecoverinactivity)*1000)
ide.timers.session:Start(math.min(5, ide.config.autorecoverinactivity)*1000)
end
function PaneFloatToggle(window)
@@ -1033,3 +1027,28 @@ function PaneFloatToggle(window)
end
uimgr:Update()
end
local cma, cman = 0, 1
frame:Connect(wx.wxEVT_IDLE,
function(event)
local debugger = ide.debugger
if (debugger.update) then debugger.update() end
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
if IndicateIfNeeded() then event:RequestMore(true) end
PackageEventHandleOnce("onIdleOnce", event)
PackageEventHandle("onIdle", event)
-- process onidle events if any
if #ide.onidle > 0 then table.remove(ide.onidle)() end
if #ide.onidle > 0 then event:RequestMore(true) end -- request more if anything left
if ide.config.showmemoryusage then
local mem = collectgarbage("count")
local alpha = math.max(tonumber(ide.config.showmemoryusage) or 0, 1/cman)
cman = cman + 1
cma = alpha * mem + (1-alpha) * cma
ide:SetStatus(("cur: %sKb; avg: %sKb"):format(math.floor(mem), math.floor(cma)))
end
event:Skip() -- let other EVT_IDLE handlers to work on the event
end)

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
@@ -18,24 +18,16 @@ debugger.portnumber = ide.config.debugger.port or mobdebug.port -- the port # to
debugger.watchCtrl = nil -- the watch ctrl that shows watch information
debugger.stackCtrl = nil -- the stack ctrl that shows stack information
debugger.toggleview = {
bottomnotebook = true, -- output/console is "on" by default
stackpanel = false, watchpanel = false, toolbar = false }
debugger.needrefresh = {} -- track components that may need a refresh
debugger.hostname = ide.config.debugger.hostname or (function()
local hostname = socket.dns.gethostname()
return hostname and socket.dns.toip(hostname) and hostname or "localhost"
end)()
debugger.imglist = ide:CreateImageList("STACK", "VALUE-CALL", "VALUE-LOCAL", "VALUE-UP")
local image = { STACK = 0, LOCAL = 1, UPVALUE = 2 }
do
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
local size = wx.wxSize(16,16)
local imglist = wx.wxImageList(16,16)
imglist:Add(getBitmap("GO-FORWARD", "OTHER", size)) -- 0 = stack call
imglist:Add(getBitmap("LIST-VIEW", "OTHER", size)) -- 1 = local variables
imglist:Add(getBitmap("REPORT-VIEW", "OTHER", size)) -- 2 = upvalues
debugger.imglist = imglist
end
local notebook = ide.frame.notebook
local CURRENT_LINE_MARKER = StylesGetMarker("currentline")
@@ -47,9 +39,9 @@ local activate = {CHECKONLY = 1, NOREPORT = 2}
local function serialize(value, options) return mobdebug.line(value, options) end
local stackmaxlength = ide.config.debugger.stackmaxlength or 400
local stackmaxnum = ide.config.debugger.stackmaxnum or 400
local stackmaxlevel = ide.config.debugger.stackmaxlevel or 3
local stackmaxlength = ide.config.debugger.maxdatalength
local stackmaxnum = ide.config.debugger.maxdatanum
local stackmaxlevel = ide.config.debugger.maxdatalevel
local params = {comment = false, nocode = true, maxlevel = stackmaxlevel, maxnum = stackmaxnum}
local function fixUTF8(...)
@@ -74,8 +66,9 @@ local function updateWatchesSync(onlyitem)
local watchCtrl = debugger.watchCtrl
local pane = ide.frame.uimgr:GetPane("watchpanel")
local shown = watchCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and watchCtrl:IsShown())
if shown and debugger.server and not debugger.running
and not debugger.scratchpad and not (debugger.options or {}).noeval then
local canupdate = (debugger.server and not debugger.running and not debugger.scratchpad
and not (debugger.options or {}).noeval)
if shown and canupdate then
local bgcl = watchCtrl:GetBackgroundColour()
local hicl = wx.wxColour(math.floor(bgcl:Red()*.9),
math.floor(bgcl:Green()*.9), math.floor(bgcl:Blue()*.9))
@@ -96,7 +89,7 @@ local function updateWatchesSync(onlyitem)
watchCtrl:SetItemValueIfExpandable(item, nil)
else
if #values == 0 then values = {'nil'} end
local ok, res = LoadSafe("return "..values[1])
local _, res = LoadSafe("return "..values[1])
watchCtrl:SetItemValueIfExpandable(item, res)
end
@@ -123,6 +116,8 @@ local function updateWatchesSync(onlyitem)
if onlyitem then break end
item = watchCtrl:GetNextSibling(item)
end
elseif not shown and canupdate then
debugger.needrefresh.watches = true
end
end
@@ -133,8 +128,8 @@ local function updateStackSync()
local stackCtrl = debugger.stackCtrl
local pane = ide.frame.uimgr:GetPane("stackpanel")
local shown = stackCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and stackCtrl:IsShown())
if shown and debugger.server and not debugger.running
and not debugger.scratchpad then
local canupdate = debugger.server and not debugger.running and not debugger.scratchpad
if shown and canupdate then
local stack, _, err = debugger.stack()
if not stack or #stack == 0 then
stackCtrl:DeleteAll()
@@ -184,7 +179,7 @@ local function updateStackSync()
local value, comment = val[1], fixUTF8(trimToMaxLength(tostring(val[2])))
local text = ("%s = %s%s"):
format(name, fixUTF8(trimToMaxLength(serialize(value, params))),
simpleType[type(value)] and "" or (" --[["..comment.."]]"))
(simpleType[type(value)] or not val[2]) and "" or (" --[["..comment.."]]"))
local item = stackCtrl:AppendItem(callitem, text, image.LOCAL)
stackCtrl:SetItemValueIfExpandable(item, value)
end
@@ -194,7 +189,7 @@ local function updateStackSync()
local value, comment = val[1], fixUTF8(trimToMaxLength(tostring(val[2])))
local text = ("%s = %s%s"):
format(name, fixUTF8(trimToMaxLength(serialize(value, params))),
simpleType[type(value)] and "" or (" --[["..comment.."]]"))
(simpleType[type(value)] or not val[2]) and "" or (" --[["..comment.."]]"))
local item = stackCtrl:AppendItem(callitem, text, image.UPVALUE)
stackCtrl:SetItemValueIfExpandable(item, value)
end
@@ -205,12 +200,14 @@ local function updateStackSync()
stackCtrl:EnsureVisible(stackCtrl:GetFirstChild(root))
stackCtrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
stackCtrl:Thaw()
elseif not shown and canupdate then
debugger.needrefresh.stack = true
end
end
local function updateStackAndWatches()
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateStackSync() updateWatchesSync() end)
@@ -219,14 +216,29 @@ end
local function updateWatches(item)
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateWatchesSync(item) end)
end
end
local function updateStack()
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running then
copas.addthread(function() updateStackSync() end)
end
end
local function debuggerToggleViews(show)
-- don't toggle if the current state is the same as the new one
local shown = debugger.toggleview.shown
if (show and shown) or (not show and not shown) then return end
debugger.toggleview.shown = nil
local mgr = ide.frame.uimgr
local refresh = false
for view, needed in pairs(debugger.toggleview) do
@@ -248,10 +260,11 @@ local function debuggerToggleViews(show)
end
end
if refresh then mgr:Update() end
if show then debugger.toggleview.shown = true end
end
local function killClient()
if (debugger.pid) then
if (debugger.pid and wx.wxProcess.Exists(debugger.pid)) then
-- using SIGTERM for some reason kills not only the debugee process,
-- but also some system processes, which leads to a blue screen crash
-- (at least on Windows Vista SP2)
@@ -262,8 +275,8 @@ local function killClient()
DisplayOutputLn(TR("Unable to stop program (pid: %d), code %d.")
:format(debugger.pid, ret))
end
debugger.pid = nil
end
debugger.pid = nil
end
local function activateDocument(file, line, activatehow)
@@ -299,12 +312,12 @@ local function activateDocument(file, line, activatehow)
-- when checking for the content remove all newlines as they may be
-- reported differently from the original by the Lua engine.
if document.filePath and fileName:SameAs(wx.wxFileName(document.filePath))
or content and content:gsub("[\n\r]","") == editor:GetText():gsub("[\n\r]","") then
or content and content:gsub("[\n\r]","") == editor:GetTextDyn():gsub("[\n\r]","") then
ClearAllCurrentLineMarkers()
if line then
if line == 0 then -- special case; find the first executable line
line = math.huge
local func = loadstring(editor:GetText())
local func = loadstring(editor:GetTextDyn())
if func then -- .activelines == {[3] = true, [4] = true, ...}
for l in pairs(debug.getinfo(func, "L").activelines) do
if l < line then line = l end
@@ -313,7 +326,18 @@ local function activateDocument(file, line, activatehow)
if line == math.huge then line = 1 end
end
local line = line - 1 -- editor line operations are zero-based
if debugger.runtocursor then
local ed, ln = unpack(debugger.runtocursor)
if ed:GetId() == editor:GetId() and ln == line then
DebuggerToggleBreakpoint(ed, ln)
debugger.runtocursor = nil
end
end
editor:MarkerAdd(line, CURRENT_LINE_MARKER)
editor:Refresh() -- needed for background markers that don't get refreshed (wx2.9.5)
-- expand fold if the activated line is in a folded fragment
if not editor:GetLineVisible(line) then editor:ToggleFold(editor:GetFoldParent(line)) end
-- found and marked what we are looking for;
-- don't need to activate with CHECKONLY (this assumes line is given)
@@ -401,7 +425,7 @@ end
debugger.shell = function(expression, isstatement)
-- check if the debugger is running and may be waiting for a response.
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
-- allow that request to finish, otherwise this function does nothing.
if debugger.running then debugger.update() end
if debugger.server and not debugger.running
and (not debugger.scratchpad or debugger.scratchpad.paused) then
@@ -441,7 +465,7 @@ debugger.shell = function(expression, isstatement)
if #values == 0 and (forceexpression or not isstatement) then
values = {'nil'}
end
DisplayShell(fixUTF8(unpack(values)))
DisplayShell(unpack(values))
end
-- refresh Stack and Watch windows if executed a statement (and no err)
@@ -526,8 +550,11 @@ debugger.listen = function(start)
end
DisplayOutputLn(TR("Debugger server started at %s:%d.")
:format(debugger.hostname, debugger.portnumber))
copas.autoclose = false
copas.addserver(server, function (skt)
-- pull any pending data not processed yet
if debugger.running then debugger.update() end
if debugger.server then
DisplayOutputLn(TR("Refused a request to start a new debugging session as there is one in progress already."))
return
@@ -561,9 +588,10 @@ debugger.listen = function(start)
debugger.stats = {line = 0}
debugger.missing = {}
debugger.editormap = {}
debugger.runtocursor = nil
local wxfilepath = GetEditorFileAndCurInfo()
local startfile = options.startwith
local startfile = ide:GetProjectStartFile() or options.startwith
or (wxfilepath and wxfilepath:GetFullPath())
if not startfile then
@@ -627,10 +655,14 @@ debugger.listen = function(start)
.." "..TR("Compilation error")
..":\n"..err)
return debugger.terminate()
elseif options.runstart and not debugger.scratchpad
and stoppedAtBreakpoint(file, line) then
activateDocument(file, line)
options.runstart = false
elseif options.runstart and not debugger.scratchpad then
if stoppedAtBreakpoint(file, line) then
activateDocument(file, line)
options.runstart = false
end
elseif file and line then
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
:format(file, line))
end
elseif not (options.run or debugger.scratchpad) then
local file, line, err = debugger.loadfile(startfile)
@@ -639,7 +671,7 @@ debugger.listen = function(start)
-- with start() method, which can't load new files
-- if file and line are set, this indicates option #2
if err then
DisplayOutputLn(TR("Can't debug the script in the active editor window.")
DisplayOutputLn(TR("Can't start debugging for '%s'."):format(startfile)
.." "..TR("Compilation error")
..":\n"..err)
return debugger.terminate()
@@ -677,9 +709,8 @@ debugger.listen = function(start)
end
if not activated then
DisplayOutputLn(TR("Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging.")
:format(file))
return debugger.terminate()
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
:format(file, line))
end
-- debugger may still be available for scratchpad,
@@ -687,7 +718,11 @@ debugger.listen = function(start)
debugger.scratchable = ide.interpreter.scratchextloop ~= nil
else
debugger.scratchable = true
activateDocument(startfile, 0) -- find the appropriate line
local activated = activateDocument(startfile, 0) -- find the appropriate line
if not activated then
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
:format(startfile, '?'))
end
end
end
@@ -713,6 +748,12 @@ debugger.listen = function(start)
activateDocument(file, line)
end
end
-- request attention if the debugging is stopped
if not debugger.running then RequestAttention() end
-- refresh toolbar and menus in case the main app is not active
ide:GetMainFrame():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
ide:GetToolBar():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
end)
debugger.listening = server
end
@@ -720,16 +761,13 @@ end
local function nameOutputTab(name)
local nbk = ide.frame.bottomnotebook
local index = nbk:GetPageIndex(ide:GetOutput())
if index then nbk:SetPageText(index, name) end
if index ~= -1 then nbk:SetPageText(index, name) end
end
debugger.handle = function(command, server, options)
local verbose = ide.config.debugger.verbose
local osexit, gprint
osexit, os.exit = os.exit, function () end
gprint, _G.print = _G.print, function (...)
if verbose then DisplayOutputLn(...) end
end
local gprint = _G.print
_G.print = function (...) if verbose then DisplayOutputLn(...) end end
nameOutputTab(TR("Output (running)"))
debugger.running = true
@@ -740,14 +778,15 @@ debugger.handle = function(command, server, options)
-- only set suspended if the debugging hasn't been terminated
if debugger.server then nameOutputTab(TR("Output (suspended)")) end
os.exit = osexit
_G.print = gprint
return file, line, err
end
debugger.exec = function(command)
debugger.exec = function(command, func)
if debugger.server and not debugger.running then
copas.addthread(function ()
-- execute a custom function (if any) in the context of this thread
if type(func) == 'function' then func() end
local out
local attempts = 0
while true do
@@ -783,7 +822,7 @@ debugger.exec = function(command)
-- If this happens, stop and report allowing users to set
-- breakpoints and step through.
if debugger.breaking then
DisplayOutputLn(TR("Debugging suspended at %s:%s (couldn't activate the file).")
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
:format(file, line))
updateStackAndWatches()
return
@@ -828,7 +867,12 @@ debugger.handleDirect = function(command)
end
debugger.loadfile = function(file)
return debugger.handle("load " .. file)
local f, l, err = debugger.handle("load " .. file)
if not f and wx.wxFileExists(file) and err and err:find("Cannot open file") then
local content = FileRead(file)
if content then return debugger.loadstring(file, content) end
end
return f, l, err
end
debugger.loadstring = function(file, string)
return debugger.handle("loadstring '" .. file .. "' " .. string)
@@ -854,9 +898,10 @@ do
-- if there is any pending activation
if debugger.activate then
local file, line, content = unpack(debugger.activate)
debugger.activate = nil
if content then
local editor = NewFile()
editor:SetText(content)
editor:SetTextDyn(content)
if not ide.config.debugger.allowediting
and not (debugger.options or {}).allowediting then
editor:SetReadOnly(true)
@@ -870,11 +915,16 @@ do
activateDocument(file, line)
end
end
debugger.activate = nil
end
end
end
local function isemptyline(editor, line)
local text = editor:GetLineDyn(line-1)
return not text:find("%S")
or (text:find("^%s*%-%-") ~= nil and text:find("^%s*%-%-%[=*%[") == nil)
end
debugger.terminate = function()
if debugger.server then
if debugger.pid then -- if there is PID, try local kill
@@ -890,10 +940,53 @@ debugger.trace = function()
debugger.loop = true
debugger.exec("step")
end
debugger.runto = function(editor, line)
-- check if the location is valid for a breakpoint
if isemptyline(editor, line+1) then return end
local ed, ln = unpack(debugger.runtocursor or {})
local same = ed and ln and ed:GetId() == editor:GetId() and ln == line
-- check if there is already a breakpoint in the "run to" location;
-- if so, don't mark the location as "run to" as it will stop there anyway
if bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0
and not same then
debugger.runtocursor = nil
debugger.run()
return
end
-- save the location of the breakpoint
debugger.runtocursor = {editor, line}
-- set breakpoint and execute run
debugger.exec("run", function()
-- if run-to-cursor location is already set, then remove the breakpoint,
-- but only if this location is different
if ed and ln and not same then
DebuggerToggleBreakpoint(ed, ln)
debugger.wait()
end
if not same then
DebuggerToggleBreakpoint(editor, line)
debugger.wait()
end
end)
end
debugger.wait = function()
-- wait for all results to come back
while debugger.running do debugger.update() end
end
debugger.over = function() debugger.exec("over") end
debugger.out = function() debugger.exec("out") end
debugger.run = function() debugger.exec("run") end
debugger.detach = function() debugger.exec("done") end
debugger.detach = function()
if debugger.running then
debugger.handleDirect("done")
debugger.server = nil
else
debugger.exec("done")
end
end
debugger.evaluate = function(expression) return debugger.handle('eval ' .. expression) end
debugger.execute = function(expression) return debugger.handle('exec ' .. expression) end
debugger.stack = function() return debugger.handle('stack') end
@@ -938,14 +1031,6 @@ debugger.quickeval = function(var, callback)
end
end
function DebuggerAddStackWindow()
return ide:AddPanel(debugger.stackCtrl, "stackpanel", TR("Stack"))
end
function DebuggerAddWatchWindow()
return ide:AddPanel(debugger.watchCtrl, "watchpanel", TR("Watch"))
end
local width, height = 360, 200
local keyword = {}
@@ -965,7 +1050,8 @@ end
local function debuggerCreateStackWindow()
local stackCtrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxSize(width, height),
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE + wx.wxTR_HIDE_ROOT)
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE
+ wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
debugger.stackCtrl = stackCtrl
@@ -1009,6 +1095,13 @@ local function debuggerCreateStackWindow()
return true
end)
stackCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
if debugger.needrefresh.stack then
updateStack()
debugger.needrefresh.stack = false
end
end)
-- register navigation callback
stackCtrl:Connect(wx.wxEVT_LEFT_DCLICK, function (event)
local item_id = stackCtrl:HitTest(event:GetPosition())
@@ -1023,23 +1116,23 @@ local function debuggerCreateStackWindow()
if file then
local editor = LoadFile(file,nil,true)
editor:SetFocus()
if line then editor:GotoPos(editor:PositionFromLine(line-1)) end
if line then editor:GotoLine(line-1) end
end
end)
local layout = ide:GetSetting("/view", "uimgrlayout")
if layout and not layout:find("stackpanel") then
ide.frame.bottomnotebook:AddPage(stackCtrl, TR("Stack"), true)
return
ide:AddPanelDocked(ide.frame.bottomnotebook, stackCtrl, "stackpanel", TR("Stack"))
else
ide:AddPanel(stackCtrl, "stackpanel", TR("Stack"))
end
DebuggerAddStackWindow()
end
local function debuggerCreateWatchWindow()
local watchCtrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxSize(width, height),
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE
+ wx.wxTR_HIDE_ROOT + wx.wxTR_EDIT_LABELS)
+ wx.wxTR_HIDE_ROOT + wx.wxTR_EDIT_LABELS + wx.wxNO_BORDER)
debugger.watchCtrl = watchCtrl
@@ -1093,9 +1186,8 @@ local function debuggerCreateWatchWindow()
and (watchCtrl:IsWatch(item) or watchCtrl:GetItemName(item) ~= nil))
end
function watchCtrl:UpdateItemValue(item, value)
function watchCtrl:GetItemFullExpression(item)
local expr = ''
local origitem = item
while true do
local name = watchCtrl:GetItemName(item)
expr = (watchCtrl:IsWatch(item)
@@ -1106,6 +1198,25 @@ local function debuggerCreateWatchWindow()
item = watchCtrl:GetItemParent(item)
if not item:IsOk() then break end
end
return expr, item:IsOk() and item or nil
end
function watchCtrl:CopyItemValue(item)
local expr = self:GetItemFullExpression(item)
if debugger.running then debugger.update() end
if debugger.server and not debugger.running
and (not debugger.scratchpad or debugger.scratchpad.paused) then
copas.addthread(function ()
local _, values, error = debugger.evaluate(expr)
ide:CopyToClipboard(error and error:gsub("%[.-%]:%d+:%s+","")
or (#values == 0 and 'nil' or values[1]))
end)
end
end
function watchCtrl:UpdateItemValue(item, value)
local expr, itemupd = self:GetItemFullExpression(item)
if debugger.running then debugger.update() end
if debugger.server and not debugger.running
@@ -1113,9 +1224,9 @@ local function debuggerCreateWatchWindow()
copas.addthread(function ()
local _, _, err = debugger.execute(expr..'='..value)
if err then
watchCtrl:SetItemText(origitem, 'error: '..err:gsub("%[.-%]:%d+:%s+",""))
else
updateWatchesSync(item)
watchCtrl:SetItemText(item, 'error: '..err:gsub("%[.-%]:%d+:%s+",""))
elseif itemupd then
updateWatchesSync(itemupd)
end
updateStackSync()
end)
@@ -1151,6 +1262,14 @@ local function debuggerCreateWatchWindow()
names[value] = nil
end)
watchCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
if debugger.needrefresh.watches then
updateWatches()
debugger.needrefresh.watches = false
end
end)
local item
-- wx.wxEVT_CONTEXT_MENU is only triggered over tree items on OSX,
-- but it needs to be also triggered below any item to add a watch,
@@ -1160,11 +1279,14 @@ local function debuggerCreateWatchWindow()
-- store the item to be used in edit/delete actions
item = watchCtrl:HitTest(watchCtrl:ScreenToClient(wx.wxGetMousePosition()))
local editlabel = watchCtrl:IsWatch(item) and TR("&Edit Watch") or TR("&Edit Value")
watchCtrl:PopupMenu(wx.wxMenu {
local menu = wx.wxMenu {
{ ID_ADDWATCH, TR("&Add Watch")..KSC(ID_ADDWATCH) },
{ ID_EDITWATCH, editlabel..KSC(ID_EDITWATCH) },
{ ID_DELETEWATCH, TR("&Delete Watch")..KSC(ID_DELETEWATCH) },
})
{ ID_COPYWATCHVALUE, TR("&Copy Value")..KSC(ID_COPYWATCHVALUE) },
}
PackageEventHandle("onMenuWatch", menu, watchCtrl, event)
watchCtrl:PopupMenu(menu)
item = nil
end)
@@ -1181,6 +1303,14 @@ local function debuggerCreateWatchWindow()
watchCtrl:Connect(ID_DELETEWATCH, wx.wxEVT_UPDATE_UI,
function (event) event:Enable(watchCtrl:IsWatch(item or watchCtrl:GetSelection())) end)
watchCtrl:Connect(ID_COPYWATCHVALUE, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event) watchCtrl:CopyItemValue(item or watchCtrl:GetSelection()) end)
watchCtrl:Connect(ID_COPYWATCHVALUE, wx.wxEVT_UPDATE_UI, function (event)
-- allow copying only when the debugger is available
event:Enable(item:IsOk() and debugger.server and not debugger.running
and (not debugger.scratchpad or debugger.scratchpad.paused))
end)
local label
watchCtrl:Connect(wx.wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,
function (event)
@@ -1229,10 +1359,10 @@ local function debuggerCreateWatchWindow()
local layout = ide:GetSetting("/view", "uimgrlayout")
if layout and not layout:find("watchpanel") then
ide.frame.bottomnotebook:AddPage(watchCtrl, TR("Watch"), true)
return
ide:AddPanelDocked(ide.frame.bottomnotebook, watchCtrl, "watchpanel", TR("Watch"))
else
ide:AddPanel(watchCtrl, "watchpanel", TR("Watch"))
end
DebuggerAddWatchWindow()
end
debuggerCreateStackWindow()
@@ -1264,6 +1394,11 @@ function DebuggerStop(resetpid)
debuggerToggleViews(false)
local lines = TR("traced %d instruction", debugger.stats.line):format(debugger.stats.line)
DisplayOutputLn(TR("Debugging session completed (%s)."):format(lines))
nameOutputTab(debugger.pid and TR("Output (running)") or TR("Output"))
if debugger.runtocursor then
local ed, ln = unpack(debugger.runtocursor)
DebuggerToggleBreakpoint(ed, ln)
end
else
-- it's possible that the application couldn't start, or that the
-- debugger in the application didn't start, which means there is
@@ -1280,17 +1415,26 @@ local function debuggerMakeFileName(editor)
or ide.config.default.fullname
end
function DebuggerToggleBreakpoint(editor, line)
local markers = editor:MarkerGet(line)
function DebuggerToggleBreakpoint(editor, line, value)
local isset = bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0
if value ~= nil and isset == value then return end
local filePath = debugger.editormap and debugger.editormap[editor]
or debuggerMakeFileName(editor)
if bit.band(markers, BREAKPOINT_MARKER_VALUE) > 0 then
if isset then
-- if there is pending "run-to-cursor" call at this location, remove it
local ed, ln = unpack(debugger.runtocursor or {})
local same = ed and ln and ed:GetId() == editor:GetId() and ln == line
if same then debugger.runtocursor = nil end
editor:MarkerDelete(line, BREAKPOINT_MARKER)
if debugger.server then debugger.breakpoint(filePath, line+1, false) end
else
if isemptyline(editor, line+1) then return end
editor:MarkerAdd(line, BREAKPOINT_MARKER)
if debugger.server then debugger.breakpoint(filePath, line+1, true) end
end
PackageEventHandle("onEditorMarkerUpdate", editor, BREAKPOINT_MARKER, line+1, not isset)
end
-- scratchpad functions
@@ -1305,7 +1449,7 @@ function DebuggerRefreshScratchpad()
and not CompileProgram(scratchpadEditor, { jumponerror = false, reportstats = false })
then return end
local code = StripShebang(scratchpadEditor:GetText())
local code = StripShebang(scratchpadEditor:GetTextDyn())
if debugger.scratchpad.running then
-- break the current execution first
-- don't try too frequently to avoid overwhelming the debugger
@@ -1315,7 +1459,7 @@ function DebuggerRefreshScratchpad()
debugger.scratchpad.running = now
end
else
local clear = ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT)
local clear = ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT)
local filePath = debuggerMakeFileName(scratchpadEditor)
-- wrap into a function call to make "return" to work with scratchpad
@@ -1334,7 +1478,7 @@ function DebuggerRefreshScratchpad()
debugger.scratchpad.updated = false
debugger.scratchpad.runs = (debugger.scratchpad.runs or 0) + 1
if clear then ClearOutput() end
if clear then ClearOutput(true) end
-- the code can be running in two ways under scratchpad:
-- 1. controlled by the application, requires stopper (most apps)
@@ -1431,7 +1575,7 @@ function DebuggerScratchpadOn(editor)
end
-- find start position and length of the number
local text = scratchpadEditor:GetText()
local text = scratchpadEditor:GetTextDyn()
local nstart = pos
while nstart >= 0
@@ -1444,14 +1588,15 @@ function DebuggerScratchpadOn(editor)
do nend = nend + 1 end
-- check if there is minus sign right before the number and include it
if nstart >= 0 and scratchpadEditor:GetTextRange(nstart,nstart+1) == '-' then
if nstart >= 0 and scratchpadEditor:GetTextRangeDyn(nstart,nstart+1) == '-' then
nstart = nstart - 1
end
scratchpad.start = nstart + 1
scratchpad.length = nend - nstart - 1
scratchpad.origin = scratchpadEditor:GetTextRange(nstart+1,nend)
scratchpad.origin = scratchpadEditor:GetTextRangeDyn(nstart+1,nend)
if tonumber(scratchpad.origin) then
scratchpad.point = point
scratchpadEditor:BeginUndoAction()
scratchpadEditor:CaptureMouse()
end
end)
@@ -1459,6 +1604,7 @@ function DebuggerScratchpadOn(editor)
scratchpadEditor:Connect(wx.wxEVT_LEFT_UP, function(event)
if debugger.scratchpad and debugger.scratchpad.point then
debugger.scratchpad.point = nil
scratchpadEditor:EndUndoAction()
scratchpadEditor:ReleaseMouse()
wx.wxSetCursor(wx.wxNullCursor) -- restore cursor
else event:Skip() end

File diff suppressed because it is too large Load Diff

View File

@@ -1,36 +1,40 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-16 Paul Kulchenko, ZeroBrane LLC
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
local ide = ide
--
-- filetree, treectrl for drive & project
--
ide.filetree = {
projdir = "",
projdirlist = {},
projdirpartmap = {},
projtree = nil,
projtreeCtrl = nil,
imglist = ide:CreateImageList("PROJECT",
"FOLDER", "FILE-KNOWN", "FILE-NORMAL", "FILE-NORMAL-START",
"FOLDER-MAPPED"),
settings = {extensionignore = {}, startfile = {}, mapped = {}},
}
local filetree = ide.filetree
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
local pathsep = GetPathSeparator()
local q = EscapeMagic
local image = {
DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2, FILEOTHERSTART = 3,
DIRECTORYMAPPED = 4,
}
MergeSettings(filetree.settings, ide:AddPackage('core.filetree', {}):GetSettings())
-- generic tree
-- ------------
local image = { DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2 }
do
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
local size = wx.wxSize(16, 16)
filetree.imglist = wx.wxImageList(16,16)
filetree.imglist:Add(getBitmap("FOLDER", "OTHER", size)) -- 0 = directory
filetree.imglist:Add(getBitmap("HELP-PAGE", "OTHER", size)) -- 1 = file known spec
filetree.imglist:Add(getBitmap("NORMAL-FILE", "OTHER", size)) -- 2 = file other
local function getIcon(name, isdir)
local startfile = GetFullPathIfExists(FileTreeGetDir(),
filetree.settings.startfile[FileTreeGetDir()])
local known = GetSpec(GetFileExt(name))
local icon = isdir and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
if startfile and startfile == name then icon = image.FILEOTHERSTART end
return icon
end
local function treeAddDir(tree,parent_id,rootdir)
@@ -43,31 +47,48 @@ local function treeAddDir(tree,parent_id,rootdir)
local cache = {}
local curr
for _, file in ipairs(FileSysGetRecursive(rootdir)) do
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
local known = GetSpec(GetFileExt(name))
local icon = #dir>0 and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
local item = items[name .. icon]
if item then -- existing item
-- keep deleting items until we find item
while true do
local next = (curr
and tree:GetNextSibling(curr)
or tree:GetFirstChild(parent_id))
if not next:IsOk() or name == tree:GetItemText(next) then
curr = next
break
end
tree:Delete(next)
end
else -- new item
curr = (curr
and tree:InsertItem(parent_id, curr, name, icon)
or tree:PrependItem(parent_id, name, icon))
if #dir>0 then tree:SetItemHasChildren(curr, FileDirHasContent(file)) end
local files = FileSysGetRecursive(rootdir)
local dirmapped = {}
if tree:IsRoot(parent_id) then
local mapped = filetree.settings.mapped[FileTreeGetDir()] or {}
table.sort(mapped)
-- insert into files at the sorted order
for i, v in ipairs(mapped) do
table.insert(files, i, v)
dirmapped[v] = true
end
end
for _, file in ipairs(files) do
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
local isdir = #dir>0
if isdir or not filetree.settings.extensionignore[GetFileExt(name)] then
local icon = getIcon(file, isdir)
-- keep full name for the mapped directories
if dirmapped[file] then name, icon = file, image.DIRECTORYMAPPED end
local item = items[name .. icon]
if item then -- existing item
-- keep deleting items until we find item
while true do
local next = (curr
and tree:GetNextSibling(curr)
or tree:GetFirstChild(parent_id))
if not next:IsOk() or name == tree:GetItemText(next) then
curr = next
break
end
tree:Delete(next)
end
else -- new item
curr = (curr
and tree:InsertItem(parent_id, curr, name, icon)
or tree:PrependItem(parent_id, name, icon))
if isdir then tree:SetItemHasChildren(curr, FileDirHasContent(file)) end
end
if curr:IsOk() then cache[iscaseinsensitive and name:lower() or name] = curr end
end
if curr:IsOk() then cache[iscaseinsensitive and name:lower() or name] = curr end
end
-- delete any leftovers (something that exists in the tree, but not on disk)
@@ -143,12 +164,14 @@ local function treeSetConnectorsAndIcons(tree)
local function isIt(item, imgtype) return tree:GetItemImage(item) == imgtype end
function tree:IsDirectory(item_id) return isIt(item_id, image.DIRECTORY) end
function tree:IsDirMapped(item_id) return isIt(item_id, image.DIRECTORYMAPPED) end
function tree:IsFileKnown(item_id) return isIt(item_id, image.FILEKNOWN) end
function tree:IsFileOther(item_id) return isIt(item_id, image.FILEOTHER) end
function tree:IsFileStart(item_id) return isIt(item_id, image.FILEOTHERSTART) end
function tree:IsRoot(item_id) return not tree:GetItemParent(item_id):IsOk() end
function tree:FindItem(match)
return findItem(self, wx.wxIsAbsolutePath(match) and match
return findItem(self, (wx.wxIsAbsolutePath(match) or match == '') and match
or MergeFullPath(ide:GetProject(), match))
end
@@ -161,7 +184,7 @@ local function treeSetConnectorsAndIcons(tree)
item_id = tree:GetItemParent(item_id)
if not item_id:IsOk() then break end
cur = tree:GetItemText(item_id)
if cur and string.len(cur) > 0 then str = cur..pathsep..str end
if cur and #cur > 0 then str = MergeFullPath(cur, str) end
end
-- as root may already include path separator, normalize the path
local fullPath = wx.wxFileName(str)
@@ -169,6 +192,17 @@ local function treeSetConnectorsAndIcons(tree)
return fullPath:GetFullPath()
end
function tree:RefreshChildren(node)
node = node or tree:GetRootItem()
treeAddDir(tree,node,tree:GetItemFullName(node))
local item, cookie = tree:GetFirstChild(node)
while true do
if not item:IsOk() then return end
if tree:IsExpanded(item) then tree:RefreshChildren(item) end
item, cookie = tree:GetNextChild(node, cookie)
end
end
local function refreshAncestors(node)
-- when this method is called from END_EDIT, it causes infinite loop
-- on OSX (wxwidgets 2.9.5) as Delete in treeAddDir calls END_EDIT again.
@@ -191,7 +225,7 @@ local function treeSetConnectorsAndIcons(tree)
end
-- refresh the folder
if (tree:IsDirectory(item_id)) then
if (tree:IsDirectory(item_id) or tree:IsDirMapped(item_id)) then
if wx.wxDirExists(name) then treeAddDir(tree,item_id,name)
else refreshAncestors(tree:GetItemParent(item_id)) end -- stale content
else -- open file
@@ -200,14 +234,42 @@ local function treeSetConnectorsAndIcons(tree)
end
end
local function unMapDir(dir)
local project = FileTreeGetDir()
local mapped = filetree.settings.mapped[project] or {}
for k, m in ipairs(mapped) do
if m == dir then table.remove(mapped, k) end
end
filetree.settings.mapped[project] = mapped
refreshAncestors(tree:GetRootItem())
end
local function mapDir()
local project = FileTreeGetDir()
local dirPicker = wx.wxDirDialog(ide.frame, TR("Choose a directory to map"),
project ~= "" and project or wx.wxGetCwd(), wx.wxDIRP_DIR_MUST_EXIST)
if dirPicker:ShowModal(true) ~= wx.wxID_OK then return end
local dir = wx.wxFileName.DirName(FixDir(dirPicker:GetPath())):GetFullPath()
local mapped = filetree.settings.mapped[project] or {}
for _, m in ipairs(mapped) do
if m == dir then return end -- already on the list
end
table.insert(mapped, dir)
filetree.settings.mapped[project] = mapped
refreshAncestors(tree:GetRootItem())
end
local empty = ""
local function renameItem(itemsrc, target)
local isdir = tree:GetItemImage(itemsrc) == image.DIRECTORY
local isnew = tree:GetItemText(itemsrc) == empty
local source = tree:GetItemFullName(itemsrc)
local cache = type(itemsrc) == 'table' and itemsrc or nil
local isdir = not cache and tree:IsDirectory(itemsrc) or cache and cache.isdir or false
local isnew = not cache and tree:GetItemText(itemsrc) == empty or cache and cache.isnew or false
local source = cache and cache.fullname or tree:GetItemFullName(itemsrc)
local fn = wx.wxFileName(target)
if wx.wxFileName(source):SameAs(fn) then return false end
-- check if the target is the same as the source;
-- SameAs check is not used here as "Test" and "test" are the same
-- on case insensitive systems, but need to be allowed in renaming.
if source == target then return end
local docs = {}
if not isnew then -- find if source is already opened in the editor
@@ -215,13 +277,17 @@ local function treeSetConnectorsAndIcons(tree)
and ide:FindDocumentsByPartialPath(source)
or {ide:FindDocument(source)})
for _, doc in ipairs(docs) do
if not isdir and PackageEventHandle("onEditorPreSave", doc.editor, source) == false then
return false
end
if SaveModifiedDialog(doc.editor, true) == wx.wxID_CANCEL then return end
end
end
-- check if existing file/dir is going to be overwritten
if (wx.wxFileExists(target) or wx.wxDirExists(target))
and not ApproveFileOverwrite() then return false end
local overwrite = ((wx.wxFileExists(target) or wx.wxDirExists(target))
and not wx.wxFileName(source):SameAs(fn))
if overwrite and not ApproveFileOverwrite() then return false end
if not fn:Mkdir(tonumber(755,8), wx.wxPATH_MKDIR_FULL) then
ReportError(TR("Unable to create directory '%s'."):format(target))
@@ -243,7 +309,7 @@ local function treeSetConnectorsAndIcons(tree)
end
end
refreshAncestors(tree:GetItemParent(itemsrc))
refreshAncestors(cache and cache.parent or tree:GetItemParent(itemsrc))
-- load file(s) into the same editor (if any); will also refresh the tree
if #docs > 0 then
for _, doc in ipairs(docs) do
@@ -251,7 +317,14 @@ local function treeSetConnectorsAndIcons(tree)
doc.filePath = nil -- remove path to avoid "file no longer exists" message
-- when moving folders, /foo/bar/file.lua can be replaced with
-- /foo/baz/bar/file.lua, so change /foo/bar to /foo/baz/bar
LoadFile(fullpath:gsub(q(source), target), doc.editor)
local path = (not iscaseinsensitive and fullpath:gsub(q(source), target)
or fullpath:lower():gsub(q(source:lower()), target))
local editor = LoadFile(path)
-- check if the file was loaded into another editor;
-- this is possible if "foo" is renamed to "bar" and both are opened;
-- if this happens, then "bar" is refreshed and "foo" can be closed.
if doc.editor:GetId() ~= editor:GetId() then ClosePage(doc.index) end
if not isdir and editor then PackageEventHandle("onEditorSave", editor) end
end
else -- refresh the tree and select the new item
local itemdst = tree:FindItem(target)
@@ -262,10 +335,23 @@ local function treeSetConnectorsAndIcons(tree)
tree:SetScrollPos(wx.wxHORIZONTAL, 0, true)
end
end
-- refresh the target if it's open and has been overwritten
if overwrite and not isdir then
local doc = ide:FindDocument(target)
if doc then LoadFile(doc:GetFilePath(), doc:GetEditor()) end
end
return true
end
local function deleteItem(item_id)
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
-- if delete is for mapped directory, unmap it instead
if tree:IsDirMapped(item_id) then
unMapDir(tree:GetItemText(item_id))
return
end
local isdir = tree:IsDirectory(item_id)
local source = tree:GetItemFullName(item_id)
if isdir and FileDirHasContent(source..pathsep) then return false end
@@ -282,7 +368,10 @@ local function treeSetConnectorsAndIcons(tree)
else
local doc = ide:FindDocument(source)
if doc then ClosePage(doc.index) end
wx.wxRemoveFile(source)
if not wx.wxRemoveFile(source) then
ReportError(TR("Unable to delete file '%s': %s")
:format(source, wx.wxSysErrorMsg()))
end
end
refreshAncestors(tree:GetItemParent(item_id))
return true
@@ -301,9 +390,21 @@ local function treeSetConnectorsAndIcons(tree)
tree:ActivateItem(event:GetItem())
end)
local function saveSettings()
ide:AddPackage('core.filetree', {}):SetSettings(filetree.settings)
end
-- refresh the tree
local function refreshChildren()
tree:RefreshChildren()
-- now mark the current file (if it was previously disabled)
local editor = ide:GetEditor()
if editor then FileTreeMarkSelected(ide:GetDocument(editor):GetFilePath()) end
end
-- handle context menu
local function addItem(item_id, name, img)
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
local isdir = tree:IsDirectory(item_id)
local parent = isdir and item_id or tree:GetItemParent(item_id)
if isdir then tree:Expand(item_id) end -- expand to populate if needed
@@ -316,6 +417,25 @@ local function treeSetConnectorsAndIcons(tree)
return item
end
local function unsetStartFile()
local project = FileTreeGetDir()
local startfile = filetree.settings.startfile[project]
filetree.settings.startfile[project] = nil
if startfile then
local item_id = tree:FindItem(startfile)
if item_id and item_id:IsOk() then
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
end
end
end
local function setStartFile(item_id)
local project = FileTreeGetDir()
local startfile = tree:GetItemFullName(item_id):gsub(project, "")
filetree.settings.startfile[project] = startfile
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
end
tree:Connect(ID_NEWFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
tree:EditLabel(addItem(tree:GetSelection(), empty, image.FILEOTHER))
@@ -329,13 +449,7 @@ local function treeSetConnectorsAndIcons(tree)
tree:Connect(ID_DELETEFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function() deleteItem(tree:GetSelection()) end)
tree:Connect(ID_COPYFULLPATH, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
local tdo = wx.wxTextDataObject(tree:GetItemFullName(tree:GetSelection()))
if wx.wxClipboard:Get():Open() then
wx.wxClipboard:Get():SetData(tdo)
wx.wxClipboard:Get():Close()
end
end)
function() ide:CopyToClipboard(tree:GetItemFullName(tree:GetSelection())) end)
tree:Connect(ID_OPENEXTENSION, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
local fname = tree:GetItemFullName(tree:GetSelection())
@@ -357,8 +471,48 @@ local function treeSetConnectorsAndIcons(tree)
end
end
end)
tree:Connect(ID_REFRESH, wx.wxEVT_COMMAND_MENU_SELECTED,
function() refreshChildren() end)
tree:Connect(ID_SHOWLOCATION, wx.wxEVT_COMMAND_MENU_SELECTED,
function() ShowLocation(tree:GetItemFullName(tree:GetSelection())) end)
tree:Connect(ID_HIDEEXTENSION, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
local ext = GetFileExt(tree:GetItemText(tree:GetSelection()))
filetree.settings.extensionignore[ext] = true
saveSettings()
refreshChildren()
end)
tree:Connect(ID_SHOWEXTENSIONALL, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
filetree.settings.extensionignore = {}
saveSettings()
refreshChildren()
end)
tree:Connect(ID_SETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
unsetStartFile()
setStartFile(tree:GetSelection())
saveSettings()
end)
tree:Connect(ID_UNSETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
unsetStartFile()
saveSettings()
end)
tree:Connect(ID_MAPDIRECTORY, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
mapDir()
saveSettings()
end)
tree:Connect(ID_UNMAPDIRECTORY, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
unMapDir(tree:GetItemText(tree:GetSelection()))
saveSettings()
end)
tree:Connect(ID_PROJECTDIRFROMDIR, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
ProjectUpdateProjectDir(tree:GetItemFullName(tree:GetSelection()))
end)
tree:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
function (event)
@@ -368,43 +522,97 @@ local function treeSetConnectorsAndIcons(tree)
local renamelabel = (tree:IsRoot(item_id)
and TR("&Edit Project Directory")
or TR("&Rename"))
local fname = tree:GetItemText(item_id)
local ext = GetFileExt(fname)
local startfile = filetree.settings.startfile[FileTreeGetDir()]
local menu = wx.wxMenu {
{ ID_NEWFILE, TR("New &File") },
{ ID_NEWDIRECTORY, TR("&New Directory") },
{ },
{ ID_RENAMEFILE, renamelabel..KSC(ID_RENAMEFILE) },
{ ID_DELETEFILE, TR("&Delete")..KSC(ID_DELETEFILE) },
{ ID_REFRESH, TR("Refresh") },
{ },
{ ID_HIDEEXTENSION, TR("Hide '.%s' Files"):format(ext) },
{ },
{ ID_SETSTARTFILE, TR("Set As Start File") },
{ ID_UNSETSTARTFILE, TR("Unset '%s' As Start File"):format(startfile or "<none>") },
{ },
{ ID_MAPDIRECTORY, TR("Map Directory...") },
{ ID_UNMAPDIRECTORY, TR("Unmap Directory") },
{ ID_OPENEXTENSION, TR("Open With Default Program") },
{ ID_COPYFULLPATH, TR("Copy Full Path") },
{ ID_SHOWLOCATION, TR("Show Location") },
}
local extlist = {
{},
{ ID_SHOWEXTENSIONALL, TR("Show All Files"), TR("Show all files") },
}
for ext in pairs(filetree.settings.extensionignore) do
local id = ID("filetree.showextension."..ext)
table.insert(extlist, 1, {id, '.'..ext})
menu:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED, function()
filetree.settings.extensionignore[ext] = nil
saveSettings()
refreshChildren()
end)
end
local _, _, hideextpos = ide:FindMenuItem(ID_HIDEEXTENSION, menu)
assert(hideextpos, "Can't find HideExtension menu item")
menu:Insert(hideextpos+1, wx.wxMenuItem(menu, ID_SHOWEXTENSION,
TR("Show Hidden Files"), TR("Show files previously hidden"),
wx.wxITEM_NORMAL, wx.wxMenu(extlist)))
local projectdirectorymenu = wx.wxMenu {
{ },
{ID_PROJECTDIRCHOOSE, TR("Choose...")..KSC(ID_PROJECTDIRCHOOSE), TR("Choose a project directory")},
{ID_PROJECTDIRFROMDIR, TR("Set To Selected Directory")..KSC(ID_PROJECTDIRFROMDIR), TR("Set project directory to the selected one")},
}
local projectdirectory = wx.wxMenuItem(menu, ID_PROJECTDIR,
TR("Project Directory"), TR("Set the project directory to be used"),
wx.wxITEM_NORMAL, projectdirectorymenu)
menu:Insert(6, projectdirectory)
local _, _, unmapdirpos = ide:FindMenuItem(ID_UNMAPDIRECTORY, menu)
assert(unmapdirpos, "Can't find UnMapDirectory menu item")
menu:Insert(unmapdirpos+1, projectdirectory)
FileTreeProjectListUpdate(projectdirectorymenu, 0)
-- disable Delete on non-empty directories
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
local isdir = tree:IsDirectory(item_id)
local ismapped = tree:IsDirMapped(item_id)
menu:Destroy(ismapped and ID_MAPDIRECTORY or ID_UNMAPDIRECTORY)
if not startfile then menu:Destroy(ID_UNSETSTARTFILE) end
if ismapped then menu:Enable(ID_RENAMEFILE, false) end
if isdir then
local source = tree:GetItemFullName(item_id)
menu:Enable(ID_DELETEFILE, not FileDirHasContent(source..pathsep))
menu:Enable(ID_OPENEXTENSION, false)
menu:Enable(ID_HIDEEXTENSION, false)
else
local fname = tree:GetItemText(item_id)
local ext = '.'..wx.wxFileName(fname):GetExt()
local ft = wx.wxTheMimeTypesManager:GetFileTypeFromExtension(ext)
local ft = wx.wxTheMimeTypesManager:GetFileTypeFromExtension('.'..ext)
menu:Enable(ID_OPENEXTENSION, ft and #ft:GetOpenCommand("") > 0)
menu:Enable(ID_HIDEEXTENSION, not filetree.settings.extensionignore[ext])
menu:Enable(ID_PROJECTDIRFROMDIR, false)
end
menu:Enable(ID_SETSTARTFILE, tree:IsFileOther(item_id) or tree:IsFileKnown(item_id))
menu:Enable(ID_SHOWEXTENSION, next(filetree.settings.extensionignore) ~= nil)
PackageEventHandle("onMenuFiletree", menu, tree, event)
-- stopping/restarting garbage collection is generally not needed,
-- but on Linux not stopping is causing crashes (wxwidgets 2.9.5 and 3.1.0)
-- when symbol indexing is done while popup menu is open (with gc methods in the trace).
-- this only happens when EVT_IDLE is called when popup menu is open.
collectgarbage("stop")
-- stopping UI updates is generally not needed as well,
-- but it's causing a crash on OSX (wxwidgets 2.9.5 and 3.1.0)
-- when symbol indexing is done while popup menu is open, so it's disabled
local interval = wx.wxUpdateUIEvent.GetUpdateInterval()
wx.wxUpdateUIEvent.SetUpdateInterval(-1) -- don't update
tree:PopupMenu(menu)
wx.wxUpdateUIEvent.SetUpdateInterval(interval)
collectgarbage("restart")
end)
tree:Connect(wx.wxEVT_RIGHT_DOWN,
@@ -430,7 +638,7 @@ local function treeSetConnectorsAndIcons(tree)
end
if item_id and bit.band(flags, mask) > 0 then
if tree:GetItemImage(item_id) == image.DIRECTORY then
if tree:IsDirectory(item_id) then
tree:Toggle(item_id)
tree:SelectItem(item_id)
else
@@ -447,7 +655,7 @@ local function treeSetConnectorsAndIcons(tree)
function (event)
local itemsrc = event:GetItem()
parent = tree:GetItemParent(itemsrc)
if not itemsrc:IsOk() then event:Veto() end
if not itemsrc:IsOk() or tree:IsDirMapped(itemsrc) then event:Veto() end
end)
tree:Connect(wx.wxEVT_COMMAND_TREE_END_LABEL_EDIT,
function (event)
@@ -461,19 +669,36 @@ local function treeSetConnectorsAndIcons(tree)
local label = event:GetLabel():gsub("^%s+$","") -- clean all spaces
-- edited the root element; set the new project directory if needed
local cancelled = event:IsEditCancelled()
if tree:IsRoot(itemsrc) then
if not event:IsEditCancelled() and wx.wxDirExists(label) then
if not cancelled and wx.wxDirExists(label) then
ProjectUpdateProjectDir(label)
end
return
end
if not parent or not parent:IsOk() then return end
local sourcedir = tree:GetItemFullName(parent)
local target = MergeFullPath(sourcedir, label)
if event:IsEditCancelled() or label == empty
or target and not renameItem(itemsrc, target)
then refreshAncestors(parent) end
local target = MergeFullPath(tree:GetItemFullName(parent), label)
if cancelled or label == empty then refreshAncestors(parent)
elseif target then
-- normally, none of this caching would be needed as `renameItem`
-- would be called to check if the item can be renamed;
-- however, as it may open a dialog box, on Linux it's causing a crash
-- (caused by the same END_LABEL_EDIT even triggered one more time),
-- so to protect from that, `renameItem` is called from IDLE event.
-- Unfortunately, by that time, the filetree item (`itemsrc`) may
-- already have incorrect state (as it's removed from the tree),
-- so its properties need to be cached to be used from IDLE event.
local cache = {
isdir = tree:IsDirectory(itemsrc),
isnew = tree:GetItemText(itemsrc) == empty,
fullname = tree:GetItemFullName(itemsrc),
parent = parent,
}
ide:DoWhenIdle(function()
if not renameItem(cache, target) then refreshAncestors(parent) end
end)
end
end)
local itemsrc
@@ -504,12 +729,11 @@ end
local projtree = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize,
wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE + wx.wxTR_LINES_AT_ROOT
+ wx.wxTR_EDIT_LABELS)
+ wx.wxTR_EDIT_LABELS + wx.wxNO_BORDER)
projtree:SetFont(ide.font.fNormal)
filetree.projtree = projtree
filetree.projtreeCtrl = projtree
local projnotebook = ide.frame.projnotebook
projnotebook:AddPage(projtree, "Project", true)
ide:GetProjectNotebook():AddPage(projtree, TR("Project"), true)
-- proj connectors
-- ---------------
@@ -529,6 +753,10 @@ function filetree:updateProjectDir(newdir)
-- strip the last path separator if any
local newdir = dirname:GetPath(wx.wxPATH_GET_VOLUME)
-- save the current interpreter as it may be reset in onProjectClose
-- when the project event handlers manipulates interpreters
local intfname = ide.interpreter and ide.interpreter.fname
if filetree.projdir and #filetree.projdir > 0 then
PackageEventHandle("onProjectClose", filetree.projdir)
end
@@ -536,7 +764,7 @@ function filetree:updateProjectDir(newdir)
PackageEventHandle("onProjectPreLoad", newdir)
if ide.config.projectautoopen and filetree.projdir then
StoreRestoreProjectTabs(filetree.projdir, newdir)
StoreRestoreProjectTabs(filetree.projdir, newdir, intfname)
end
filetree.projdir = newdir
@@ -587,7 +815,7 @@ local function getProjectLabels()
local parts = wx.wxFileName(proj..pathsep):GetDirs()
table.insert(labels, ExpandPlaceholders(fmt, {
f = proj,
i = interpreter and interpreter:GetName() or '?',
i = interpreter and interpreter:GetName() or (intfname or '')..'?',
s = parts[#parts] or '',
}))
end
@@ -630,7 +858,7 @@ local curr_file
function FileTreeMarkSelected(file)
if not file or not filetree.projdir or #filetree.projdir == 0 then return end
local item_id = projtree:FindItem(file)
local item_id = wx.wxIsAbsolutePath(file) and projtree:FindItem(file)
-- if the select item is different from the current one
-- or the current one is the same, but not bold (which may happen when
@@ -638,7 +866,7 @@ function FileTreeMarkSelected(file)
if curr_file ~= file
or item_id and not projtree:IsBold(item_id) then
if curr_file then
local curr_id = projtree:FindItem(curr_file)
local curr_id = wx.wxIsAbsolutePath(curr_file) and projtree:FindItem(curr_file)
if curr_id and projtree:IsBold(curr_id) then
projtree:SetItemBold(curr_id, false)
end

File diff suppressed because it is too large Load Diff

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)
---------------------------------------------------------
@@ -25,19 +25,13 @@ do local gui, config = wx.wxTreeCtrl():GetFont(), ide.config.filetree
ide.font.fNormal = gui
end
-- funcList font requires similar handling
do local gui, config = wx.wxTreeCtrl():GetFont(), ide.config.funclist
if config.fontsize then gui:SetPointSize(config.fontsize) end
if config.fontname then gui:SetFaceName(config.fontname) end
ide.font.dNormal = gui
end
-- ----------------------------------------------------------------------------
-- Create the wxFrame
-- ----------------------------------------------------------------------------
local function createFrame()
local frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, GetIDEString("editor"),
wx.wxDefaultPosition, wx.wxSize(1000, 700))
wx.wxDefaultPosition, wx.wxSize(1100, 700))
frame:Center()
-- wrap into protected call as DragAcceptFiles fails on MacOS with
-- wxwidgets 2.8.12 even though it should work according to change notes
-- for 2.8.10: "Implemented wxWindow::DragAcceptFiles() on all platforms."
@@ -45,22 +39,43 @@ local function createFrame()
frame:Connect(wx.wxEVT_DROP_FILES,function(evt)
local files = evt:GetFiles()
if not files or #files == 0 then return end
for i,f in ipairs(files) do
for _, f in ipairs(files) do
LoadFile(f,nil,true)
end
end)
-- update best size of the toolbar after resizing
frame:Connect(wx.wxEVT_SIZE, function(event)
local mgr = ide:GetUIManager()
local toolbar = mgr:GetPane("toolbar")
if toolbar and toolbar:IsOk() then
toolbar:BestSize(event:GetSize():GetWidth(), ide:GetToolBar():GetClientSize():GetHeight())
mgr:Update()
end
end)
local menuBar = wx.wxMenuBar()
local statusBar = frame:CreateStatusBar(6)
local statusBar = frame:CreateStatusBar(5)
local section_width = statusBar:GetTextExtent("OVRW")
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT,
wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
statusBar:SetStatusWidths(
{-1, section_width*6, section_width, section_width, section_width*5, section_width*4})
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
statusBar:SetStatusWidths({-1, section_width, section_width, section_width*5, section_width*4})
statusBar:SetStatusText(GetIDEString("statuswelcome"))
statusBar:Connect(wx.wxEVT_LEFT_DOWN, function (event)
local rect = wx.wxRect()
statusBar:GetFieldRect(4, rect)
if rect:Contains(event:GetPosition()) then -- click on the interpreter
local menuitem = ide:FindMenuItem(ID.INTERPRETER)
if menuitem then
local menu = ide:CloneMenu(menuitem:GetSubMenu())
if menu then statusBar:PopupMenu(menu) end
end
end
end)
local mgr = wxaui.wxAuiManager()
mgr:SetManagedWindow(frame)
-- allow the panes to be larger than the defalt 1/3 of the main window size
mgr:SetDockSizeConstraint(0.8,0.8)
frame.menuBar = menuBar
frame.statusBar = statusBar
@@ -81,8 +96,9 @@ local function menuDropDownPosition(event)
end
local function tbIconSize()
-- use large icons by default on OSX and on large screens
local iconsize = (tonumber(ide.config.toolbar and ide.config.toolbar.iconsize)
or (ide.osname == 'Macintosh' and 24 or 16))
or ((ide.osname == 'Macintosh' or wx.wxGetClientDisplayRect():GetWidth() >= 1500) and 24 or 16))
if iconsize ~= 24 then iconsize = 16 end
return iconsize
end
@@ -90,14 +106,10 @@ end
local function createToolBar(frame)
local toolBar = wxaui.wxAuiToolBar(frame, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize,
wxaui.wxAUI_TB_PLAIN_BACKGROUND)
-- wxChoice is a bit too narrow on Linux, so make it a bit larger
local funclist = wx.wxChoice.new(toolBar, ID "toolBar.funclist",
wx.wxDefaultPosition, wx.wxSize.new(240, ide.osname == 'Unix' and 28 or 24))
-- there are two sets of icons: use 24 on OSX and 16 on others.
local iconsize = tbIconSize()
local toolBmpSize = wx.wxSize(iconsize, iconsize)
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
local icons, prev = ide.config.toolbar.icons
for _, id in ipairs(icons) do
if icons[id] ~= false then -- skip explicitly disabled icons
@@ -110,14 +122,13 @@ local function createToolBar(frame)
if iconmap then
local icon, description = unpack(iconmap)
local isbitmap = type(icon) == "userdata" and icon:GetClassInfo():GetClassName() == "wxBitmap"
local bitmap = isbitmap and icon or getBitmap(icon, "TOOLBAR", toolBmpSize)
toolBar:AddTool(id, "", bitmap, TR(description)..SCinB(id))
local bitmap = isbitmap and icon or ide:GetBitmap(icon, "TOOLBAR", toolBmpSize)
toolBar:AddTool(id, "", bitmap, (TR)(description)..SCinB(id))
end
end
prev = id
end
end
toolBar:AddControl(funclist)
toolBar:SetToolDropDown(ID_OPEN, true)
toolBar:Connect(ID_OPEN, wxaui.wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, function(event)
@@ -144,7 +155,6 @@ local function createToolBar(frame)
toolBar:GetArtProvider():SetElementSize(wxaui.wxAUI_TBART_GRIPPER_SIZE, 0)
toolBar:Realize()
toolBar.funclist = funclist
frame.toolBar = toolBar
return toolBar
end
@@ -214,6 +224,8 @@ local function createNotebook(frame)
local editor = GetEditor(page)
if editor then ide.openDocuments[editor:GetId()].index = page end
end
-- first set the selection on the dragged tab to reset its state
notebook:SetSelection(event:GetSelection())
-- select the content of the tab after drag is done
SetEditorSelection(event:GetSelection())
event:Skip()
@@ -255,13 +267,14 @@ local function createNotebook(frame)
or event:GetId() == ID_CLOSE and notebook:GetPageCount() <= 1)
then event:Enable(false) end
end
local function IfModified(event) event:Enable(EditorIsModified(GetEditor(selection))) end
notebook:Connect(ID_SAVE, wx.wxEVT_COMMAND_MENU_SELECTED, function ()
local editor = GetEditor(selection)
SaveFile(editor, ide.openDocuments[editor:GetId()].filePath)
ide:GetDocument(GetEditor(selection)):Save()
end)
notebook:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI, function(event)
local doc = ide:GetDocument(GetEditor(selection))
event:Enable(doc:IsModified() or doc:IsNew())
end)
notebook:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI, IfModified)
notebook:Connect(ID_SAVEAS, wx.wxEVT_COMMAND_MENU_SELECTED, function()
SaveFileAs(GetEditor(selection))
end)
@@ -286,29 +299,29 @@ local function createNotebook(frame)
notebook:Connect(ID_SHOWLOCATION, wx.wxEVT_UPDATE_UI, IfAtLeastOneTab)
notebook:Connect(ID_COPYFULLPATH, wx.wxEVT_COMMAND_MENU_SELECTED, function()
local tdo = wx.wxTextDataObject(ide:GetDocument(GetEditor(selection)):GetFilePath())
if wx.wxClipboard:Get():Open() then
wx.wxClipboard:Get():SetData(tdo)
wx.wxClipboard:Get():Close()
end
ide:CopyToClipboard(ide:GetDocument(GetEditor(selection)):GetFilePath())
end)
frame.notebook = notebook
return notebook
end
local function createBottomNotebook(frame)
-- bottomnotebook (errorlog,shellbox)
local bottomnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize,
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
-- this handler allows dragging tabs into this bottom notebook
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND,
local function addDND(notebook)
-- this handler allows dragging tabs into this notebook
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND,
function (event)
local notebookfrom = event:GetDragSource()
if notebookfrom ~= ide.frame.notebook then
-- disable cross-notebook movement of specific tabs
local win = notebookfrom:GetPage(event:GetSelection())
if not win then return end
local winid = win:GetId()
if winid == ide:GetOutput():GetId()
or winid == ide:GetConsole():GetId()
or winid == ide:GetProjectTree():GetId()
or ide.findReplace:IsPreview(win) -- search results preview
then return end
local mgr = ide.frame.uimgr
local pane = mgr:GetPane(notebookfrom)
if not pane:IsOk() then return end -- not a managed window
@@ -331,19 +344,19 @@ local function createBottomNotebook(frame)
end
end)
-- these handlers allow dragging tabs out of this bottom notebook.
-- these handlers allow dragging tabs out of this notebook.
-- I couldn't find a good way to stop dragging event as it's not known
-- where the event is going to end when it's started, so we manipulate
-- the flag that allows splits and disable it when needed.
-- It is then enabled in BEGIN_DRAG event.
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG,
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG,
function (event)
event:Skip()
-- allow dragging if it was disabled earlier
local flags = bottomnotebook:GetWindowStyleFlag()
local flags = notebook:GetWindowStyleFlag()
if bit.band(flags, wxaui.wxAUI_NB_TAB_SPLIT) == 0 then
bottomnotebook:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_TAB_SPLIT)
notebook:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_TAB_SPLIT)
end
end)
@@ -352,12 +365,12 @@ local function createBottomNotebook(frame)
-- recreating it with the right control. This is complicated by the fact
-- that tabs can be split, so if the destination is withing the area where
-- splits happen, the tab is not removed.
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_END_DRAG,
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_END_DRAG,
function (event)
event:Skip()
local mgr = ide.frame.uimgr
local win = mgr:GetPane(bottomnotebook).window
local win = mgr:GetPane(notebook).window
local x = win:GetScreenPosition():GetX()
local y = win:GetScreenPosition():GetY()
local w, h = win:GetSize():GetWidth(), win:GetSize():GetHeight()
@@ -368,50 +381,69 @@ local function createBottomNotebook(frame)
if mx >= x and mx <= x + w and my >= y and my <= y + h then return end
-- disallow split as the target is outside the notebook
local flags = bottomnotebook:GetWindowStyleFlag()
local flags = notebook:GetWindowStyleFlag()
if bit.band(flags, wxaui.wxAUI_NB_TAB_SPLIT) ~= 0 then
bottomnotebook:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_TAB_SPLIT)
notebook:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_TAB_SPLIT)
end
-- don't allow any dragging to the are of the pane header as it
-- splits already split notebooks incorrectly (wxwidgets bug).
if my >= y - 30 then return end
-- don't allow dragging out single tabs from tab ctrl
-- as wxwidgets doesn't like removing pages from split notebooks.
local tabctrl = event:GetEventObject():DynamicCast("wxAuiTabCtrl")
if tabctrl:GetPageCount() == 1 then return end
local idx = event:GetSelection() -- index within the current tab ctrl
local selection = bottomnotebook:GetPageIndex(tabctrl:GetPage(idx).window)
local label = bottomnotebook:GetPageText(selection)
local selection = notebook:GetPageIndex(tabctrl:GetPage(idx).window)
local label = notebook:GetPageText(selection)
local pane = ide:RestorePanelByLabel(label)
if not pane then return end
-- names are translated on labels, so need to translate here as well
local dragout = ({
[TR("Watch")] = DebuggerAddWatchWindow,
[TR("Stack")] = DebuggerAddStackWindow,
})[label]
if not dragout then return end
bottomnotebook:RemovePage(selection)
local pane = mgr:GetPane(dragout())
pane:FloatingPosition(mx-10, my-10)
pane:Show()
notebook:RemovePage(selection)
mgr:Update()
end)
end
local function createBottomNotebook(frame)
-- bottomnotebook (errorlog,shellbox)
local bottomnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize,
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
addDND(bottomnotebook)
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED,
function (event)
if not ide.findReplace then return end
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
local preview = ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection()))
local flags = nb:GetWindowStyleFlag()
if preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) == 0 then
nb:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
elseif not preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) ~= 0 then
nb:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
end
end)
-- disallow tabs closing
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
function (event) event:Veto() end)
function (event)
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
if ide.findReplace
and ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection())) then
event:Skip()
else
event:Veto()
end
end)
local errorlog = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
local errorlog = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
errorlog:Connect(wx.wxEVT_CONTEXT_MENU,
function (event)
errorlog:PopupMenu(
wx.wxMenu {
local menu = wx.wxMenu {
{ ID_UNDO, TR("&Undo") },
{ ID_REDO, TR("&Redo") },
{ },
@@ -422,16 +454,40 @@ local function createBottomNotebook(frame)
{ },
{ ID_CLEAROUTPUT, TR("C&lear Output Window") },
}
)
PackageEventHandle("onMenuOutput", menu, errorlog, event)
errorlog:PopupMenu(menu)
end)
errorlog:Connect(ID_CLEAROUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED,
function(event)
ClearOutput()
function(event) ClearOutput(true) end)
local shellbox = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
local menupos
shellbox:Connect(wx.wxEVT_CONTEXT_MENU,
function (event)
local menu = wx.wxMenu {
{ ID_UNDO, TR("&Undo") },
{ ID_REDO, TR("&Redo") },
{ },
{ ID_CUT, TR("Cu&t") },
{ ID_COPY, TR("&Copy") },
{ ID_PASTE, TR("&Paste") },
{ ID_SELECTALL, TR("Select &All") },
{ },
{ ID_SELECTCONSOLECOMMAND, TR("&Select Command") },
{ ID_CLEARCONSOLE, TR("C&lear Console Window") },
}
menupos = event:GetPosition()
PackageEventHandle("onMenuConsole", menu, shellbox, event)
shellbox:PopupMenu(menu)
end)
local shellbox = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
shellbox:Connect(ID_SELECTCONSOLECOMMAND, wx.wxEVT_COMMAND_MENU_SELECTED,
function(event) ConsoleSelectCommand(menupos) end)
shellbox:Connect(ID_CLEARCONSOLE, wx.wxEVT_COMMAND_MENU_SELECTED,
function(event) ide:GetConsole():Erase() end)
bottomnotebook:AddPage(errorlog, TR("Output"), true)
bottomnotebook:AddPage(shellbox, TR("Local console"), false)
@@ -446,9 +502,11 @@ end
local function createProjNotebook(frame)
local projnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxDefaultSize,
wxaui.wxAUI_NB_DEFAULT_STYLE
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
addDND(projnotebook)
-- disallow tabs closing
projnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
function (event) event:Veto() end)
@@ -479,7 +537,7 @@ do
Name("notebook"):
CenterPane():PaneBorder(false))
mgr:AddPane(frame.projnotebook, wxaui.wxAuiPaneInfo():
Name("projpanel"):CaptionVisible(false):Caption(TR("Project")):
Name("projpanel"):CaptionVisible(false):
MinSize(200,200):FloatingSize(200,400):
Left():Layer(1):Position(1):PaneBorder(false):
CloseButton(true):MaximizeButton(false):PinButton(true))
@@ -489,9 +547,12 @@ do
Bottom():Layer(1):Position(1):PaneBorder(false):
CloseButton(true):MaximizeButton(false):PinButton(true))
for _, uimgr in pairs {mgr, frame.notebook:GetAuiManager(),
frame.bottomnotebook:GetAuiManager(), frame.projnotebook:GetAuiManager()} do
uimgr:GetArtProvider():SetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE, 2)
if type(ide.config.bordersize) == 'number' then
for _, uimgr in pairs {mgr, frame.notebook:GetAuiManager(),
frame.bottomnotebook:GetAuiManager(), frame.projnotebook:GetAuiManager()} do
uimgr:GetArtProvider():SetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE,
ide.config.bordersize)
end
end
for _, nb in pairs {frame.bottomnotebook, frame.projnotebook} do

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,9 +25,6 @@ ID_NEWFILE = NewID()
ID_NEWDIRECTORY = NewID()
ID_RENAMEFILE = NewID()
ID_DELETEFILE = NewID()
ID_OPENEXTENSION = NewID()
ID_COPYFULLPATH = NewID()
ID_SHOWLOCATION = NewID()
ID_SAVE = linux and NewID() or wx.wxID_SAVE
ID_SAVEAS = linux and NewID() or wx.wxID_SAVEAS
ID_SAVEALL = NewID()
@@ -38,6 +35,8 @@ ID_RECENTFILESNEXT = NewID()
ID_RECENTPROJECTS = NewID()
ID_RECENTPROJECTSCLEAR = NewID()
ID_RECENTPROJECTSPREV = NewID()
ID_PRINT = NewID()
ID_PAGESETUP = NewID()
ID_EXIT = linux and NewID() or wx.wxID_EXIT
-- Edit menu
ID_CUT = linux and NewID() or wx.wxID_CUT
@@ -58,6 +57,11 @@ ID_BOOKMARK = NewID()
ID_BOOKMARKTOGGLE = NewID()
ID_BOOKMARKNEXT = NewID()
ID_BOOKMARKPREV = NewID()
ID_NAVIGATE = NewID()
ID_NAVIGATETOFILE = NewID()
ID_NAVIGATETOLINE = NewID()
ID_NAVIGATETOSYMBOL = NewID()
ID_NAVIGATETOMETHOD = NewID()
-- don't use wx.wxID_PREFERENCES to avoid merging with OSX app menu, because
-- Apple guidelines describe Preferences as a "normal" item without submenus.
ID_PREFERENCES = NewID()
@@ -72,13 +76,14 @@ ID_FINDSELECTPREV = NewID()
ID_REPLACE = NewID()
ID_FINDINFILES = NewID()
ID_REPLACEINFILES = NewID()
ID_GOTOLINE = NewID()
ID_SORT = NewID()
-- View menu
ID_VIEWFILETREE = NewID()
ID_VIEWOUTPUT = NewID()
ID_VIEWCALLSTACK = NewID()
ID_VIEWWATCHWINDOW = NewID()
ID_VIEWOUTLINE = NewID()
ID_VIEWMARKERS = NewID()
ID_VIEWTOOLBAR = NewID()
ID_VIEWSTATUSBAR = NewID()
ID_VIEWDEFAULTLAYOUT = NewID()
@@ -89,7 +94,11 @@ ID_ZOOMRESET = NewID()
ID_ZOOMIN = NewID()
ID_ZOOMOUT = NewID()
-- Project menu
ID_TOGGLEBREAKPOINT = NewID()
ID_BREAKPOINT = NewID()
ID_BREAKPOINTTOGGLE = NewID()
ID_BREAKPOINTNEXT = NewID()
ID_BREAKPOINTPREV = NewID()
ID_TOGGLEBREAKPOINT = ID_BREAKPOINTTOGGLE -- for compatibility; to remove after v1.30
ID_COMPILE = NewID()
ID_ANALYZE = NewID()
ID_RUN = NewID()
@@ -101,13 +110,16 @@ ID_DETACHDEBUG = NewID()
ID_STEP = NewID()
ID_STEPOVER = NewID()
ID_STEPOUT = NewID()
ID_RUNTO = NewID()
ID_BREAK = NewID()
ID_TRACE = NewID()
ID_CLEAROUTPUT = NewID()
ID_CLEARCONSOLE = NewID()
ID_COMMANDLINEPARAMETERS = NewID()
ID_INTERPRETER = NewID()
ID_PROJECTDIR = NewID()
ID_PROJECTDIRFROMFILE = NewID()
ID_PROJECTDIRFROMDIR = NewID()
ID_PROJECTDIRCHOOSE = NewID()
-- Help menu
ID_ABOUT = linux and NewID() or wx.wxID_ABOUT
@@ -121,6 +133,7 @@ ID_HELPCOMMUNITY = NewID()
ID_ADDWATCH = NewID()
ID_EDITWATCH = NewID()
ID_DELETEWATCH = NewID()
ID_COPYWATCHVALUE = NewID()
-- Editor popup menu items
ID_GOTODEFINITION = NewID()
ID_RENAMEALLINSTANCES = NewID()
@@ -128,13 +141,50 @@ ID_REPLACEALLSELECTIONS = NewID()
ID_QUICKADDWATCH = NewID()
ID_QUICKEVAL = NewID()
ID_ADDTOSCRATCHPAD = NewID()
-- filetree menu
ID_HIDEEXTENSION = NewID()
ID_SETSTARTFILE = NewID()
ID_UNSETSTARTFILE = NewID()
ID_SHOWEXTENSION = NewID()
ID_SHOWEXTENSIONALL = NewID()
ID_MAPDIRECTORY = NewID()
ID_UNMAPDIRECTORY = NewID()
ID_OPENEXTENSION = NewID()
ID_COPYFULLPATH = NewID()
ID_SHOWLOCATION = NewID()
ID_REFRESH = NewID()
ID_SYMBOLDIRREFRESH = NewID()
ID_SYMBOLDIRINDEX = NewID()
ID_SYMBOLDIRDISABLE = NewID()
ID_SYMBOLDIRENABLE = NewID()
-- outline menu
ID_OUTLINESORT = NewID()
-- console menu
ID_SELECTCONSOLECOMMAND = NewID()
-- search toolbar
ID_FINDALL = NewID()
ID_FINDREPLACENEXT = NewID()
ID_FINDREPLACEALL = NewID()
ID_FINDSETDIR = NewID()
ID_FINDSETTOPROJDIR = NewID()
ID_FINDOPTSCOPE = NewID()
ID_FINDOPTSTATUS = NewID()
ID_FINDOPTDIRECTION = NewID()
ID_FINDOPTWRAPWROUND = NewID()
ID_FINDOPTSELECTION = NewID()
ID_FINDOPTWORD = NewID()
ID_FINDOPTCASE = NewID()
ID_FINDOPTREGEX = NewID()
ID_FINDOPTCONTEXT = NewID()
ID_FINDOPTSUBDIR = NewID()
ID_FINDOPTMULTIRESULTS = NewID()
ID_RECENTSCOPECLEAR = NewID()
local ids = {}
function ID (name)
ids[name] = ids[name] or NewID()
return ids[name]
function IDgen (name)
ids[name] = ids[name] or NewID()
return ids[name]
end
function IDget (name) return ids[name] end
function IDget (name)
return ids[name]
end
ID = setmetatable({}, ide.proto.ID)

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,34 +15,43 @@ local function init()
LA = require "luainspect.ast"
LI = require "luainspect.init"
T = require "luainspect.types"
end
if FAST then
LI.eval_comments = function () end
LI.infer_values = function () end
end
function M.pos2line(pos)
return pos and 1 + select(2, M.src:sub(1,pos):gsub(".-\n[^\n]*", ""))
end
function M.warnings_from_string(src, file)
init()
local ast, err, linenum, colnum = LA.ast_from_string(src, file)
if err then return nil, err, linenum, colnum end
if not ast and err then return nil, err, linenum, colnum end
if FAST then
LI.inspect(ast, nil, src)
LA.ensure_parents_marked(ast)
else
LI.uninspect(ast)
if ide.config.staticanalyzer.infervalue then
local tokenlist = LA.ast_to_tokenlist(ast, src)
LI.clear_cache()
LI.inspect(ast, tokenlist, src)
LI.mark_related_keywords(ast, tokenlist, src)
else
-- stub out LI functions that depend on tokenlist,
-- which is not built in the "fast" mode
local ec, iv = LI.eval_comments, LI.infer_values
LI.eval_comments, LI.infer_values = function() end, function() end
LI.inspect(ast, nil, src)
LA.ensure_parents_marked(ast)
LI.eval_comments, LI.infer_values = ec, iv
end
local globinit = {}
local globinit = {arg = true} -- skip `arg` global variable
local spec = GetSpec(wx.wxFileName(file):GetExt())
for k in pairs(spec and GetApi(spec.apitype or "none").ac.childs or {}) do
globinit[k] = true
end
M.src, M.file = src, file
return M.show_warnings(ast, globinit)
end
@@ -52,31 +60,40 @@ local function cleanError(err)
end
function AnalyzeFile(file)
local warn, err, line, pos = M.warnings_from_string(FileRead(file), file)
local src, err = FileRead(file)
if not src and err then return nil, TR("Can't open file '%s': %s"):format(file, err) end
local warn, err, line, pos = M.warnings_from_string(src, file)
return warn, cleanError(err), line, pos
end
function AnalyzeString(src)
local warn, err, line, pos = M.warnings_from_string(src, "<string>")
function AnalyzeString(src, file)
local warn, err, line, pos = M.warnings_from_string(src, file or "<string>")
return warn, cleanError(err), line, pos
end
function M.show_warnings(top_ast, globinit)
local warnings = {}
local function warn(msg, linenum, path)
warnings[#warnings+1] = (path or "?") .. ":" .. (linenum or 0) .. ": " .. msg
warnings[#warnings+1] = (path or M.file or "?") .. ":" .. (linenum or M.pos2line(M.ast.pos) or 0) .. ": " .. msg
end
local function known(o) return not T.istype[o] end
local function index(f) -- build abc.def.xyz name recursively
return (f[1].tag == 'Id' and f[1][1] or index(f[1])) .. '.' .. f[2][1] end
if not f or f.tag ~= 'Index' or not f[1] or not f[2] then return end
local main = f[1].tag == 'Id' and f[1][1] or index(f[1])
return main and type(f[2][1]) == "string" and (main .. '.' .. f[2][1]) or nil
end
local globseen, isseen, fieldseen = globinit or {}, {}, {}
LA.walk(top_ast, function(ast)
M.ast = ast
local path, line = tostring(ast.lineinfo):gsub('<C|','<'):match('<([^|]+)|L(%d+)')
local name = ast[1]
-- check if we're masking a variable in the same scope
if ast.localmasking and name ~= '_' and
ast.level == ast.localmasking.level then
local linenum = tostring(ast.localmasking.lineinfo.first):match('|L(%d+)')
local linenum = ast.localmasking.lineinfo
and tostring(ast.localmasking.lineinfo.first):match('|L(%d+)')
or M.pos2line(ast.localmasking.pos)
local parent = ast.parent and ast.parent.parent
local func = parent and parent.tag == 'Localrec'
warn("local " .. (func and 'function' or 'variable') .. " '" ..
@@ -118,7 +135,7 @@ function M.show_warnings(top_ast, globinit)
line, path)
end
else
if parent.tag == 'Localrec' then -- local function foo...
if parent and parent.tag == 'Localrec' then -- local function foo...
warn("unused local function '" .. name .. "'", line, path)
else
warn("unused local variable '" .. name .. "'; "..
@@ -126,16 +143,24 @@ function M.show_warnings(top_ast, globinit)
end
end
end
-- added check for FAST as ast.seevalue relies on value evaluation,
-- added check for "fast" mode as ast.seevalue relies on value evaluation,
-- which is very slow even on simple and short scripts
if not FAST and ast.isfield and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
if ide.config.staticanalyzer.infervalue and ast.isfield
and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
if not fieldseen[name] then
fieldseen[name] = true
local parent = ast.parent
and (" in '"..index(ast.parent):gsub("%."..name.."$","").."'")
local var = index(ast.parent)
local parent = ast.parent and var
and (" in '"..var:gsub("%."..name.."$","").."'")
or ""
warn("first use of unknown field '" .. name .."'"..parent,
tostring(ast.lineinfo.first):match('|L(%d+)'), path)
local tblref = ast.parent and ast.parent[1]
local localparam = (tblref and tblref.localdefinition
and tblref.localdefinition.isparam)
if not localparam then
warn("first use of unknown field '" .. name .."'"..parent,
ast.lineinfo and tostring(ast.lineinfo.first):match('|L(%d+)'), path)
end
end
elseif ast.tag == 'Id' and not ast.localdefinition and not ast.definedglobal then
if not globseen[name] then
@@ -183,26 +208,25 @@ if compilepos then
menu:Insert(compilepos+1, ID_ANALYZE, TR("Analyze")..KSC(ID_ANALYZE), TR("Analyze the source code"))
end
local debugger = ide.debugger
local openDocuments = ide.openDocuments
local function analyzeProgram(editor)
if ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
-- save all files (if requested) for "infervalue" analysis to keep the changes on disk
if ide.config.editor.saveallonrun and ide.config.staticanalyzer.infervalue then SaveAll(true) end
if ide:GetLaunchedProcess() == nil and not ide:GetDebugger():IsConnected() then ClearOutput() end
DisplayOutput("Analyzing the source code")
frame:Update()
local editorText = editor:GetText()
local editorText = editor:GetTextDyn()
local doc = ide:GetDocument(editor)
local filePath = doc:GetFilePath() or doc:GetFileName()
local warn, err = M.warnings_from_string(editorText, filePath)
if err then -- report compilation error
DisplayOutput((": not completed.\n%s\n"):format(cleanError(err)))
DisplayOutputLn((": not completed.\n%s"):format(cleanError(err)))
return false
end
DisplayOutput((": %s warning%s.\n")
DisplayOutputLn((": %s warning%s.")
:format(#warn > 0 and #warn or 'no', #warn == 1 and '' or 's'))
DisplayOutputNoMarker(table.concat(warn, "\n") .. "\n")
DisplayOutputNoMarker(table.concat(warn, "\n") .. (#warn > 0 and "\n" or ""))
return true -- analyzed ok
end
@@ -216,7 +240,4 @@ frame:Connect(ID_ANALYZE, wx.wxEVT_COMMAND_MENU_SELECTED,
end
end)
frame:Connect(ID_ANALYZE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
end)
function (event) event:Enable(GetEditor() ~= nil) end)

View File

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

247
src/editor/markers.lua Normal file
View File

@@ -0,0 +1,247 @@
-- Copyright 2015 Paul Kulchenko, ZeroBrane LLC
local ide = ide
ide.markers = {
markersCtrl = nil,
imglist = ide:CreateImageList("MARKERS", "FILE-NORMAL", "DEBUG-BREAKPOINT-TOGGLE", "BOOKMARK-TOGGLE"),
needrefresh = {},
settings = {markers = {}},
}
local unpack = table.unpack or unpack
local markers = ide.markers
local caches = {}
local image = { FILE = 0, BREAKPOINT = 1, BOOKMARK = 2 }
local markertypes = {breakpoint = 0, bookmark = 0}
local maskall = 0
for markertype in pairs(markertypes) do
markertypes[markertype] = 2^ide:GetMarker(markertype)
maskall = maskall + markertypes[markertype]
end
local function resetMarkersTimer()
if ide.config.markersinactivity then
ide.timers.markers:Start(ide.config.markersinactivity*1000, wx.wxTIMER_ONE_SHOT)
end
end
local function needRefresh(editor)
ide.markers.needrefresh[editor] = true
resetMarkersTimer()
end
local function getMarkers(editor)
local edmarkers = {}
local line = editor:MarkerNext(0, maskall)
while line > -1 do
local markerval = editor:MarkerGet(line)
for markertype, val in pairs(markertypes) do
if bit.band(markerval, val) > 0 then
table.insert(edmarkers, {line, markertype})
end
end
line = editor:MarkerNext(line + 1, maskall)
end
return edmarkers
end
local function markersRefresh()
local ctrl = ide.markers.markersCtrl
local win = ide:GetMainFrame():FindFocus()
ctrl:Freeze()
for editor in pairs(ide.markers.needrefresh) do
local cache = caches[editor]
if cache then
local fileitem = cache.fileitem
if not fileitem then
local filename = ide:GetDocument(editor):GetTabText()
local root = ctrl:GetRootItem()
if not root or not root:IsOk() then return end
fileitem = ctrl:AppendItem(root, filename, image.FILE)
ctrl:SortChildren(root)
cache.fileitem = fileitem
end
-- disabling event handlers is not strictly necessary, but it's expected
-- to fix a crash on Windows that had DeleteChildren in the trace (#442).
ctrl:SetEvtHandlerEnabled(false)
ctrl:DeleteChildren(fileitem)
ctrl:SetEvtHandlerEnabled(true)
for _, edmarker in ipairs(getMarkers(editor)) do
local line, markertype = unpack(edmarker)
local text = ("%d: %s"):format(line+1, FixUTF8(editor:GetLineDyn(line)))
ctrl:AppendItem(fileitem, text:gsub("[\r\n]+$",""), image[markertype:upper()])
end
-- if no markers added, then remove the file from the markers list
ctrl:Expand(fileitem)
if not ctrl:ItemHasChildren(fileitem) then
ctrl:Delete(fileitem)
cache.fileitem = nil
end
end
end
ctrl:Thaw()
if win and win ~= ide:GetMainFrame():FindFocus() then win:SetFocus() end
end
local function item2editor(item_id)
for editor, cache in pairs(caches) do
if cache.fileitem and cache.fileitem:GetValue() == item_id:GetValue() then return editor end
end
end
local function createMarkersWindow()
local width, height = 360, 200
local ctrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
wx.wxDefaultPosition, wx.wxSize(width, height),
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
markers.markersCtrl = ctrl
ide.timers.markers = wx.wxTimer(ctrl)
ctrl:AddRoot("Markers")
ctrl:SetImageList(markers.imglist)
ctrl:SetFont(ide.font.fNormal)
function ctrl:ActivateItem(item_id, toggle)
local itemimage = ctrl:GetItemImage(item_id)
if itemimage == image.FILE then
-- activate editor tab
local editor = item2editor(item_id)
if editor then ide:GetDocument(editor):SetActive() end
else -- clicked on the marker item
local parent = ctrl:GetItemParent(item_id)
if parent:IsOk() and ctrl:GetItemImage(parent) == image.FILE then
local editor = item2editor(parent)
if editor then
local line = tonumber(ctrl:GetItemText(item_id):match("^(%d+):"))
if line then
if toggle then
local _ = (itemimage == image.BOOKMARK and editor:BookmarkToggle(line-1, false)
or itemimage == image.BREAKPOINT and editor:BreakpointToggle(line-1, false))
ctrl:Delete(item_id)
return -- don't activate the editor when the breakpoint is toggled
end
editor:GotoLine(line-1)
end
ide:GetDocument(editor):SetActive()
end
end
end
end
local function activateByPosition(event)
local mask = (wx.wxTREE_HITTEST_ONITEMINDENT + wx.wxTREE_HITTEST_ONITEMLABEL
+ wx.wxTREE_HITTEST_ONITEMICON + wx.wxTREE_HITTEST_ONITEMRIGHT)
local item_id, flags = ctrl:HitTest(event:GetPosition())
if item_id and item_id:IsOk() and bit.band(flags, mask) > 0 then
ctrl:ActivateItem(item_id, bit.band(flags, wx.wxTREE_HITTEST_ONITEMICON) > 0)
else
event:Skip()
end
return true
end
ctrl:Connect(wx.wxEVT_TIMER, function() markersRefresh() end)
ctrl:Connect(wx.wxEVT_LEFT_DOWN, activateByPosition)
ctrl:Connect(wx.wxEVT_LEFT_DCLICK, activateByPosition)
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_ACTIVATED, function(event)
ctrl:ActivateItem(event:GetItem())
end)
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
function (event)
local item_id = event:GetItem()
local ID_BOOKMARKTOGGLE = ID("markers.bookmarktoggle")
local ID_BREAKPOINTTOGGLE = ID("markers.breakpointtoggle")
local menu = wx.wxMenu {
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark"), TR("Toggle bookmark") },
{ ID_BREAKPOINTTOGGLE, TR("Toggle Breakpoint"), TR("Toggle breakpoint") },
}
local activate = function() ctrl:ActivateItem(item_id, true) end
menu:Enable(ID_BOOKMARKTOGGLE, ctrl:GetItemImage(item_id) == image.BOOKMARK)
menu:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, activate)
menu:Enable(ID_BREAKPOINTTOGGLE, ctrl:GetItemImage(item_id) == image.BREAKPOINT)
menu:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, activate)
PackageEventHandle("onMenuMarkers", menu, ctrl, event)
ctrl:PopupMenu(menu)
end)
local function reconfigure(pane)
pane:TopDockable(false):BottomDockable(false)
:MinSize(150,-1):BestSize(300,-1):FloatingSize(200,300)
end
local layout = ide:GetSetting("/view", "uimgrlayout")
if not layout or not layout:find("markerspanel") then
ide:AddPanelDocked(ide:GetOutputNotebook(), ctrl, "markerspanel", TR("Markers"), reconfigure, false)
else
ide:AddPanel(ctrl, "markerspanel", TR("Markers"), reconfigure)
end
end
createMarkersWindow()
local package = ide:AddPackage('core.markers', {
-- save markers; remove tab from the list
onEditorClose = function(self, editor)
local cache = caches[editor]
if not cache then return end
if cache.fileitem then markers.markersCtrl:Delete(cache.fileitem) end
caches[editor] = nil
end,
-- schedule marker update if the change is for one of the editors with markers
onEditorUpdateUI = function(self, editor, event)
if not caches[editor] then return end
if bit.band(event:GetUpdated(), wxstc.wxSTC_UPDATE_CONTENT) == 0 then return end
needRefresh(editor)
end,
onEditorMarkerUpdate = function(self, editor)
-- if no marker, then all markers in a file need to be refreshed
if not caches[editor] then caches[editor] = {} end
needRefresh(editor)
markers:SaveMarkers(editor)
end,
onEditorSave = function(self, editor) markers:SaveMarkers(editor) end,
onEditorLoad = function(self, editor) markers:LoadMarkers(editor) end,
})
function markers:SaveSettings() package:SetSettings(self.settings) end
function markers:SaveMarkers(editor, force)
-- if the file has the name and has not been modified, save the breakpoints
-- this also works when the file is saved as the modified flag is already set to `false`
local doc = ide:GetDocument(editor)
local filepath = doc:GetFilePath()
if filepath and (force or not doc:IsModified()) then
-- remove it from the list if it has no breakpoints
local edmarkers = getMarkers(editor)
self.settings.markers[filepath] = #edmarkers > 0 and edmarkers or nil
self:SaveSettings()
end
end
function markers:LoadMarkers(editor)
local doc = ide:GetDocument(editor)
local filepath = doc:GetFilePath()
if filepath then
for _, edmarker in ipairs(self.settings.markers[filepath] or {}) do
local line, markertype = unpack(edmarker)
local _ = (markertype == "bookmark" and editor:BookmarkToggle(line, true)
or markertype == "breakpoint" and editor:BreakpointToggle(line, true))
end
end
end
MergeSettings(markers.settings, package:GetSettings())

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
@@ -55,15 +55,15 @@ function MarkupHotspotClick(pos, editor)
return
end
local line = editor:LineFromPosition(pos)
local tx = editor:GetLine(line)
local tx = editor:GetLineDyn(line)
pos = pos + #MD_MARK_LINK - editor:PositionFromLine(line) -- turn into relative position
-- extract the URL/command on the right side of the separator
local _,_,text = string.find(tx, q(MD_MARK_LINZ).."(%b"..MD_MARK_LINA..MD_MARK_LINT..")", pos)
if text then
text = text:gsub("^"..q(MD_MARK_LINA), ""):gsub(q(MD_MARK_LINT).."$", "")
local filepath = ide.openDocuments[editor:GetId()].filePath
or FileTreeGetDir()
local doc = ide:GetDocument(editor)
local filepath = doc and doc.filePath or FileTreeGetDir()
local _,_,http = string.find(text, [[^(https?:%S+)$]])
local _,_,command,code = string.find(text, [[^macro:(%w+)%((.*%S)%)$]])
if not command then _,_,command = string.find(text, [[^macro:(%w+)$]]) end
@@ -80,7 +80,7 @@ function MarkupHotspotClick(pos, editor)
wx.wxLaunchDefaultBrowser(http, 0)
elseif filepath then -- only check for saved files
-- check if requested to open in a new window
local newwindow = string.find(text, MD_LINK_NEWWINDOW, 1, true) -- plain search
local newwindow = not doc or string.find(text, MD_LINK_NEWWINDOW, 1, true)
if newwindow then text = string.gsub(text, "^%" .. MD_LINK_NEWWINDOW, "") end
local filename = GetFullPathIfExists(
wx.wxFileName(filepath):GetPath(wx.wxPATH_GET_VOLUME), text)
@@ -155,7 +155,7 @@ function MarkupStyle(editor, lines, linee)
local needfix = false
for line=lines,linee do
local tx = editor:GetLine(line)
local tx = editor:GetLineDyn(line)
local ls = editor:PositionFromLine(line)
local from = 1

View File

@@ -1,9 +1,10 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- authors: Lomtik Software (J. Winwood & John Labenski)
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
local ide = ide
-- ---------------------------------------------------------------------------
-- Create the Edit menu and attach the callback functions
@@ -26,13 +27,13 @@ local editMenu = wx.wxMenu {
}
editMenu:Append(ID_SOURCE, TR("Source"), wx.wxMenu {
{ ID_COMMENT, TR("&Comment/Uncomment")..KSC(ID_COMMENT), TR("Comment or uncomment current or selected lines") },
{ ID_COMMENT, TR("C&omment/Uncomment")..KSC(ID_COMMENT), TR("Comment or uncomment current or selected lines") },
{ ID_REINDENT, TR("Correct &Indentation")..KSC(ID_REINDENT), TR("Re-indent selected lines") },
{ ID_FOLD, TR("&Fold/Unfold All")..KSC(ID_FOLD), TR("Fold or unfold all code folds") },
{ ID_SORT, TR("&Sort")..KSC(ID_SORT), TR("Sort selected lines") },
})
editMenu:Append(ID_BOOKMARK, TR("Bookmark"), wx.wxMenu {
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark")..KSC(ID_BOOKMARKTOGGLE) },
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark")..KSC(ID_BOOKMARKTOGGLE), TR("Toggle bookmark") },
{ ID_BOOKMARKNEXT, TR("Go To Next Bookmark")..KSC(ID_BOOKMARKNEXT) },
{ ID_BOOKMARKPREV, TR("Go To Previous Bookmark")..KSC(ID_BOOKMARKPREV) },
})
@@ -45,22 +46,41 @@ menuBar:Append(editMenu, TR("&Edit"))
editMenu:Check(ID_AUTOCOMPLETEENABLE, ide.config.autocomplete)
local function getCtrlWithFocus(edType)
local ctrl = ide:GetMainFrame():FindFocus()
return ctrl and ctrl:GetClassInfo():GetClassName() == edType and ctrl:DynamicCast(edType) or nil
end
local function onUpdateUIEditorInFocus(event)
event:Enable(GetEditorWithFocus(GetEditor()) ~= nil)
end
local function onUpdateUIEditMenu(event)
local menu_id = event:GetId()
local editor = GetEditorWithFocus()
if editor == nil then event:Enable(false); return end
if editor == nil then
local editor = getCtrlWithFocus("wxTextCtrl")
event:Enable(editor and (
menu_id == ID_PASTE and editor:CanPaste() or
menu_id == ID_UNDO and editor:CanUndo() or
menu_id == ID_REDO and editor:CanRedo() or
menu_id == ID_CUT and editor:CanCut() or
menu_id == ID_COPY and editor:CanCopy() or
menu_id == ID_SELECTALL and true
) or false)
return
end
local alwaysOn = {
[ID_SELECTALL] = true,
-- allow Cut and Copy commands as these work on a line if no selection
[ID_COPY] = true, [ID_CUT] = true,
}
local menu_id = event:GetId()
local enable =
menu_id == ID_PASTE and editor:CanPaste() or
-- pasting is allowed when the document is not read-only and the selection
-- (if any) has no protected text; since pasting handles protected text,
-- use GetReadOnly() instead of CanPaste()
menu_id == ID_PASTE and (not editor:GetReadOnly()) or
menu_id == ID_UNDO and editor:CanUndo() or
menu_id == ID_REDO and editor:CanRedo() or
alwaysOn[menu_id]
@@ -68,34 +88,55 @@ local function onUpdateUIEditMenu(event)
end
local function onEditMenu(event)
local menu_id = event:GetId()
local editor = GetEditorWithFocus()
if editor == nil then event:Skip(); return end
if editor == nil then
local editor = getCtrlWithFocus("wxTextCtrl")
if not editor or not (
menu_id == ID_PASTE and editor:Paste() or
menu_id == ID_UNDO and editor:Undo() or
menu_id == ID_REDO and editor:Redo() or
menu_id == ID_CUT and editor:Cut() or
menu_id == ID_COPY and editor:Copy() or
menu_id == ID_SELECTALL and editor:SetSelection(-1, -1) or
true
) then event:Skip() end
return
end
if PackageEventHandle("onEditorAction", editor, event) == false then
return
end
local menu_id = event:GetId()
local copytext
if (menu_id == ID_CUT or menu_id == ID_COPY)
and ide.wxver >= "2.9.5" and editor:GetSelections() > 1 then
local main = editor:GetMainSelection()
copytext = editor:GetTextRange(editor:GetSelectionNStart(main), editor:GetSelectionNEnd(main))
copytext = editor:GetTextRangeDyn(editor:GetSelectionNStart(main), editor:GetSelectionNEnd(main))
for s = 0, editor:GetSelections()-1 do
if copytext ~= editor:GetTextRange(editor:GetSelectionNStart(s), editor:GetSelectionNEnd(s)) then
if copytext ~= editor:GetTextRangeDyn(editor:GetSelectionNStart(s), editor:GetSelectionNEnd(s)) then
copytext = nil
break
end
end
end
local spos, epos = editor:GetSelectionStart(), editor:GetSelectionEnd()
if menu_id == ID_CUT then
if editor:GetSelectionStart() == editor:GetSelectionEnd()
then editor:LineCut() else editor:Cut() end
if spos == epos then editor:LineCopy() else editor:CopyDyn() end
if spos == epos then
local line = editor:LineFromPosition(spos)
spos, epos = editor:PositionFromLine(line), editor:PositionFromLine(line+1)
editor:SetSelectionStart(spos)
editor:SetSelectionEnd(epos)
end
if spos ~= epos then editor:ClearAny() end
elseif menu_id == ID_COPY then
if editor:GetSelectionStart() == editor:GetSelectionEnd()
then editor:LineCopy() else editor:Copy() end
elseif menu_id == ID_PASTE then editor:Paste()
if spos == epos then editor:LineCopy() else editor:CopyDyn() end
elseif menu_id == ID_PASTE then
-- first clear the text in case there is any hidden markup
if spos ~= epos then editor:ClearAny() end
editor:PasteDyn()
elseif menu_id == ID_SELECTALL then editor:SelectAll()
elseif menu_id == ID_UNDO then editor:Undo()
elseif menu_id == ID_REDO then editor:Redo()
@@ -116,23 +157,17 @@ for _, event in pairs({
frame:Connect(event, wx.wxEVT_UPDATE_UI, onUpdateUIEditorInFocus)
end
frame:Connect(ID_FOLD, wx.wxEVT_UPDATE_UI,
function(event)
local editor = GetEditorWithFocus(GetEditor())
event:Enable(ide.config.editor.fold and editor ~= nil)
end)
frame:Connect(ID_COMMENT, wx.wxEVT_UPDATE_UI,
function(event)
local editor = GetEditorWithFocus(GetEditor())
event:Enable(editor ~= nil
and pcall(function() return editor.spec end) and editor.spec
and ide:IsValidProperty(editor, "spec") and editor.spec
and editor.spec.linecomment and true or false)
end)
local function generateConfigMessage(type)
return ([==[--[[--
Use this file to specify %s preferences.
Use this file to specify **%s** preferences.
Review [examples](+%s) or check [online documentation](%s) for details.
--]]--
]==])
@@ -143,15 +178,15 @@ end
frame:Connect(ID_PREFERENCESSYSTEM, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = LoadFile(ide.configs.system)
if editor and #editor:GetText() == 0 then
editor:AddText(generateConfigMessage("System")) end
if editor and editor:GetLength() == 0 then
editor:AddTextDyn(generateConfigMessage("System")) end
end)
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = LoadFile(ide.configs.user)
if editor and #editor:GetText() == 0 then
editor:AddText(generateConfigMessage("User")) end
if editor and editor:GetLength() == 0 then
editor:AddTextDyn(generateConfigMessage("User")) end
end)
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_UPDATE_UI,
function (event) event:Enable(ide.configs.user ~= nil) end)
@@ -183,11 +218,6 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
local lc = editor.spec.linecomment
if not lc then return end
-- capture the current position in line to restore later
local curline = editor:GetCurrentLine()
local curlen = #editor:GetLine(curline)
local curpos = editor:GetCurrentPos()-editor:PositionFromLine(curline)
-- for multi-line selection, always start the first line at the beginning
local ssel, esel = editor:GetSelectionStart(), editor:GetSelectionEnd()
local sline = editor:LineFromPosition(ssel)
@@ -202,7 +232,7 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
for line = sline, eline do
local pos = sel and (sline == eline or rect)
and ssel-editor:PositionFromLine(sline)+1 or 1
local text = editor:GetLine(line)
local text = editor:GetLineDyn(line)
local _, cpos = text:find("^%s*"..qlc, pos)
if not cpos and text:find("%S")
-- ignore last line when the end of selection is at the first position
@@ -216,26 +246,19 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
-- go last to first as selection positions we captured may be affected
-- by text changes
for line = eline, sline, -1 do
local pos = sel and (sline == eline or rect)
and ssel-editor:PositionFromLine(sline)+1 or 1
local text = editor:GetLine(line)
local pos = sel and (sline == eline or rect) and ssel-editor:PositionFromLine(sline)+1 or 1
local text = editor:GetLineDyn(line)
local validline = (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0)
local _, cpos = text:find("^%s*"..qlc, pos)
if not comment and cpos then
if not comment and cpos and validline then
editor:DeleteRange(cpos-#lc+editor:PositionFromLine(line), #lc)
elseif comment and text:find("%S")
and (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0) then
editor:InsertText(pos+editor:PositionFromLine(line)-1, lc)
elseif comment and text:find("%S") and validline then
editor:SetTargetStart(pos+editor:PositionFromLine(line)-1)
editor:SetTargetEnd(editor:GetTargetStart())
editor:ReplaceTarget(lc)
end
end
editor:EndUndoAction()
-- fix position if it was after where the selection started
if editor:PositionFromLine(curline)+curpos > ssel then
-- position the cursor exactly where its position was, which
-- could have shifted depending on whether the text was added or removed.
editor:GotoPos(editor:PositionFromLine(curline)
+ math.max(0, curpos+#editor:GetLine(curline)-curlen))
end
end)
local function processSelection(editor, func)
@@ -246,15 +269,15 @@ local function processSelection(editor, func)
editor:SelectAll()
text = editor:GetSelectedText()
end
local wholeline = text:find('\n$')
local wholeline = text:find("\n$")
local buf = {}
for line in string.gmatch(text..(wholeline and '' or '\n'), "(.-\r?\n)") do
for line in string.gmatch(text..(wholeline and "" or "\n"), "(.-\r?\n)") do
table.insert(buf, line)
end
if #buf > 0 then
if func then func(buf) end
-- add new line at the end if it was there
local newtext = table.concat(buf, ''):gsub('(\r?\n)$', wholeline and '%1' or '')
local newtext = table.concat(buf, ""):gsub("(\r?\n)$", wholeline and "%1" or "")
-- straightforward editor:ReplaceSelection() doesn't work reliably as
-- it sometimes doubles the context when the entire file is selected.
-- this seems like Scintilla issue, so use ReplaceTarget instead.
@@ -262,8 +285,24 @@ local function processSelection(editor, func)
-- ReplaceSelection should handle (after wxwidgets 3.x upgrade), this
-- will need to be revisited when ReplaceSelection is updated.
if newtext ~= text then
editor:TargetFromSelection()
editor:ReplaceTarget(newtext)
editor:BeginUndoAction()
-- if there is at least one marker, then use a different mechanism to preserve them
-- simply saving markers, replacing text, and reapplying markers doesn't work as
-- they get reset after `undo/redo` operations.
local ssel, esel = editor:GetSelectionStart(), editor:GetSelectionEnd()
local sline = editor:LineFromPosition(ssel)
local eline = editor:LineFromPosition(esel)
if #editor:MarkerGetAll(nil, sline, eline) > 0 then
for line = #buf, 1, -1 do
editor:SetTargetStart(line == 1 and ssel or editor:PositionFromLine(sline+line-1))
editor:SetTargetEnd(line == eline-sline+1 and esel or editor:GetLineEndPosition(sline+line-1))
editor:ReplaceTarget((buf[line]:gsub("\r?\n$", "")))
end
else
editor:TargetFromSelection()
editor:ReplaceTarget(newtext)
end
editor:EndUndoAction()
end
end
editor:GotoPosEnforcePolicy(math.min(
@@ -277,14 +316,14 @@ local function reIndent(editor, buf)
local decindent, incindent = editor.spec.isdecindent, editor.spec.isincindent
if not (decindent and incindent) then return end
local line = editor:LineFromPosition(editor:GetSelectionStart())
local edline = editor:LineFromPosition(editor:GetSelectionStart())
local indent = 0
local text = ''
local text = ""
-- find the last non-empty line in the previous block (if any)
for n = line-1, 1, -1 do
for n = edline-1, 1, -1 do
indent = editor:GetLineIndentation(n)
text = editor:GetLine(n)
if text:match('[^\r\n]') then break end
text = editor:GetLineDyn(n)
if text:match("[^\r\n]") then break end
end
local ut = editor:GetUseTabs()
@@ -293,9 +332,12 @@ local function reIndent(editor, buf)
local indents = {}
local isstatic = {}
for line = 1, #buf+1 do
local style = bit.band(editor:GetStyleAt(editor:PositionFromLine(line-1)), 31)
local ls = editor:PositionFromLine(edline+line-1)
local style = bit.band(editor:GetStyleAt(ls), 31)
-- don't reformat multi-line comments or strings
isstatic[line] = editor.spec.iscomment[style] or editor.spec.isstring[style]
isstatic[line] = (editor.spec.iscomment[style]
or editor.spec.isstring[style]
or (MarkupIsAny and MarkupIsAny(style)))
if not isstatic[line] or line == 1 or not isstatic[line-1] then
local closed, blockend = decindent(text)
local opened = incindent(text)
@@ -318,7 +360,7 @@ local function reIndent(editor, buf)
for line = 1, #buf do
if not isstatic[line] then
buf[line] = buf[line]:gsub("^[ \t]*",
not buf[line]:match('%S') and ''
not buf[line]:match("%S") and ""
or ut and ("\t"):rep(indents[line] / tw) or (" "):rep(indents[line]))
end
end
@@ -330,43 +372,19 @@ frame:Connect(ID_REINDENT, wx.wxEVT_COMMAND_MENU_SELECTED,
processSelection(editor, function(buf) reIndent(editor, buf) end)
end)
frame:Connect(ID_FOLD, wx.wxEVT_UPDATE_UI,
function(event)
local editor = GetEditorWithFocus()
event:Enable(editor and editor:CanFold() or false)
end)
frame:Connect(ID_FOLD, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event) FoldSome() end)
function (event) GetEditorWithFocus():FoldSome() end)
local BOOKMARK_MARKER = StylesGetMarker("bookmark")
local BOOKMARK_MARKER_VALUE = 2^BOOKMARK_MARKER
local function bookmarkToggle()
local editor = GetEditor()
local line = editor:GetCurrentLine()
local markers = editor:MarkerGet(line)
if bit.band(markers, BOOKMARK_MARKER_VALUE) > 0 then
editor:MarkerDelete(line, BOOKMARK_MARKER)
else
editor:MarkerAdd(line, BOOKMARK_MARKER)
end
end
local function bookmarkNext()
local editor = GetEditor()
local line = editor:MarkerNext(editor:GetCurrentLine()+1, BOOKMARK_MARKER_VALUE)
if line == -1 then line = editor:MarkerNext(0, BOOKMARK_MARKER_VALUE) end
if line ~= -1 then
editor:GotoLine(line)
editor:EnsureVisibleEnforcePolicy(line)
end
end
local function bookmarkPrev()
local editor = GetEditor()
local line = editor:MarkerPrevious(editor:GetCurrentLine()-1, BOOKMARK_MARKER_VALUE)
if line == -1 then line = editor:MarkerPrevious(editor:GetLineCount(), BOOKMARK_MARKER_VALUE) end
if line ~= -1 then
editor:GotoLine(line)
editor:EnsureVisibleEnforcePolicy(line)
end
end
frame:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkToggle)
frame:Connect(ID_BOOKMARKNEXT, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkNext)
frame:Connect(ID_BOOKMARKPREV, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkPrev)
frame:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED,
function() GetEditor():BookmarkToggle() end)
frame:Connect(ID_BOOKMARKNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
function() GetEditor():MarkerGotoNext(BOOKMARK_MARKER) end)
frame:Connect(ID_BOOKMARKPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
function() GetEditor():MarkerGotoPrev(BOOKMARK_MARKER) end)

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 ide = ide
local frame = ide.frame
local menuBar = frame.menuBar
local notebook = frame.notebook
local openDocuments = ide.openDocuments
local fileMenu = wx.wxMenu({
@@ -18,7 +17,8 @@ local fileMenu = wx.wxMenu({
{ ID_SAVEAS, TR("Save &As...")..KSC(ID_SAVEAS), TR("Save the current document to a file with a new name") },
{ ID_SAVEALL, TR("Save A&ll")..KSC(ID_SAVEALL), TR("Save all open documents") },
{ },
-- placeholder for ID_RECENTFILES and ID_RECENTPROJECTS
{ ID_RECENTFILES, TR("Recent Files")..KSC(ID_RECENTFILES), TR("File history") },
{ ID_RECENTPROJECTS, TR("Recent Projects")..KSC(ID_RECENTPROJECTS), TR("Project history") },
{ },
{ ID_EXIT, TR("E&xit")..KSC(ID_EXIT), TR("Exit program") }})
menuBar:Append(fileMenu, TR("&File"))
@@ -27,17 +27,12 @@ local filehistorymenu = wx.wxMenu({
{ },
{ ID_RECENTFILESCLEAR, TR("Clear Items")..KSC(ID_RECENTFILESCLEAR), TR("Clear items from this list") },
})
local filehistory = wx.wxMenuItem(fileMenu, ID_RECENTFILES,
TR("Recent Files")..KSC(ID_RECENTFILES), TR("File history"), wx.wxITEM_NORMAL, filehistorymenu)
fileMenu:Insert(8,filehistory)
local projecthistorymenu = wx.wxMenu({
{ },
{ ID_RECENTPROJECTSCLEAR, TR("Clear Items")..KSC(ID_RECENTPROJECTSCLEAR), TR("Clear items from this list") },
})
local projecthistory = wx.wxMenuItem(fileMenu, ID_RECENTPROJECTS,
TR("Recent &Projects")..KSC(ID_RECENTPROJECTS), TR("Project history"), wx.wxITEM_NORMAL, projecthistorymenu)
fileMenu:Insert(9,projecthistory)
ide:AttachMenu(ID_RECENTFILES, filehistorymenu)
ide:AttachMenu(ID_RECENTPROJECTS, projecthistorymenu)
do -- recent file history
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
@@ -186,12 +181,15 @@ frame:Connect(ID_NEW, wx.wxEVT_COMMAND_MENU_SELECTED, function() return NewFile(
frame:Connect(ID_OPEN, wx.wxEVT_COMMAND_MENU_SELECTED, OpenFile)
frame:Connect(ID_SAVE, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
SaveFile(editor, openDocuments[editor:GetId()].filePath)
local editor = ide.findReplace:CanSave(GetEditorWithFocus()) or GetEditor()
local doc = ide:GetDocument(editor)
SaveFile(editor, doc and doc:GetFilePath() or nil)
end)
frame:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable(EditorIsModified(GetEditor()))
local doc = ide:GetDocument(GetEditor())
event:Enable(ide.findReplace:CanSave(GetEditorWithFocus()) and true
or doc and (doc:IsModified() or doc:IsNew()) or false)
end)
frame:Connect(ID_SAVEAS, wx.wxEVT_COMMAND_MENU_SELECTED,
@@ -210,7 +208,7 @@ frame:Connect(ID_SAVEALL, wx.wxEVT_COMMAND_MENU_SELECTED,
frame:Connect(ID_SAVEALL, wx.wxEVT_UPDATE_UI,
function (event)
local atLeastOneModifiedDocument = false
for id, document in pairs(openDocuments) do
for _, document in pairs(openDocuments) do
if document.isModified or not document.filePath then
atLeastOneModifiedDocument = true
break
@@ -221,11 +219,18 @@ frame:Connect(ID_SAVEALL, wx.wxEVT_UPDATE_UI,
frame:Connect(ID_CLOSE, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
ClosePage() -- this will find the current editor tab
local editor = GetEditorWithFocus()
local nb = ide:GetOutputNotebook()
local index = editor and nb:GetPageIndex(editor)
if index and ide.findReplace:IsPreview(editor) and index >= 0 then
nb:DeletePage(index) -- close preview tab
else
ClosePage() -- this will find the current editor tab
end
end)
frame:Connect(ID_CLOSE, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable(GetEditor() ~= nil)
event:Enable(ide.findReplace:IsPreview(GetEditorWithFocus()) or GetEditor() ~= nil)
end)
frame:Connect(ID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,

View File

@@ -1,4 +1,4 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
---------------------------------------------------------
local ide = ide
@@ -32,8 +32,8 @@ local helpMenu = wx.wxMenu{
-- do not translate Help menu on Mac as it won't merge with "standard" menus
menuBar:Append(helpMenu, ide.osname == 'Macintosh' and "&Help" or TR("&Help"))
local function DisplayAbout(event)
local logo = ide.config.path.app.."/"..GetIDEString("logo")
local function displayAbout(event)
local logo = ide:GetAppName().."/"..GetIDEString("logo")
local logoimg = wx.wxFileName(logo):FileExists() and
([[<tr><td><img src="%s"></td></tr>]]):format(logo) or ""
local page = ([[
@@ -46,7 +46,7 @@ local function DisplayAbout(event)
<tr>
<td>
<b>ZeroBrane Studio (%s; MobDebug %s)</b><br>
<b>Copyright &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>
@@ -58,11 +58,11 @@ local function DisplayAbout(event)
Christoph Kubisch, Eike Decker<br>
Licensed under the MIT License.
</td>
<td><img align="right" src="zbstudio/res/estrela.png"></td>
<td><img align="right" src="%s/res/estrela.png"></td>
</tr>
<tr>
<td>
<b>Based on wxLua editor (%s)</b><br>
<b>Based on wxLua editor</b><br>
<b>Copyright &copy; 2002-2005 Lomtick Software</b><br>
J. Winwood, John Labenski<br>
Licensed under wxWindows Library License, v3.
@@ -70,15 +70,15 @@ local function DisplayAbout(event)
</tr>
<tr>
<td>
<b>Built with %s</b>
<b>Built with %s, %s</b>
</td>
</tr>
</table>
</td></tr></table>
</body>
</html>]])
:format(logoimg, ide.VERSION, mobdebug._VERSION,
wxlua.wxLUA_VERSION_STRING, wx.wxVERSION_STRING)
:format(logoimg, ide.VERSION, mobdebug._VERSION, ide:GetAppName(),
wx.wxVERSION_STRING, wxlua.wxLUA_VERSION_STRING)
local dlg = wx.wxDialog(frame, wx.wxID_ANY, TR("About %s"):format(GetIDEString("editor")))
@@ -111,7 +111,7 @@ local function DisplayAbout(event)
dlg:Destroy()
end
frame:Connect(ID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED, DisplayAbout)
frame:Connect(ID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED, displayAbout)
for item, page in pairs(urls) do
frame:Connect(item, wx.wxEVT_COMMAND_MENU_SELECTED,
function() wx.wxLaunchDefaultBrowser(url..page, 0) end)

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,10 +26,11 @@ local debugTab = {
{ ID_STEP, TR("Step &Into")..KSC(ID_STEP), TR("Step into") },
{ ID_STEPOVER, TR("Step &Over")..KSC(ID_STEPOVER), TR("Step over") },
{ ID_STEPOUT, TR("Step O&ut")..KSC(ID_STEPOUT), TR("Step out of the current function") },
{ ID_RUNTO, TR("Run To Cursor")..KSC(ID_RUNTO), TR("Run to cursor") },
{ ID_TRACE, TR("Tr&ace")..KSC(ID_TRACE), TR("Trace execution showing each executed line") },
{ ID_BREAK, TR("&Break")..KSC(ID_BREAK), TR("Break execution at the next executed line of code") },
{ },
{ ID_TOGGLEBREAKPOINT, TR("Toggle Break&point")..KSC(ID_TOGGLEBREAKPOINT), TR("Toggle breakpoint") },
{ ID_BREAKPOINT, TR("Breakpoint")..KSC(ID_BREAKPOINT) },
{ },
{ ID_CLEAROUTPUT, TR("C&lear Output Window")..KSC(ID_CLEAROUTPUT), TR("Clear the output window before compiling or debugging"), wx.wxITEM_CHECK },
{ ID_COMMANDLINEPARAMETERS, TR("Command Line Parameters...")..KSC(ID_COMMANDLINEPARAMETERS), TR("Provide command line parameters") },
@@ -49,6 +50,12 @@ debugMenu:Append(ID_PROJECTDIR, TR("Project Directory"), targetDirMenu, TR("Set
debugMenu:Append(ID_INTERPRETER, TR("Lua &Interpreter"), targetMenu, TR("Set the interpreter to be used"))
menuBar:Append(debugMenu, TR("&Project"))
ide:AttachMenu(ID_BREAKPOINT, wx.wxMenu {
{ ID_BREAKPOINTTOGGLE, TR("Toggle Breakpoint")..KSC(ID_BREAKPOINTTOGGLE) },
{ ID_BREAKPOINTNEXT, TR("Go To Next Breakpoint")..KSC(ID_BREAKPOINTNEXT) },
{ ID_BREAKPOINTPREV, TR("Go To Previous Breakpoint")..KSC(ID_BREAKPOINTPREV) },
})
local interpreters
local function selectInterpreter(id)
for id in pairs(interpreters) do
@@ -60,29 +67,42 @@ local function selectInterpreter(id)
local changed = ide.interpreter ~= interpreters[id]
if ide.interpreter and changed then
PackageEventHandle("onInterpreterClose", ide.interpreter) end
PackageEventHandle("onInterpreterClose", ide.interpreter)
end
if interpreters[id] and changed then
PackageEventHandle("onInterpreterLoad", interpreters[id]) end
PackageEventHandle("onInterpreterLoad", interpreters[id])
end
ide.interpreter = interpreters[id]
DebuggerShutdown()
ide.frame.statusBar:SetStatusText(ide.interpreter.name or "", 5)
ide:SetStatus(ide.interpreter.name or "", 4)
if changed then ReloadLuaAPI() end
end
function ProjectSetInterpreter(name)
local id = IDget("debug.interpreter."..name)
if (not interpreters[id]) then return end
selectInterpreter(id)
if id and interpreters[id] then
selectInterpreter(id)
else
DisplayOutputLn(("Can't find interpreter '%s'; using the default interpreter instead.")
:format(name))
local id = (
-- interpreter is set and is (still) on the list of known interpreters
IDget("debug.interpreter."..(ide.config.interpreter or ide.config.default.interpreter)) or
-- otherwise use default interpreter
ID("debug.interpreter."..ide.config.default.interpreter)
)
selectInterpreter(id)
end
end
local function evSelectInterpreter(event)
selectInterpreter(event:GetId())
end
function UpdateInterpreters()
function ProjectUpdateInterpreters()
assert(ide.interpreters, "no interpreters defined")
-- delete all existing items (if any)
@@ -96,7 +116,7 @@ function UpdateInterpreters()
table.sort(names)
interpreters = {}
for i, file in ipairs(names) do
for _, file in ipairs(names) do
local inter = ide.interpreters[file]
local id = ID("debug.interpreter."..file)
inter.fname = file
@@ -109,33 +129,32 @@ function UpdateInterpreters()
local id = (
-- interpreter is set and is (still) on the list of known interpreters
IDget("debug.interpreter."
..(ide.interpreter and ide.interpreters[ide.interpreter.fname]
and ide.interpreter.fname or ide.config.interpreter)) or
..(ide.interpreter and ide.interpreters[ide.interpreter.fname] and ide.interpreter.fname
or ide.config.interpreter or ide.config.default.interpreter)) or
-- otherwise use default interpreter
ID("debug.interpreter."..ide.config.default.interpreter)
)
selectInterpreter(id)
end
UpdateInterpreters()
-----------------------------
-- Project directory handling
function ProjectUpdateProjectDir(projdir,skiptree)
-- strip trailing spaces as this may create issues with "path/ " on Windows
projdir = projdir:gsub("%s+$","")
local dir = wx.wxFileName.DirName(FixDir(projdir))
dir:Normalize() -- turn into absolute path if needed
if not wx.wxDirExists(dir:GetFullPath()) then return end
projdir = dir:GetPath(wx.wxPATH_GET_VOLUME) -- no trailing slash
ide.config.path.projectdir = projdir ~= "" and projdir or nil
frame:SetStatusText(projdir)
ide:SetStatus(projdir)
frame:SetTitle(ExpandPlaceholders(ide.config.format.apptitle))
if (not skiptree) then
ide.filetree:updateProjectDir(projdir)
end
if (not skiptree) then ide.filetree:updateProjectDir(projdir) end
return true
end
ProjectUpdateProjectDir(ide.config.path.projectdir)
local function projChoose(event)
local editor = GetEditor()
@@ -143,18 +162,16 @@ local function projChoose(event)
editor and openDocuments[editor:GetId()].filePath or "")
fn:Normalize() -- want absolute path for dialog
local projectdir = ide.config.path.projectdir
local projectdir = ide:GetProject()
local filePicker = wx.wxDirDialog(frame, TR("Choose a project directory"),
projectdir ~= "" and projectdir or wx.wxGetCwd(), wx.wxDIRP_DIR_MUST_EXIST)
if filePicker:ShowModal(true) == wx.wxID_OK then
ProjectUpdateProjectDir(filePicker:GetPath())
return ProjectUpdateProjectDir(filePicker:GetPath())
end
return true
return false
end
frame:Connect(ID_PROJECTDIRCHOOSE, wx.wxEVT_COMMAND_MENU_SELECTED, projChoose)
frame:Connect(ID_PROJECTDIRCHOOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED, projChoose)
local function projFromFile(event)
local editor = GetEditor()
@@ -169,12 +186,18 @@ local function projFromFile(event)
ProjectUpdateProjectDir(ide.interpreter:fprojdir(fn)) end
end
frame:Connect(ID_PROJECTDIRFROMFILE, wx.wxEVT_COMMAND_MENU_SELECTED, projFromFile)
frame:Connect(ID_PROJECTDIRFROMFILE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable(editor ~= nil and ide:GetDocument(editor):GetFilePath() ~= nil)
end)
----------------------
-- Interpreter Running
local function getNameToRun(skipcheck)
local editor = GetEditor()
if not editor then return end
-- test compile it before we run it, if successful then ask to save
-- only compile if lua api
@@ -186,19 +209,20 @@ local function getNameToRun(skipcheck)
return
end
local id = editor:GetId()
if not openDocuments[id].filePath then SetDocumentModified(id, true) end
local doc = ide:GetDocument(editor)
local name = ide:GetProjectStartFile() or doc:GetFilePath()
if not name then doc:SetModified(true) end
if not SaveIfModified(editor) then return end
if ide.config.editor.saveallonrun then SaveAll(true) end
return wx.wxFileName(openDocuments[id].filePath)
return wx.wxFileName(name or doc:GetFilePath())
end
function ActivateOutput()
if not ide.config.activateoutput then return end
-- show output/errorlog pane
if not uimgr:GetPane("bottomnotebook"):IsShown() then
uimgr:GetPane("bottomnotebook"):Show(true)
if not uimgr:GetPane(bottomnotebook):IsShown() then
uimgr:GetPane(bottomnotebook):Show(true)
uimgr:Update()
end
-- activate output/errorlog window
@@ -209,12 +233,13 @@ function ActivateOutput()
end
local function runInterpreter(wfilename, withdebugger)
if ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
ClearOutput()
ActivateOutput()
ClearAllCurrentLineMarkers()
if not wfilename then return end
debugger.pid = ide.interpreter:frun(wfilename, withdebugger)
if debugger.pid then OutputEnableInput() end
return debugger.pid
end
@@ -251,30 +276,45 @@ end
-----------------------
-- Actions
frame:Connect(ID_TOGGLEBREAKPOINT, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
local line = editor:LineFromPosition(editor:GetCurrentPos())
DebuggerToggleBreakpoint(editor, line)
end)
frame:Connect(ID_TOGGLEBREAKPOINT, wx.wxEVT_UPDATE_UI,
local BREAKPOINT_MARKER = StylesGetMarker("breakpoint")
frame:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED,
function() GetEditor():BreakpointToggle() end)
frame:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditorWithFocus(GetEditor())
event:Enable((ide.interpreter) and (ide.interpreter.hasdebugger) and (editor ~= nil)
and (not debugger.scratchpad))
end)
frame:Connect(ID_BREAKPOINTNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
local BPNSC = KSC(ID_BREAKPOINTNEXT):gsub("\t","")
if not GetEditor():MarkerGotoNext(BREAKPOINT_MARKER) and BPNSC == "F9" then
local osx = ide.osname == "Macintosh"
DisplayOutputLn(("You used '%s' shortcut that has been changed from toggling a breakpoint to navigating to the next breakpoint in the document.")
:format(BPNSC))
DisplayOutputLn(("To toggle a breakpoint, use '%s' or click in the editor margin.")
:format(KSC(ID_BREAKPOINTTOGGLE):gsub("\t",""):gsub("Ctrl", osx and "Cmd" or "Ctrl")))
end
end)
frame:Connect(ID_BREAKPOINTPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
function() GetEditor():MarkerGotoPrev(BREAKPOINT_MARKER) end)
frame:Connect(ID_BREAKPOINTNEXT, wx.wxEVT_UPDATE_UI,
function (event) event:Enable(GetEditor() ~= nil) end)
frame:Connect(ID_BREAKPOINTPREV, wx.wxEVT_UPDATE_UI,
function (event) event:Enable(GetEditor() ~= nil) end)
frame:Connect(ID_COMPILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
ActivateOutput()
CompileProgram(editor)
CompileProgram(GetEditor(), {
keepoutput = ide:GetLaunchedProcess() ~= nil or ide:GetDebugger():IsConnected()
})
end)
frame:Connect(ID_COMPILE, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
end)
function (event) event:Enable(GetEditor() ~= nil) end)
frame:Connect(ID_RUN, wx.wxEVT_COMMAND_MENU_SELECTED, function () ProjectRun() end)
frame:Connect(ID_RUN, wx.wxEVT_UPDATE_UI,
@@ -319,7 +359,6 @@ frame:Connect(ID_ATTACHDEBUG, wx.wxEVT_COMMAND_MENU_SELECTED,
end)
frame:Connect(ID_ATTACHDEBUG, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable(ide.interpreter and ide.interpreter.fattachdebug and true or false)
ide.frame.menuBar:Check(event:GetId(), debugger.listening and true or false)
end)
@@ -355,8 +394,19 @@ frame:Connect(ID_DETACHDEBUG, wx.wxEVT_COMMAND_MENU_SELECTED,
function () debugger.detach() end)
frame:Connect(ID_DETACHDEBUG, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable((debugger.server ~= nil) and (not debugger.scratchpad))
end)
frame:Connect(ID_RUNTO, wx.wxEVT_COMMAND_MENU_SELECTED,
function ()
local editor = GetEditor()
debugger.runto(editor, editor:GetCurrentLine())
end)
frame:Connect(ID_RUNTO, wx.wxEVT_UPDATE_UI,
function (event)
local editor = GetEditor()
event:Enable((debugger.server ~= nil) and (not debugger.running)
and (not debugger.scratchpad))
and (editor ~= nil) and (not debugger.scratchpad))
end)
frame:Connect(ID_STEP, wx.wxEVT_COMMAND_MENU_SELECTED,
@@ -422,13 +472,3 @@ frame:Connect(ID_COMMANDLINEPARAMETERS, wx.wxEVT_UPDATE_UI,
function (event)
event:Enable(ide.interpreter and ide.interpreter.takeparameters and true or false)
end)
frame:Connect(wx.wxEVT_IDLE,
function(event)
if (debugger.update) then debugger.update() end
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
if IndicateIfNeeded() then event:RequestMore(true) end
PackageEventHandleOnce("onIdleOnce", event)
PackageEventHandle("onIdle", event)
event:Skip() -- let other EVT_IDLE handlers to work on the event
end)

View File

@@ -1,29 +1,35 @@
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- authors: Lomtik Software (J. Winwood & John Labenski)
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
local ide = ide
-- Create the Search menu and attach the callback functions
local q = EscapeMagic
local unpack = table.unpack or unpack
local frame = ide.frame
local menuBar = frame.menuBar
local findReplace = ide.findReplace
local findMenu = wx.wxMenu{
{ ID_FIND, TR("&Find")..KSC(ID_FIND), TR("Find text") },
{ ID_FINDNEXT, TR("Find &Next")..KSC(ID_FINDNEXT), TR("Find the next text occurrence") },
{ ID_FINDPREV, TR("Find &Previous")..KSC(ID_FINDPREV), TR("Find the earlier text occurence") },
{ ID_FINDSELECTNEXT, TR("Select and Find Next")..KSC(ID_FINDSELECTNEXT), TR("Select the word under cursor and find its next occurrence") },
{ ID_FINDSELECTPREV, TR("Select and Find Previous")..KSC(ID_FINDSELECTPREV), TR("Select the word under cursor and find its previous occurrence") },
{ ID_FINDSELECTNEXT, TR("Select And Find Next")..KSC(ID_FINDSELECTNEXT), TR("Select the word under cursor and find its next occurrence") },
{ ID_FINDSELECTPREV, TR("Select And Find Previous")..KSC(ID_FINDSELECTPREV), TR("Select the word under cursor and find its previous occurrence") },
{ ID_REPLACE, TR("&Replace")..KSC(ID_REPLACE), TR("Find and replace text") },
{ },
{ ID_FINDINFILES, TR("Find &In Files")..KSC(ID_FINDINFILES), TR("Find text in files") },
{ ID_REPLACEINFILES, TR("Re&place In Files")..KSC(ID_REPLACEINFILES), TR("Find and replace text in files") },
{ },
{ ID_GOTOLINE, TR("&Go To Line...")..KSC(ID_GOTOLINE), TR("Go to a selected line") },
}
findMenu:Append(ID_NAVIGATE, TR("Navigate"), wx.wxMenu {
{ ID_NAVIGATETOFILE, TR("Go To File...")..KSC(ID_NAVIGATETOFILE), TR("Go to file") },
{ ID_NAVIGATETOLINE, TR("Go To Line...")..KSC(ID_NAVIGATETOLINE), TR("Go to line") },
{ ID_NAVIGATETOSYMBOL, TR("Go To Symbol...")..KSC(ID_NAVIGATETOSYMBOL), TR("Go to symbol") },
{ ID_NAVIGATETOMETHOD, TR("Insert Library Function...")..KSC(ID_NAVIGATETOMETHOD), TR("Find and insert library function") },
})
menuBar:Append(findMenu, TR("&Search"))
local function onUpdateUISearchMenu(event) event:Enable(GetEditor() ~= nil) end
@@ -56,10 +62,10 @@ frame:Connect(ID_FINDNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
local selection = editor:GetMainSelection() + 1
if selection >= editor:GetSelections() then selection = 0 end
editor:SetMainSelection(selection)
editor:EnsureCaretVisible()
editor:ShowPosEnforcePolicy(editor:GetCurrentPos())
else
if findReplace:GetSelectedString() or findReplace:HasText() then
findReplace:FindString()
if findReplace:SetFind(findReplace:GetFind() or findReplace:GetSelection()) then
findReplace:Find()
else
findReplace:Show(false)
end
@@ -74,10 +80,10 @@ frame:Connect(ID_FINDPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
local selection = editor:GetMainSelection() - 1
if selection < 0 then selection = editor:GetSelections() - 1 end
editor:SetMainSelection(selection)
editor:EnsureCaretVisible()
editor:ShowPosEnforcePolicy(editor:GetCurrentPos())
else
if findReplace:GetSelectedString() or findReplace:HasText() then
findReplace:FindString(true) -- search up
if findReplace:SetFind(findReplace:GetFind() or findReplace:GetSelection()) then
findReplace:Find(true) -- search up
else
findReplace:Show(false)
end
@@ -88,61 +94,327 @@ frame:Connect(ID_FINDPREV, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
-- Select and Find behaves like Find if there is a current selection;
-- if not, it selects a word under cursor (if any) and does find.
local function selectWordUnderCaret(editor)
local pos = editor:GetCurrentPos()
local text = editor:GetTextRange( -- try to select a word under caret
editor:WordStartPosition(pos, true), editor:WordEndPosition(pos, true))
return #text > 0 and text or editor:GetTextRange( -- try to select a non-word under caret
editor:WordStartPosition(pos, false), editor:WordEndPosition(pos, false))
end
frame:Connect(ID_FINDSELECTNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
local editor = GetEditor()
if editor:GetSelectionStart() ~= editor:GetSelectionEnd() then
ide.frame:AddPendingEvent(
wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FINDNEXT))
return
end
local text = selectWordUnderCaret(editor)
if #text > 0 then
findReplace.findText = text
findReplace:FindString()
if findReplace:SetFind(findReplace:GetSelection() or findReplace:GetWordAtCaret()) then
findReplace:Find()
end
end)
frame:Connect(ID_FINDSELECTNEXT, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
frame:Connect(ID_FINDSELECTPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
local editor = GetEditor()
if editor:GetSelectionStart() ~= editor:GetSelectionEnd() then
ide.frame:AddPendingEvent(
wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FINDPREV))
return
end
local text = selectWordUnderCaret(editor)
if #text > 0 then
findReplace.findText = text
findReplace:FindString(true)
if findReplace:SetFind(findReplace:GetSelection() or findReplace:GetWordAtCaret()) then
findReplace:Find(true)
end
end)
frame:Connect(ID_FINDSELECTPREV, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
-------------------- Find replace end
local markername = "commandbar.background"
local mac = ide.osname == 'Macintosh'
local win = ide.osname == 'Windows'
local special = {SYMBOL = '@', LINE = ':', METHOD = ';'}
local tabsep = "\0"
local function name2index(name)
local p = name:find(tabsep)
return p and tonumber(name:sub(p + #tabsep)) or nil
end
local function navigateTo(default, selected)
local styles = ide.config.styles
local marker = ide:AddMarker(markername,
wxstc.wxSTC_MARK_BACKGROUND, styles.text.fg, styles.caretlinebg.bg)
frame:Connect(ID_GOTOLINE, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
local editor = GetEditor()
local linecur = editor:LineFromPosition(editor:GetCurrentPos())
local linemax = editor:LineFromPosition(editor:GetLength()) + 1
local linenum = wx.wxGetNumberFromUser(TR("Enter line number"),
"1 .. "..tostring(linemax),
TR("Go To Line"),
linecur, 1, linemax,
frame)
if linenum > 0 then
editor:GotoLine(linenum-1)
end
local nb = ide:GetEditorNotebook()
local selection = nb:GetSelection()
local maxitems = ide.config.commandbar.maxitems
local files, preview, origline, functions, methods
local function markLine(ed, toline)
ed:MarkerDefine(ide:GetMarker(markername))
ed:MarkerDeleteAll(marker)
ed:MarkerAdd(toline-1, marker)
-- store the original line if not stored yet
origline = origline or (ed:GetCurrentLine()+1)
ed:EnsureVisibleEnforcePolicy(toline-1)
end
CommandBarShow({
defaultText = default or "",
selectedText = selected or "",
onDone = function(t, enter, text)
if not mac then nb:Freeze() end
-- delete all current line markers if any; restore line position
local ed = ide:GetEditor()
if ed and origline then
ed:MarkerDeleteAll(marker)
-- only restore original line if Escape was used (enter == false)
if enter == false then ed:EnsureVisibleEnforcePolicy(origline-1) end
end
local pindex = preview and nb:GetPageIndex(preview)
if enter then
local fline, sline, tabindex = unpack(t or {})
-- jump to symbol; tabindex has the position of the symbol
if text and text:find(special.SYMBOL) then
if sline and tabindex then
local index = name2index(sline)
local editor = index and nb:GetPage(index):DynamicCast("wxStyledTextCtrl")
if not editor then
local doc = ide:FindDocument(sline)
-- reload the file (including the preview to refresh its symbols in the outline)
editor = LoadFile(sline, (not doc or doc:GetTabIndex() == pindex) and preview or nil)
end
if editor then
if pindex and pindex ~= ide:GetDocument(editor):GetTabIndex() then ClosePage(pindex) end
editor:SetFocus() -- in case the focus is on some other panel
editor:GotoPos(tabindex-1)
editor:EnsureVisibleEnforcePolicy(editor:LineFromPosition(tabindex-1))
end
end
-- insert selected method
elseif text and text:find('^%s*'..special.METHOD) then
if ed then -- clean up text and insert at the current location
local method = sline
local isfunc = methods.desc[method][1]:find(q(method).."%s*%(")
local text = method .. (isfunc and "()" or "")
local pos = ed:GetCurrentPos()
ed:InsertTextDyn(pos, text)
ed:EnsureVisibleEnforcePolicy(ed:LineFromPosition(pos))
ed:GotoPos(pos + #method + (isfunc and 1 or 0))
if isfunc then -- show the tooltip
ide.frame:AddPendingEvent(wx.wxCommandEvent(
wx.wxEVT_COMMAND_MENU_SELECTED, ID_SHOWTOOLTIP))
end
end
-- set line position in the (current) editor if requested
elseif text and text:find(special.LINE..'(%d+)%s*$') then
local toline = tonumber(text:match(special.LINE..'(%d+)'))
if toline and ed then
ed:GotoLine(toline-1)
ed:EnsureVisibleEnforcePolicy(toline-1)
ed:SetFocus() -- in case the focus is on some other panel
end
elseif tabindex then -- switch to existing tab
SetEditorSelection(tabindex)
if pindex and pindex ~= tabindex then ClosePage(pindex) end
-- load a new file (into preview if set)
elseif sline or text then
-- 1. use "text" if Ctrl/Cmd-Enter is used
-- 2. otherwise use currently selected file
-- 3. otherwise use "text"
local file = (wx.wxGetKeyState(wx.WXK_CONTROL) and text) or sline or text
local fullPath = MergeFullPath(ide:GetProject(), file)
local doc = ide:FindDocument(fullPath)
-- if the document is already opened (not in the preview)
-- or can't be opened as a file or folder, then close the preview
if doc and doc.index ~= pindex
or not LoadFile(fullPath, preview or nil) and not ProjectUpdateProjectDir(fullPath) then
if pindex then ClosePage(pindex) end
end
end
elseif enter == nil then -- changed focus
-- do nothing; keep everything as is
else
-- close preview
if pindex then ClosePage(pindex) end
-- restore original selection if canceled
if nb:GetSelection() ~= selection then nb:SetSelection(selection) end
end
preview = nil
if not mac then nb:Thaw() end
end,
onUpdate = function(text)
local lines = {}
local projdir = ide:GetProject()
-- delete all current line markers if any
-- restore the original position if search text is updated
local ed = ide:GetEditor()
if ed and origline then ed:MarkerDeleteAll(marker) end
-- reset cached functions if no symbol search
if text and not text:find(special.SYMBOL) then
functions = nil
if ed and origline then ed:EnsureVisibleEnforcePolicy(origline-1) end
end
-- reset cached methods if no method search
if text and not text:find(special.METHOD) then methods = nil end
if text and text:find(special.SYMBOL) then
local file, symbol = text:match('^(.*)'..special.SYMBOL..'(.*)')
if not functions then
local nums, paths = {}, {}
functions = {pos = {}, src = {}}
local function populateSymbols(path, symbols)
for _, func in ipairs(symbols) do
table.insert(functions, func.name)
nums[func.name] = (nums[func.name] or 0) + 1
local num = nums[func.name]
functions.src[func.name..num] = path
functions.pos[func.name..num] = func.pos
end
end
local currentonly = #file > 0 and ed
local outline = ide:GetOutline()
for _, doc in pairs(currentonly and {ide:GetDocument(ed)} or ide:GetDocuments()) do
local path, editor = doc:GetFilePath(), doc:GetEditor()
if path then paths[path] = true end
populateSymbols(path or doc:GetFileName()..tabsep..doc:GetTabIndex(), outline:GetEditorSymbols(editor))
end
-- now add all other files in the project
if not currentonly and ide.config.commandbar.showallsymbols then
local n = 0
outline:RefreshSymbols(projdir, function(path)
local symbols = outline:GetFileSymbols(path)
if not paths[path] and symbols then populateSymbols(path, symbols) end
if not symbols then n = n + 1 end
end)
if n > 0 then ide:SetStatusFor(TR("Queued %d files to index."):format(n)) end
end
end
local nums = {}
if #symbol > 0 then
local topscore
for _, item in ipairs(CommandBarScoreItems(functions, symbol, maxitems)) do
local func, score = unpack(item)
topscore = topscore or score
nums[func] = (nums[func] or 0) + 1
local num = nums[func]
if score > topscore / 4 and score > 1 then
table.insert(lines, {("%2d %s"):format(score, func),
functions.src[func..num], functions.pos[func..num]})
end
end
else
for n, name in ipairs(functions) do
if n > maxitems then break end
nums[name] = (nums[name] or 0) + 1
local num = nums[name]
lines[n] = {name, functions.src[name..num], functions.pos[name..num]}
end
end
elseif ed and text and text:find('^%s*'..special.METHOD) then
if not methods then
methods = {desc = {}}
local num = 1
if ed.api and ed.api.tip and ed.api.tip.shortfinfoclass then
for libname, lib in pairs(ed.api.tip.shortfinfoclass) do
for method, val in pairs(lib) do
local signature, desc = val:match('(.-)\n(.*)')
local m = libname..'.'..method
desc = desc and desc:gsub("\n", " ") or val
methods[num] = m
methods.desc[m] = {signature or (libname..'.'..method), desc}
num = num + 1
end
end
end
end
local method = text:match(special.METHOD..'(.*)')
if #method > 0 then
local topscore
for _, item in ipairs(CommandBarScoreItems(methods, method, maxitems)) do
local method, score = unpack(item)
topscore = topscore or score
if score > topscore / 4 and score > 1 then
table.insert(lines, { score, method })
end
end
end
elseif text and text:find(special.LINE..'(%d*)%s*$') then
local toline = tonumber(text:match(special.LINE..'(%d+)'))
if toline and ed then markLine(ed, toline) end
elseif text and #text > 0 and projdir and #projdir > 0 then
-- populate the list of files
files = files or FileSysGetRecursive(projdir, true, "*",
{sort = false, path = false, folder = false, skipbinary = true})
local topscore
for _, item in ipairs(CommandBarScoreItems(files, text, maxitems)) do
local file, score = unpack(item)
topscore = topscore or score
if score > topscore / 4 and score > 1 then
table.insert(lines, {
("%2d %s"):format(score, wx.wxFileName(file):GetFullName()),
file,
})
end
end
else
for _, doc in pairs(ide:GetDocuments()) do
lines[doc:GetTabIndex()+1] = {doc:GetFileName(), doc:GetFilePath(), doc:GetTabIndex()}
end
end
return lines
end,
onItem = function(t)
if methods then
local score, method = unpack(t)
return ("%2d %s"):format(score, methods.desc[method][1]), methods.desc[method][2]
else
return unpack(t)
end
end,
onSelection = function(t, text)
local _, file, tabindex = unpack(t)
local pos
if text and text:find(special.SYMBOL) then
pos, tabindex = tabindex, name2index(file)
elseif text and text:find(special.METHOD) then
return
end
if file then file = MergeFullPath(ide:GetProject(), file) end
-- disabling event handlers for the notebook and the editor
-- to minimize changes in the UI when editors are switched
-- or files in the preview are updated.
nb:SetEvtHandlerEnabled(false)
local doc = file and ide:FindDocument(file)
if doc and not tabindex then tabindex = doc:GetTabIndex() end
if tabindex then
local ed = nb:GetPage(tabindex)
ed:SetEvtHandlerEnabled(false)
if nb:GetSelection() ~= tabindex then nb:SetSelection(tabindex) end
ed:SetEvtHandlerEnabled(true)
elseif file then
-- skip binary files with unknown extensions
if #ide:GetKnownExtensions(GetFileExt(file)) > 0
or not IsBinary(FileRead(file, 2048)) then
preview = preview or NewFile()
preview:SetEvtHandlerEnabled(false)
LoadFile(file, preview, true, true)
preview:SetFocus()
-- force refresh since the panel covers the editor on OSX/Linux
-- this fixes the preview window not always redrawn on Linux
if not win then preview:Update() preview:Refresh() end
preview:SetEvtHandlerEnabled(true)
elseif preview then
ClosePage(nb:GetPageIndex(preview))
preview = nil
end
end
nb:SetEvtHandlerEnabled(true)
if text and text:find(special.SYMBOL) then
local ed = ide:GetEditor()
if ed then markLine(ed, ed:LineFromPosition(pos-1)+1) end
end
end,
})
end
frame:Connect(ID_NAVIGATETOFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
function() navigateTo("") end)
frame:Connect(ID_NAVIGATETOLINE, wx.wxEVT_COMMAND_MENU_SELECTED,
function() navigateTo(special.LINE) end)
frame:Connect(ID_NAVIGATETOMETHOD, wx.wxEVT_COMMAND_MENU_SELECTED,
function() navigateTo(special.METHOD) end)
frame:Connect(ID_NAVIGATETOSYMBOL, wx.wxEVT_COMMAND_MENU_SELECTED,
function()
local ed = GetEditor()
navigateTo(special.SYMBOL, ed and ed:ValueFromPosition(ed:GetCurrentPos()))
end)
frame:Connect(ID_GOTOLINE, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)

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