Что нового

SciTE 3.5.5.101 для AutoIt

barbituraat

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


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

Alecsis

Осваивающий
Сообщения
98
Репутация
41
Всем привет!
В одном из постов уже упоминалось, что 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

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

CreatoR

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

CreatoR

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
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

Осваивающий
Сообщения
98
Репутация
41
Использую другой обходной путь — прописАл в 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,671
Репутация
2,481
Alecsis [?]
Использую другой обходной путь
Да но тогда пропадает удобство, в принципе можно в настройках оставить оба варианта, и для юникод скриптов использовать штатный метод.
 

CreatoR

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

CreatoR

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

Webarion

Осваивающий
Сообщения
143
Репутация
24
CreatoR сказал(а):
с недавних версии он выводит в консоль файл с кавычками, а для SciTE это не подходит, кавычек быть не должно...

А нельзя ли в lua сделать перехват клика например CTRL+ЛКМ, изменить кликнутую строку, удалив в консоли кавычки, далее чтобы обычным двойным можно было открывать?
 

CreatoR

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