Что нового

SciTE 3.5.5.101 для AutoIt

barbituraat

Новичок
Сообщения
1
Репутация
0
Может кому то поможет. Если упорно при компиляции ссылается на неправильный путь к компилятору AutoIT в SCITE то в папке [Ваш путь]\SkiTE\languages\ в файле au3.properties
надо указать правильный путь


# *** Specify here your AutoIt program directory ***
autoit3dir=[Ваш путь]\AutoIt3
 

Alecsis

Знающий
Сообщения
33
Репутация
18
Всем привет!
В одном из постов уже упоминалось, что Compiler Wrapper «самовольно» пересохраняет компилируемый исходник, добавляя в него пустую строку. Ладно бы ограничивалось лишь этим, так ведь ещё и зачем-то кодировку принудительно меняет на 1251. На кириллицу оно никак не влияет, но вот если под «раздачу» попадает экзотика типа умлаутов, греческих букв, математических символов итп, то подобная перекодировка Unicode → 1251 по сути необратимо портит файл. Эффект был обнаружен случайно; проявляется только при вызове Tools→Compile. При сборке (Tools→Build) всё нормально, исходник остаётся нетронутым.
Зависит сие поведение от ключа /s. Если компилировать с ключом /s:0 или вообще без него — убивается кодировка Unicode. С ключом /s:1 всё Ok.

Собственно вопрос: это баг, или какая-то недоступная моему пониманию глубокая концепция? :-\ :scratch:
И хотелка: если уж необходимо пересохранять исходник, то можно ли каким-то легальным способом оставить его изначальную UTF-8/UTF-16?

P.S. Чтобы не быть голословным, привожу вещественные доказательства:
1. Оригинал в Unicode
Код:
#pragma compile(Console, True)
#pragma compile(x64, False)
#pragma compile(UPX, True)
;
MsgBox(0, 'Test UTF-8', 'Проба UTF-8: Scheiße ∆φ ≤ 0°')
Exit



2. Результат бурной деятельности без ключа /s
Код:
#pragma compile(Console, True)
#pragma compile(x64, False)
#pragma compile(UPX, True)

;
MsgBox(0, 'Test UTF-8', 'Проба UTF-8: Schei?e ?? ? 0°')
Exit

Примечание: все #pragma вписаны вручную, почему-то предпочитаю именно так.
 
Сообщения
80
Репутация
-1
Если говорить о последней официальной.

Учитывая особенность стрипера, в глобальных настройках должна быть
Код:
NewFileEncoding=UTF8BOM
в этой кодировке и работать.

Видимо проблема в том что scite ничего кроме юникода не понимает. И при любом исходнике она его читает как юникод.
Если включить контроль версии
Код:
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
#AutoIt3Wrapper_Res_Fileversion=0.0.0.0
scite будет изменять данные, потомучто при запуске без него, они не меняются. Фактически исходник менять может только scite.
Как я понял принцип работы с файлами в autoit, чтоб изменить 1 знак в файле, файл надо полностью переписать, хотя возможно это везде так.
Код:
#~ Enhance function of auto checking utf8: providing two methods
# detect utf8 and add BOM automatically   Credits to SciTE-RU
#~ utf8.auto.check=1
# detect utf8 and do not add BOM
#~ utf8.auto.check=2
# detect ascii high characters and if none found set default encoding to UTF8 and add BOM
#~ utf8.auto.check=3
# detect ascii high characters and if none found set default encoding to UTF8 and do not add BOM
utf8.auto.check=4
если поставить 1 в глобальных настройках, файл перекодируется.
utf8.auto.check=4 тут единственный правильный вариант

Игрался с некоторыми настройками. При одних она просто открывает файл как юникод и как следствие часть знаков не видно. В других режимах она его пытается перекодировать в юникод, потомучто никакой другой кодировки она не умеет.

Проблема в другом, при обфускации AU3Stripper создаёт временные файлы в ansi если они не в UTF-8-BOM, он их портит, даже если они просто в utf8.
 

Webarion

Знающий
Сообщения
89
Репутация
6
В одном из редакторов SciTE была такая функция, если в консоли кликнуть по строке ошибки, которая возникла в одном из файлов, то этот файл открывался в редакторе и выделялась строка ошибки в этом скрипте.
Подскажите, как что-то подобное сделать в этой версии SciTE? В этой версии, у меня сейчас при клике происходит переход в открытом в данный момент файле скрипта, но файл с самой ошибкой не открывается.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Vanguger [?]
В этой версии, у меня сейчас при клике происходит переход в открытом в данный момент файле скрипта, но файл с самой ошибкой не открывается
Я уже писал про это, проблема в самом Au3Check, с недавних версии он выводит в консоль файл с кавычками, а для SciTE это не подходит, кавычек быть не должно...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Интересно, у кого то есть исходник Compiler Wrapper?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Alecsis [?]
если уж необходимо пересохранять исходник, то можно ли каким-то легальным способом оставить его изначальную UTF-8/UTF-16?
Поскольку Yashied давно неактивен, привожу скрипт который нужно скомпилировать в CWW.exe и поместить рядом с CW.exe, это по сути Wrapper для Wrapper'а :laugh:.

