Jump to content

July 8, 2018: New SciTE4AutoIt3 available with the updated SciTE v4.1.0 release


Recommended Posts

  • Developers

7/8/2018: Uploaded a new SciTe4AutoIt3.exe v18.708.1148.0 installer.

It has been over a year since the last update of the full SciTE4AutoIt3 installer whch mainly had to do with the fact that Neil was moving toward v4 of SciTE and I wanted to wait for a stable version.

Any help with testing this version before general release is appreciated.
Also any feedback is welcome in caseI missed something or suggestions for improvement before releasing.

==> SciTE4AutoIt3 v18.708.1148.0

Enjoy,
Jos


Addition/Changes/Fixes in the current installer:

--------------------------------------------------------------------------------------------------
8-7-2018
*** Merged the SciTE v 4.1.0 by Neil Hodgson with our own version of SciTE. (Jos)
    This is a major change from the previous version so ensure you update all files including LUA or else you will get errors!
    - SciLexer au3: Fixed issues with nested CommentBlocks not always showing the correct color.
    - SciLexer au3: Change any line starting with # and no recognised keyword to be shown with the Pre-Processor in stead of default.
    - Changed Shortcut for AU3INFO to Ctrl+Shift+F6.
    - Moved the session restore logic for (save.session.advanced=1)into SciTE in stead of LoadSession.lua as that was clearing the recent files list of the last session
      when opening a file by double cliking it. This is fixed with this change.
      Default remains 0 so when a file is double clicked the last session isn't restored unless you add this to SciTEuser.properties:
      "save.session.advanced=1"
    - updated Tools.lua replacing [s%] with [ /t] to avoid empty lines being stripped by those functions. (Thanks Enyby)
    *** Updated AutoIt3Wrapper v18.708.1148.0 (Jos)
    - 17.224.935.1 Added /autoit3dir to au3stripper commandline, when provided to AutoIt3Wrapper., to ensure the included files are for the correct AutoIt3 directory
    - 17.224.935.2 Added directives:
         #AutoIt3Wrapper_Res_CompanyName=          ;Company field
         #AutoIt3Wrapper_Res_LegalTrademarks=      ;Trademark field
    - 17.224.935.5 Fixed Versioning when files contain backets ->  ()
    - 17.224.935.6 Added support for :
         #AutoIt3Wrapper_Au3stripper_Stop_OnError=        ;(Y/N) Continue/Stop on Warnings.(Default=N)
    - 17.224.935.7 added INI support for:
          [Other]
           Au3Stripper_Stop_OnError=n
    - 17.224.935.10 Minor changes in console messages
    - 17.224.935.11 Modifications from JPM:
        - add #AutpIt3Wrapper_Res_Cursor_Add
        - "clean" a little bit AutoIt3Wrapper.au3
*** Updated Au3Stripper v18.708.1148.0 (Jos)
    - 17.224.935.1 Fixed crash when an include file contains longer record than 4096 characters.
    - 17.224.935.2 Changed /rsln to replace @ScriptLineNumber in the Master script with "XXX/YYY". XXX is the master script linenumber, YYY is the Merged script linenumber.
    - 17.224.935.3 Fixed issue detecting #cs #ce when a space was missing after the directive.
    - 17.224.935.4 Changed Close/Open logic for Tracelog to (hopefully) avoid the hardcrash.
    - 17.224.935.5 improved speed avoiding rereading include files to determine the max rec len.
    - 17.224.935.6 improved speed by re-coding the check for long records.
    - 17.224.935.7 Made sure the returncode is the highest from all iterations in stead of the last iteration.
    - 17.224.935.8 fix for reported bug: https://www.autoitscript.com/trac/autoit/ticket/3623#comment:4
    - 17.224.935.9 added support for #autoit3wrapper_autoit3dir
    - 17.224.935.10 Fixed support for #autoit3wrapper_autoit3dir when followed by linecomment
                    Stop processing when include file isn't found.
    - 18.624.1847.1 strip the leading and trailing double quotes from the autoit3dir directive to avoid an error when they are specified.
    - 18.624.1847.2 Fixed Hardcrash in the Include logic
    - 18.624.1847.3 Fixed Hardcrash in Func stripping logic by enlarging the base table size
    - 18.702.1556.1 Fixed regression bug with the Translate option.
    - 18.703.1808.2 Fixed regression bug with the Stripping FUNC logic for the first found FUNC.
    *** Updated SciTEConfig v18.708.1148.0 (Jos)
    - 17.224.935.1 No updates
