DRAKON.SU
https://forum.drakon.su/

PowerShell скрипт преобразования javascript.tcl в php.tcl
https://forum.drakon.su/viewtopic.php?f=145&t=7347
Страница 1 из 1

Автор:  pme [ Понедельник, 11 Декабрь, 2023 21:56 ]
Заголовок сообщения:  PowerShell скрипт преобразования javascript.tcl в php.tcl

День добрый!

Сделал скрипт
Код:
$javascriptContent = Get-Content javascript.tcl -Raw

$wordMap = @{
    '// Autogenerated with DRAKON Editor \$version' = "// Autogenerated with DRAKON Editor $version"
    '\"js\"' = '"php"'
    '\"var \$' = '"\$'
    '\"var\"' = '""'
    '\\nvar ' = '\n '
    '_var \"' = '_var "\$'
   '; var ' = '; '
    'javascript' = 'PHP'
   '\$coll_var.length' = 'count\($coll_var\)'
   '\$keys_var.length' = 'count\($keys_var\)'
   'Object.keys' = 'array_keys'
   #'return \"\$variable === \$constant\"' = 'return append "\$"  "$variable === $constant"'
}

$phpContent = $javascriptContent

foreach ($key in $wordMap.Keys) {
    $phpContent = $phpContent -replace $key, $wordMap[$key]
}

# пришлось делать отдельно
$wordMap = @{
   'return \"\\\$' = 'return "$'
}

foreach ($key in $wordMap.Keys) {
    $phpContent = $phpContent -replace $key, $wordMap[$key]
}


$php_KeyWords = @"

__halt_compiler abstract and array as
break callable case catch class
clone const continue declare default
die do echo else elseif
empty enddeclare endfor endforeach endif
endswitch endwhile eval exit extends final
finally fn for foreach function global
goto if implements include include_once
instanceof insteadof interface isset list
match namespace new or print
private protected public require require_once
return static switch throw trait try
unset use var while xor yield

"@

# Заменяем текст между "variable keywords {" и "}"
$phpContent = $phpContent -replace "(?s)(?<=variable keywords {).*?(?=})", $php_KeyWords

$phpContent | Set-Content php.tcl


Для начала хватает.
Но захотелось использовать switch :roll: .

Но код генерируется такой:
Код:
function switch_RUN($operator) {
    // item 60001
    if (operator === '>') {
        // item 14
        echo $operator;
    } else {
        // item 60002
        if (operator === '===') {
            // item 15
            echo $operator;
        } else {
            // item 16
            echo $operator;
        }
    }
}


Теряется символ $.

Предполагаю, что за это отвечает в javascript.tcl строка
Код:
return "$variable === $constant"


Как бы сделать, чтобы символ $ не терялся?
Заранее признателен.

Вложения:
switch_PHP.drn [48 КБ]
Скачиваний: 39

Автор:  Степан Митькин [ Вторник, 19 Декабрь, 2023 11:35 ]
Заголовок сообщения:  Re: PowerShell скрипт преобразования javascript.tcl в php.tc

Попробуйте заменить функцию compare в вашем php-генераторе на такую:

Код:
proc compare { variable constant } {
    return "\$$variable === $constant"
}

Автор:  pme [ Пятница, 29 Март, 2024 23:43 ]
Заголовок сообщения:  Re: PowerShell скрипт преобразования javascript.tcl в php.tc

Спасибо!

Обновил код скрипта PowerShell

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/