Код:
#pragma compile(Icon, CW.ico)
#pragma compile(UPX, True)
#pragma compile(Compression, 9)

#NoTrayIcon
#include <FileConstants.au3>

FileChangeDir(@ScriptDir)

$sFile = ($CmdLine[0] > 0 ? $CmdLine[1] : '')

$sFileTime = FileGetTime($sFile, 0, 1)
$sFileName = StringRegExpReplace($sFile, '^.*\\', '')
$sTmpFile = @TempDir & '\' & $sFileName

$fRestore = False

If $sFile And FileExists($sFile) Then
	FileCopy($sFile, $sTmpFile, 1)
	$fRestore = True
EndIf

$iPid = Run('CW.exe ' & $CmdLineRaw)

If $fRestore Then
	While FileGetTime($sFile, 0, 1) = $sFileTime
		Sleep(10)
		
		If Not ProcessExists($iPid) Then
			FileDelete($sTmpFile)
			Exit
		EndIf
	WEnd
	
	$aPragma = StringRegExp(FileRead($sFile), '(?mi)^\h*(#pragma \h*compile\h*\(.*)\r?\n', 3)
	$sRead = StringRegExpReplace(FileRead($sTmpFile), '(?mi)^\h*#pragma \h*compile\h*\(.*\r?\n', '')
	
	$sPragma = ''
	
	For $i = 0 To UBound($aPragma) - 1
		$sPragma &= ($sPragma ? @CRLF : '') & $aPragma[$i]
	Next
	
	$hFile = FileOpen($sFile, BitOR($FO_OVERWRITE, FileGetEncoding($sTmpFile)))
	FileWrite($hFile, $sPragma & @CRLF & $sRead)
	FileClose($hFile)
	
	FileDelete($sTmpFile)
EndIf


в au3.properties поменять:
Код:
autoit.cmd.compile="$(SciteDefaultHome)\Tools\Compiler Wrapper\CWW.exe" "$(FilePath)" /m:1 /c:0
autoit.cmd.compile64="$(SciteDefaultHome)\Tools\Compiler Wrapper\CWW.exe" "$(FilePath)" /m:1 /c:1
Скрипт по сути очень простой - запоминает обрабатываемый скрипт в его исходной кодировке, ожидает пересохранения от CW.exe, и подставляет оригинальный скрипт под компилятор (с новыми директивами pragma).
Вроде работает безотказно, проверял на таком скрипте:

Код:
$sVar = 'Ελληνικό αλφάβητο'
MsgBox(64, @ScriptName, $sVar, 0, Default)
 

Alecsis

Знающий
Сообщения
33
Репутация
18
Использую другой обходной путь — прописАл в au3.properties
Код:
autoit.cmd.compile="$(AutoIt3Dir)\Aut2exe\Aut2exe.exe"        /in  "$(FilePath)"
autoit.cmd.compile64="$(AutoIt3Dir)\Aut2exe\Aut2exe_x64.exe"  /in  "$(FilePath)"
М.б. кому-то и пригодится…
Плюс = компиляция штатным способом без обёрток;
основной минус = нужные #pragm'ы приходится прописывать вручную (всё равно именно так и делаю).
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Alecsis [?]
Использую другой обходной путь
Да но тогда пропадает удобство, в принципе можно в настройках оставить оба варианта, и для юникод скриптов использовать штатный метод.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Удалось переписать CW.exe, исправив проблему с кодировкой файла, плюс добавил поддержку относительных путей для Root (CW.ini -> [Root]).
Кому то это нужно?
 

Webarion

Знающий
Сообщения
89
Репутация
6
CreatoR сказал(а):
с недавних версии он выводит в консоль файл с кавычками, а для SciTE это не подходит, кавычек быть не должно...
А нельзя ли в lua сделать перехват клика например CTRL+ЛКМ, изменить кликнутую строку, удалив в консоли кавычки, далее чтобы обычным двойным можно было открывать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Vanguger [?]
А нельзя ли в lua сделать перехват клика например CTRL+ЛКМ, изменить кликнутую строку, удалив в консоли кавычки, далее чтобы обычным двойным можно было открывать?
Не думаю, тут нужно наверно смотреть в сторону исходников SciT'а.
 
Верх