*** Updated Tidy v18.708.1148.0 (Jos)
    - 17.224.935.1 Added option  to copy comments from #CS to #CE. Default is to copy the comments.
                   Added Tidy Parameters:  /Skip_CE_Comment or /scec will skip this copy action
                   Added INI option:
                     * * *  Add comment to #CE/#CommentEnd and make it the same as the #CS/CommentStart Comments.
                     ce_comment=1
    - 17.224.935.2 Fix issue with Copy comments on comment start - end
    - 17.224.935.4 Fix another issue with Copy comments on comment start - end
--------------------------------------------------------------------------------------------------

==> ScitillaHistory page containing all SciTE-Scintilla updates.
==> Visit the SciTE4AutoIt3 Download page for the latest versions
==> Check the online documentation for an overview of all extra's you get with this installer.

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
  • Jos pinned this topic
  • Replies 90
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

We have a winner !   

7/8/2018: Uploaded a new SciTe4AutoIt3.exe v18.708.1148.0 installer. It has been over a year since the last update of the full SciTE4AutoIt3 installer whch mainly had to do with the fact that Nei

I have made a new Beta version 4.1.1 of SciTE4AutoIt3 available in the beta directory. Just download both SciTE.exe and SciLexer.dll when you like to try it. Jos

Posted Images

Hello,

On Windows 10 I have to change the FINDSTR command in the SciTEGlobal.properties file else searching within subdirectories does not return results.

E.g., I have to change: 
find.command=findstr /N /S /I /R "$(find.what)" "$(find.files)"

To:
find.command=findstr /n /s /I /C:"$(find.what)" "$(find.files)"

Is it just me?

 

Always carry a towel.

Link to post
Share on other sites
  • Developers

The /R is to make it search for a regular expression, which allows for much more option in the search text. 
What is the search text you search for that isn't working?

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
3 minutes ago, Jos said:

The /R is to make it search for a regular expression, which allows for much more option in the search text. 
What is the search text you search for that isn't working?

Jos

Aha! It's clearly an issue with use of findstr (probably not a defect in findstr either).

The text I tried to search for has a path e.g., "#AutoIt3Wrapper_Icon=..\Include\NewIcon.ico". If I search for "NewIcon.ico" or "\NewIcon.ico", it works fine in recursing the folders during search (with /R). But if I search for "\Include\NewIcon.ico" or "\Include\" it does not. It's the extra backslash in the string and it seems to affect findstr when using /R and not /C.

Always carry a towel.

Link to post
Share on other sites
  • Developers
11 minutes ago, ModemJunki said:

"\Include\NewIcon.ico"

Try:

"\\Include\\NewIcon.ico"

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
  • Developers

it is up to you whether you prefer the literal string option or the regex, but I am planning to leave the current as default if that doesn't case big issuesas that gives much broader options for searching in files.

Thanks for the feedback.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
16 minutes ago, Jos said:

it is up to you whether you prefer the literal string option or the regex, but I am planning to leave the current as default if that doesn't case big issuesas that gives much broader options for searching in files.

Thanks for the feedback.

Jos

I will leave the default as I do not have to search many times for things like the include file names or the icon directive, it was only that I have a new icon today and at the same time found the new SciTE package is available.

Using the defaults where possible will prevent me from not remembering why I changed things later. This I have learned the hard way. :P

Always carry a towel.

Link to post
Share on other sites

After i updated SciTe i got these 2 messages when i tried to run (F5) a script.

screenshot - 10072018-2258.jpg

screenshot - 10072018-2210.jpg

EDIT: Reverted to SciTE4AutoIt3 v17.224.935.0 and the problem is gone, so i assume it's something in the new version, but it might be something else, as i don't see anyone else complaining about this..

Edited by careca
Spoiler

Renamer - Rename files and folders, remove portions of text from the filename etc.

GPO Tool - Export/Import Group policy settings.

MirrorDir - Synchronize/Backup/Mirror Folders

BeatsPlayer - Music player.

Params Tool - Right click an exe to see it's parameters or execute them.

String Trigger - Triggers pasting text or applications or internet links on specific strings.

Inconspicuous - Hide files in plain sight, not fully encrypted.

Regedit Control - Registry browsing history, quickly jump into any saved key.

Time4Shutdown - Write the time for shutdown in minutes.

Power Profiles Tool - Set a profile as active, delete, duplicate, export and import.

Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes.

NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s.

IUIAutomation - Topic with framework and examples

Au3Record.exe

Link to post
Share on other sites
  • Developers

Those lines weren't changed between those releases, so it seems your new version is corrupted?
Maybe an AntiVirus is interfering or something?
Could you PM me the new AutoIt3Wrapper version you have to doublecheck?

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
  • 3 weeks later...

Hi Jos

Thanks for the update. :)

There is one problem: Alt+L doesn't work anymore. I have updated two AI3 dev environments on two Windows installations, one Win 7 and one win 10 and in both cases it's the same problem with Alt+L. If I press Alt+L then it opens only a very small windows but without any list, see attachment.

I updated both environments from AI3 3.3.14.2 and Scite 3.7.3 to AI3 3.3.14.5 and Scite 4.1.0.

 

scite_alt-l-bug.png

Link to post
Share on other sites
  • Developers

Looks like this is due to a patch that was proposed around the release of the latest version.

Try changing line 24 in AutoitTools.lua back to:

self.Pattern = "()[%s][Ff][Uu][Nn][Cc][%s]+([%w%s_]*%(.-%))"

I need some more time to investigate but this should fix it for the moment.

Jos

also uploaded a fixed AutoitTools.lua to beta.

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
  • Developers

Then I don't know.
What exactly did you do? Change the line or update the file?
What is happening in your case when doing Alt+L?

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
  • Developers

Not sure what is happening for you.
Maybe we need to start with checking the Virtual store to see if there is a AutoitTools.lua  there that is screwing things up:
C:\Users\..........\AppData\Local\VirtualStore\Program Files (x86)\AutoIt3\SciTE\Lua

Jos

 

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to post
Share on other sites
17 minutes ago, Jos said:

Not sure what is happening for you.
Maybe we need to start with checking the Virtual store to see if there is a AutoitTools.lua  there that is screwing things up:
C:\Users\..........\AppData\Local\VirtualStore\Program Files (x86)\AutoIt3\SciTE\Lua

Jos

 

I don't find a virtual store at all.

Using software "everything" I find only one copy of AutoITTools.lua on my system (Windows 10 1703 build 15063.1206).

Edited by ModemJunki
;~ need to go have lunch.

Always carry a towel.

Link to post
Share on other sites
  • Jos locked and unpinned this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By beautifulsoup
      Hi All,
      I'm not sure if its possible that I'm trying to achieve, I've looked into https://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/AutoIt3Wrapper.html and such resources for help, but I cant really find the answer to my question.
      So upon compiling the script in SciTE, the exe file is given a Description under file Properties>Details. I understand, that  one can enter info manually there and it can even implement the version automatically with each compilation.
       
      What I'm trying to achieve is to somehow include the "@ScriptName" in the Details>File Description Field. But as I see no variable can be taken after "#" in this case.
       
      Do You think its achievable? (Win 10)
       
      Much obliged for taking time on reading this.
       
      Kind Regards,
      Brave


    • By argumentum
      In the console under the editor in SciTE: 
      if I add @@ Debug(line,column) then it goes there.
      if I add "script.au3" (line,column) then it goes there if loaded.
      if I add "c:\path\script.au3" (line,column) then it loads the file and goes there.
      ...so far so good.
      Since I don't know LUA, nor where that is at, my question is ... where is it at ?
      A silly question because once there I would not know what to do, since I don't know LUA.
      What I want to achieve is, that since there is something delimiting the script and editor position (li,co), a way to have, let's say:
      +I like this color and the text that I care for on the left ["c:\path\script.au3" (line,column)]
      and by having this ["" ()] format ( or anything else, it don't have to be this exact format ), the console would know to jump there.
      If DClick to jump/goto Line,Column can trigger an external EXE or script, I'd take it from there. If it all can be done from LUA then, I'd do it there.
      So I don't mind or know how. I just would like that functionality. In a way that don't require a recompile of SciTE.
      Thanks  
    • By Mbee
      Hi, @Jos and others!
      I've been running SciTE4AutoIt3 under Windows 7 Pro then Windows 10 Pro for years with a dual-monitor setup. What an awesome set of tools! I'm using version 4.4.6, 32-bit - aka SciTE4AutoIt3 v21.316.1639.2
      Until two days ago, when I double-clicked an au3 file, SciTE opened it's window on my secondary monitor, which is just where I wanted it. But now, all of a sudden, it always opens on the primary monitor, which is just where I don't want it! UltraEdit and Notepad++ always open on the monitor where the last window was opened, which is fine. But not SciTE4AutoIt3.
      It's possible that this problem is related to a newly encountered issue wherein Windows apparently arbitrarily decided that the desktop on the secondary at the long-standing resolution of 1920x1080 should no longer fit the display. I booted up a few days ago to find that the taskbar was no longer visible and the other three edges wouldn't fit either. I was forced to change the resolution to  1680x1050. Perhaps SciTE4AutoIt3 will automatically choose the monitor with the highest resolution?
      To try to solve this issue myself, I've examined all the Options files, but I can't find anything related to monitors. How can I get SciTE to open on my secondary monitor again?
      Thanks!
       
    • By BugFix
      The block comment (internal: box comment) in SciTE cannot be toggled.
      I have now created a script that helps. It works with any file type for which the corresponding entries in the properties are created.For toggeling its required to detect, what the user want to do.
      EDIT 2021-04-14 [v0.10]
      In the meantime, I have changed and discarded a few things. But in my opinion, the current variant is much easier to handle:
      Rules for detection: UNSET COMMENT BLOCK - NEW: NONE SELECTION IS REQUIRED! There must exist an comment block near the cursor position (cursor inside the .start line or above). The script detects automatically the "comment.box.start" and the corresponding "comment.box.end" (also if nested) and works until this line. SET COMMENT BLOCK - Some text must selected (at minimum one character) - Starts and/or ends the selection inside of a line, the selection will expanded to full line. - Ends the selection in a line with text, but at line start position so will this line ignored! - Leading and trailing empty lines in selection will ignored! This means that in nested block comments there is at least one more line between two comment.box.start markers.
      It is recommended to write all block comment settings into "SciTEUser.properties". The setting "comment.box.end.au3" from "SciTEGlobal.properties" is incorrect and must be corrected.
      comment.box.start.au3=#cs #~ If you want characters or tab in each line of comment block (middle lines), define it here. #~ If TAB should used as box.middle, set it so: comment.box.middle.au3=@Tab #~ "@Tab" is replaced by a tabulator by the script. comment.box.middle.au3= comment.box.end.au3=#ce additional [optional] property: #~ message for comment block set or unset - output/none (1/0), default=0 (none output) #~ e.g.: "++ COMMENT BLOCK - UNSET [line 103-106]" #~ SET : current line numbers of commented text including the lines with .start .end #~ UNSET: current line number(s) of text that was commented comment.box.output=0 Connection to SciTE
      Search a free command number. Use a Hotkey of your choice. (or use the default shortcut: Ctrl+Shift+Q)
      If you have declared an option for user lua scripts (e.g.: "Lua.User.Scripts.Path=C:\code\lua"), copy the script to this folder.
      Otherwise copy it to a folder of your choice and change the path in the command: "dofile". But backslashes in the path must be masked. ("\\").
      If your path has spaces don't forgot to encapsulate in string delimiters.
      # 24 Toggle Block Comment command.name.24.*=Toggle Block Comment command.24.*=dofile $(Lua.User.Scripts.Path)/BlockComment.lua command.mode.24.*=subsystem:lua,savebefore:no command.shortcut.24.*=Ctrl+Alt+F10  
      Here the lua script:
      -- TIME_STAMP 2021-04-14 17:56:37 v 0.10 --[[ Toggle Block Comments ©BugFix ( autoit[at]bug-fix.info ) For toggeling its required to detect, what the user want to do. Rules for detection: UNSET COMMENT BLOCK - NEW: NONE SELECTION IS REQUIRED! There must exist an comment block near the cursor position (cursor inside the .start line or above). The script detects automatically the "comment.box.start" and the corresponding "comment.box.end" (also if nested) and works until this line. SET COMMENT BLOCK - Some text must selected (at minimum one character) - Starts and/or ends the selection inside of a line, the selection will expanded to full line. - Ends the selection in a line with text, but at line start position so will this line ignored! - Leading and trailing empty lines in selection will ignored! Properties: It is recommended to write all block comment settings into SciTEUser.properties. The setting "comment.box.end.au3" from "au3.properties" is wrong and must be corrected. comment.box.start.au3=#cs #~ If you want characters or tab in each line of comment block (middle lines), define it here. #~ If TAB should used as box.middle, set it so: comment.box.middle.au3=@Tab #~ "@Tab" is replaced by a tabulator by the script. comment.box.middle.au3= comment.box.end.au3=#ce additional [optional] property: #~ message for comment block set or unset - output/none (1/0), default=0 (none output) #~ e.g.: "++ COMMENT BLOCK - UNSET [line 103-106]" #~ SET : current line numbers of commented text including the lines with .start .end #~ UNSET: current line number(s) of text that was commented comment.box.output=0 Example with AutoIt comment: "SelectionStart" = [S] "SelectionEnd" = [E] ---------------------------------------------------------------------- selection: or or 1 [S]line with some text[E] 1 [S] 1 lin[S]e with some text[E] 2 line with some text[E] or or or 1 [S] 1 [S]line with some text 1 [S] 2 line with some text 2 [E] 2 line with so[E]me text 3 [E] or or 1 [S] 1 [S] ... empty lines 2 line with some text 5 ... empty lines 6 line with some text 6 7 [E] 7 [E] result for all: 1 #cs 2 line with some text 3 #ce ---------------------------------------------------------------------- ]] --[[ History v 0.10 - fixed: If last selected line is also last line in editor, the comment.end was set in this line and so was this line deleted if has toggled. v 0.9 - removed: comment.box.ignore.empty.before/after - was not very usefull - added: detection (and excluding) of leading and/or trailing empty lines in selection v 0.8 - fixed: Problem with selection starts/ends in the middle of a line or ends at the first position of the line with text v 0.7 - added: Automatic detection for comment blocks, NO SELECTION REQUIRED to unset a comment block - added: properties comment.box.ignore.empty.before: if first selected line is empty -- don't include in comment block comment.box.ignore.empty.after: if last selected line is empty -- don't include in comment block comment.box.output: if "1" -- write result of proceeding to console, default is "0" - changed: minimum required selection to start block comment: 1 character v 0.6 - fixed: if selection for uncommenting is wrong, leading/trailing empty line will removed v 0.5 - fixed: the trailing line break from comment.end while uncommenting will not removed v 0.4 - added: detection for uncommenting if selection is wrong (starts/ends in empty line) v 0.3 - project new designed (object syntax) v 0.2 - fixed: missed adding of middle marker in first line ]] local BlockComment = { -- variables ext, -- file extension boxStart, -- property: comment.box.start boxMiddle, -- property: comment.box.middle boxEnd, -- property: comment.box.end bMiddle, -- bool: boxMiddle is defined lenEOL, -- length of line break character(s) from file in editor eol, -- the end of line character(s) in this file msg = {}, -- store line numbers (start, end) for proceeding message selS = {}, -- selection start selE = {}, -- selection end -- selection table fields: -- .pos, -- selection position -- .line, -- selection line number newText, -- the text that replaces the selection -- initialize variables Init = function(self) self.ext = props["FileExt"] self.boxStart = props["comment.box.start."..self.ext] self.boxMiddle = props["comment.box.middle."..self.ext] self.bMiddle = not (self.boxMiddle == "") self.boxEnd = props["comment.box.end."..self.ext] if self.boxMiddle == "@Tab" then self.boxMiddle = "\t" end self.selS = self:SelLineData(editor.SelectionStart) self.selE = self:SelLineData(editor.SelectionEnd) self.lenEOL = self:GetEOL() self.eol = "\n" if self.lenEOL == 2 then self.eol = "\r\n" end self.newText = "" end, -- stores #pos and #line from selection position SelLineData = function(self, _selPos) -- _selPos: editor.SelectionStart or editor.SelectionEnd local t = {} t.pos = _selPos t.line = editor:LineFromPosition(t.pos) return t end, -- returns position from start and end (behind last visible char) of a line LineStartEndPos = function(self, _line) local startP = editor:PositionFromLine(_line) local endP = editor.LineEndPosition[_line] return startP, endP end, -- returns the length of EOL (default) or with "_getMode=true": LF/CRLF -- asking the property "eol.mode.type" is not safe, maybe not set and the global value may differ from the file in the editor GetEOL = function(self, _getMode) -- It is possible that another program makes entries (e.g.: version number) at the beginning of the file.. -- ..with a different EOL mode, therefore the second last line (last line with line break) of the file is checked. local l = editor.LineCount -2 local lenEOL if l < 0 then -- the eol.mode from properties will used instead (but not sure, if exists) local mode = props["eol.mode."..self.ext] -- mode for file type (if declared) if mode == "" then mode = props["eol.mode"] end -- otherwise the global mode if mode == "LF" then lenEOL = 1 else lenEOL = 2 end else local textEnd = editor.LineEndPosition[l] -- pos after last visible character local posLineStart = editor:PositionFromLine(l) -- first pos in line local textLen = textEnd - posLineStart -- pure text length local len = editor:LineLength(l) -- length of line including the line break characters lenEOL = len - textLen -- length of line line break characters end if _getMode then if lenEOL == 1 then return "LF" else return "CRLF" end else return lenEOL end end, -- detects if is/not selection IsSelection = function(self) return (self.selS.pos ~= self.selE.pos) end, -- mask magic characters MaskMagic = function(self, _s) if _s == nil then return "" end return _s:gsub('([%(%)%.%%%+%-%*%?%[%^%$])', '%%%1') end, -- checks if line is empty (has only a line break) LineIsEmpty = function(self, _line) -- _line: number or text from "editor:GetLine" if type(_line) == "string" then return (_line:len() == self.lenEOL) end if _line == nil then return true end local len = editor:LineLength(_line) return (len <= self.lenEOL) end, -- checks if line starts with/has box.start -- detects it also, if nested and middle marker(s) before the start marker LineHasStart = function(self, _line) if self:LineIsEmpty(_line) then return false end if type(_line) == "number" then _line = editor:GetLine(_line) end local pattern if self.boxMiddle == '' then pattern = self:MaskMagic(self.boxStart) else pattern = self:MaskMagic(self.boxMiddle)..'*'..self:MaskMagic(self.boxStart) end local n = _line:find(pattern) return (n ~= nil) end, -- checks if line starts with/has box.end -- detects it also if nested, and middle marker(s) before the end marker LineHasEnd = function(self, _line) if self:LineIsEmpty(_line) then return false end if type(_line) == "number" then _line = editor:GetLine(_line) end local pattern if self.boxMiddle == '' then pattern = self:MaskMagic(self.boxEnd) else pattern = self:MaskMagic(self.boxMiddle)..'*'..self:MaskMagic(self.boxEnd) end local n = _line:find(pattern) return (n ~= nil) end, -- remove middle marker/add line UncommentMiddleLine = function(self, _bMiddle, _text) if _bMiddle then self.newText = self.newText.._text:gsub("^("..self:MaskMagic(self.boxMiddle)..")", "") else self.newText = self.newText.._text end end, -- checks if passed line is last line in editor AND selection ends not at line start position IsLastLine = function(self, _line) return (editor.LineCount == (_line + 1)) and (editor:PositionFromLine(_line) ~= self.selE.pos) end, -- the ternary operator ternary = function(self, _condition, _ifTrue, _ifFalse) if _condition == true then return _ifTrue else return _ifFalse end end, -- creates the text to toggle and replace the selection with it Toggle = function(self) self:Init() local firstVisibleLine = editor.FirstVisibleLine local countNesting, bStart, nStart, text, nLine, replS, replE = 0, false, -1 local lineStart, lineEnd, bLastLine local sStart, sEnd = self:MaskMagic(self.boxStart), self:MaskMagic(self.boxEnd) local sMiddle = self:MaskMagic(self.boxMiddle) local bUsedMiddle = false -- (for uncommenting) check if first line after comment.start, starts with comment.box.middle marker local insertMiddle = "" if self.bMiddle then insertMiddle = self.boxMiddle end -- error check if self.boxStart == "" or self.boxEnd == "" then return print("! ERROR - The comment.box properties for *."..self.ext.." files are missing or incomplete.") end -- check for set comment block if (not self:IsSelection()) then -- none selection - means: Unset CommentBlock -- start unset self.msg.action = 'COMMENT BLOCK - UNSET' nLine = self.selS.line while nLine < editor.LineCount do text = editor:GetLine(nLine) -- line with eol if (not bStart) and self:LineHasStart(text) then -- first line with comment.box.start bStart = true self.msg.starts = nLine nStart = nLine replS = editor:PositionFromLine(nLine) -- save the start position for replacing end if nLine == nStart +1 then -- first line after comment.box.start if self.bMiddle then -- check if comment.box.middle is used, if defined local n = text:find(sMiddle) if n == 1 then bUsedMiddle = true end -- true, if starts with it end end if self:LineIsEmpty(text) then -- do nothing with empty lines, add them only if start was detected before if bStart then self.newText = self.newText..text end -- text is only a line break else if self:LineHasEnd(text) then -- the box.end or a nested box.end countNesting = countNesting -1 -- decrease nesting counter if countNesting == 0 then -- it's the corresponding end position self.newText = self.newText:sub(1, -(self.lenEOL +1)) -- ignore text from this line and delete line break from stored line before replE = editor.LineEndPosition[nLine] -- save the end position (w.o. line break) for replacing self.msg.ends = nLine -2 break -- leave the loop else -- will be treated as middle line (it's a nested comment.box.end) self:UncommentMiddleLine(bUsedMiddle, text) end elseif self:LineHasStart(text) then countNesting = countNesting +1 -- increase nesting counter -- countNesting == 1 it's the real start of block comment --> ignore this line if countNesting > 1 then self:UncommentMiddleLine(bUsedMiddle, text) end -- treat it like a middle line else -- all other cases are middle lines but if not start was detected - ignore this line if bStart then self:UncommentMiddleLine(bUsedMiddle, text) end end end nLine = nLine +1 end if (not bStart) then return print("! ERROR - None comment block starts near the cursor.") -- text near Cursor isn't comment block start marker end else -- set comment block self.msg.action = 'COMMENT BLOCK - SET' if self.selS.line == self.selE.line then -- selection is in one line text = editor:GetLine(self.selS.line) lineStart = editor:PositionFromLine(self.selS.line) lineEnd = editor.LineEndPosition[self.selS.line] + self.lenEOL editor:SetSel(lineStart, lineEnd) -- select all text in line bLastLine = self:IsLastLine(self.selE.line) if bLastLine then self.boxEnd = self.eol..self.boxEnd end self.newText = self.boxStart..self.eol..insertMiddle..text..self.boxEnd..self:ternary(bLastLine, '', self.eol) self.msg.starts = self.selS.line self.msg.ends = self.selS.line +2 else -- as 1.: find the last line with text in selection, possibly blank lines are selected at the end local iLineLastText = -1 for i = self.selE.line, self.selS.line, -1 do if (not self:LineIsEmpty(i)) then iLineLastText = i break end end -- none text selected if iLineLastText == -1 then return print("! ERROR - Only empty lines selected.") end if iLineLastText ~= self.selE.line then self.selE.line = iLineLastText self.selE.pos = editor.LineEndPosition[self.selE.line] end bLastLine = self:IsLastLine(self.selE.line) if bLastLine then self.boxEnd = self.eol..self.boxEnd end for i = self.selS.line, self.selE.line do text = editor:GetLine(i) if i == self.selS.line then -- selection start line if (not self:LineIsEmpty(text)) then lineStart = editor:PositionFromLine(self.selS.line) if lineStart ~= self.selS.pos then self.selS.pos = lineStart editor:SetSel(self.selS.pos, self.selE.pos) end self.newText = self.boxStart..self.eol..insertMiddle..text self.msg.starts = i else -- start line is empty - do nothing end elseif i == self.selE.line then -- selection end line if self.newText == "" then -- the last line is the 1st line with text in selection self.newText = self.boxStart..self.eol self.selS.pos = editor:PositionFromLine(i) self.msg.starts = i end lineStart = editor:PositionFromLine(i) lineEnd = editor.LineEndPosition[i] if lineStart == self.selE.pos then -- selection ends at line start position self.newText = self.newText..self.boxEnd..self.eol -- ignore this line self.msg.ends = i +2 break end if lineEnd == self.selE.pos then -- selection ends behind last visible char self.newText = self.newText..insertMiddle..text..self.boxEnd -- without EOL self.msg.ends = i +2 break end if lineEnd > self.selE.pos then -- selection ends inside the line, line will used self.selE.pos = lineEnd + self.lenEOL -- set selE.pos to line end for correct replacing end self.newText = self.newText..insertMiddle..text..self.boxEnd..self:ternary(bLastLine, '', self.eol) self.msg.ends = i +2 else -- middle lines if (not self:LineIsEmpty(i)) and self.newText == "" then -- may be only empty lines in selection before self.newText = self.boxStart..self.eol self.selS.pos = editor:PositionFromLine(i) self.msg.starts = i end if self.newText ~= "" then self.newText = self.newText..insertMiddle..text end end end editor:SetSel(self.selS.pos, self.selE.pos) end end -- replace the selection with the new toggled text if bStart then editor:SetSel(replS, replE) end -- for uncommenting exists none selection - do it here editor:ReplaceSel(self.newText) -- replace the next editor:SetSel(self.selS.pos,self.selS.pos) -- set the cursor to start position editor.FirstVisibleLine = firstVisibleLine -- make the first visible line visible again if props["comment.box.output"] == "1" then print(string.format('++ %s [line %d-%d]', self.msg.action, self.msg.starts +1, self.msg.ends +1)) end end } BlockComment:Toggle() As far as I know, it is not possible to overwrite SciTE internal hotkeys. In this case "Ctrl+Shift+B" for IDM_BLOCK_COMMENT. Therefore I used the connection shown here.
      But if overwriting is possible, I would be interested in this solution.
       
      BlockComment.lua
    • By t0nZ
      Hi to all, I have a Tidy unhandled exception, with a script I am working on.
      The Tidy.exe that give me the problem is the last downloadable version (file version 21.316.1639.1 , march 23 2021)
      I substituted with an older (and smaller..) Tidy.exe (version 19.102.1901.0 january 2 2019) and that works like a charm.
       
      I attached screenshot of the "error" and my (unfinished) code, but this code cause the exception.
      Cheers

      Recap:
      OK version 19.102.1901.0 january 2 2019 
      FAIL version 21.316.1639.1 , march 23 2021 (current stable)
      FAIL version 21.316.1639.3 (beta)
       
      ComputerPlucker.au3
×
×
  • Create New...