purebasic.info
http://purebasic.info/phpBB3ex/

Утилита
http://purebasic.info/phpBB3ex/viewtopic.php?f=10&t=4500
Страница 1 из 1

Автор:  dirty.cheese [ Пн июл 11, 2016 5:35 pm ]
Заголовок сообщения:  Утилита

Написал вот такую утилиту, которая преобразует код Purebasic на момент компиляции или запуска.
Хочу поделиться с Вами, потому что, мало ли что. Может понадобится кому-то хотя бы одному из Вас.
Назвал его String-препроцессором.

Кому интересно, делаем следущее.
1. Скачиваем архив, распаковываем его, берем файл String.exe (если мне не доверяете, берете String.pb, компилируете и получаете String.exe) кладите этот файл где-нибудь в папке с Purebasic и сохраняйте
2. Добавляем его как препроцессор, то есть в самом меню Пурика нажимаем Tools - Configure Tools нажимаем New. (по-русски это вроде бы Инструменты - Конфигурация Инструментов и жмем добавить)
3. Настраиваем дальше так
commandline - путь к exe файлу (см. пункт 1)
arguments - пишем " %COMPILEFILE " (сохраняя кавычки)
name - пишем String
event to trigger the tool - Before Compile Run или "перед запуском и компиляцией"
и поставить галочку где Wait until tools quits или "ждать завершения инструмента" (что-то в этом роде)
working directory оставляем пустой
4. Сохраняем
5. Возможно понадобится поставить галочку в том меню из пункта 2, чтобы включить

Вот у Вас есть эта утилита, т.н. препроцессор, который назван String
А дальше я расскажу что он дает, а дает он немного
1. Возможность использовать одинарные кавычки, которые можно переносить (см. пример)
также в эти кавычки можно засунуть двойные кавычки, что очень удобно.
2. Возможность переноса комментариев (также см. пример)

Сейчас ты поймешь, запустив этот код (код будет работать, если все сделали правильно)
примера получше я не придумал, возможно добавлю
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
/*
 
  если все настроить верно, этот код
  можно будет запустить на Purebasic
 
*/
 
 
g$ =  '
 <html>
     <head>
         <title>Title</title>
         <meta charset = "utf-8">
     </head>
     <body>
         <div>
             ...
         </div>
     </body>
 </html>'
     
Debug g$
 



хочу чтобы протестировали, и сказали про такую идею

Вложения:
Комментарий к файлу: сам файл (посл. обновление 11/07 23:18)
Preprocessor String.zip [19.52 KiB]
Скачиваний: 106

Автор:  kvitaliy [ Пн июл 11, 2016 6:34 pm ]
Заголовок сообщения:  Re: Утилита

Скажем так, что двойные кавычки внутри строки Пурик и сам умеет вставлять.
Код:
1
2
A$=~"Эта строчка содержит \"Двойные кавычки\"!"
Debug A$


Перенос комментариев и одиночные кавычки вызывают пару вопросов:
1.А вот как после работы препроцессора и множественных переносов строк дебагер показывает номер строки, где ошибки происходят?
2.Использование одинарных кавычек по назначению, скажем вместо длинного Asc("a") написать 'a' получится?
P.S.
Мог бы я и сам проверить, но думаю автору будет приятно внимание к его работе.

Автор:  dirty.cheese [ Пн июл 11, 2016 7:04 pm ]
Заголовок сообщения:  Re: Утилита

kvitaliy писал(а):
Мог бы я и сам проверить, но думаю автору будет приятно внимание к его работе.

Спасибо за внимание. Очень приятно.
kvitaliy писал(а):
2.Использование одинарных кавычек по назначению, скажем вместо длинного Asc("a") написать 'a' получится?

Я начал исправлять это, прочитав твой вопрос. Теперь да. Если, я правильно понимаю, кавычки ' используются для перевода одного символа в число его ASCII-кода. Если да, то теперь можно написать
    c = '4'
    Debug c
и c будет целочисленной, ей присвоят код (за исключением написания '"') двойных кавычек в одинарных)
а если написать
    c.s= '40'
    Debug c
то это уже строка.
String будет просматривать, и если в кавычках один символ (кроме дв.кавычек) это число, если два символа - это теперь строка.

Еще что я исправил. Я понял что может понадобится переносить строки внутри кавычек, и наоборот не переносить. В новом архиве, который я залил в 1-ое сообщение изменено это.
Как теперь это делается.
    t.s= 'Hello,
    World!'
    Debug t
изобразит перенос. А не изобразит перенос добавление % перед начальной кавычкой, как здесь
    t.s= %'Hello,
    World!'
    Debug t

И еще исправил ошибку, повторение первого символа новой строки в кавычках.
Цитата:
1.А вот как после работы препроцессора и множественных переносов строк дебагер показывает номер строки, где ошибки происходят?

исправил, перезалил 22:42 11 июля
kvitaliy писал(а):
Код:
1
2
A$=~"Эта строчка содержит \"Двойные кавычки\"!"
Debug A$


У меня не работает. Какая это версия PB? Не 5.31 ? Я буду исправлять ошибки String-а, или пробовать это сделать, если напишите мне об них. Архив перезалит.

Автор:  LinXP [ Пн июл 11, 2016 9:19 pm ]
Заголовок сообщения:  Re: Утилита

dirty.cheese, в 5.40 добавили https://www.purebasic.com/news73.php
Цитата:
- Added: Literal string escape support with the '~' operator (ex: a$ = ~"Hello\nWorld\n")

Автор:  dirty.cheese [ Пн июл 11, 2016 11:22 pm ]
Заголовок сообщения:  Re: Утилита

LinXP писал(а):
dirty.cheese, в 5.40 добавили https://www.purebasic.com/news73.php
Цитата:
- Added: Literal string escape support with the '~' operator (ex: a$ = ~"Hello\nWorld\n")


а я теперь это тоже себе добавил :D перезалил, мало ли на 5.31 еще понадобится


я хочу сделать совместимость со старыми исходниками, где остались еще старые функции, где OpenWindow нужно менять местами параметры, OpenFile\ReadFile\CreateFile добавлять параметр, убирать CreateGadgetList, еще чтобы не пришлось прописывать InitNetwork(), InitMouse(), InitKeyboard(), смотреть по содержимому нужны ли эти Initы или нет. и добавить какую-хоть-нибудь поддержку фраз из C++, C, Pascal, чтобы хотя-бы не пришлось переводить структуры, чтобы их просто копировать с сайтов MSAPI, только как это сделать сам я не знаю. Я видимо буду где-то в одном списке писать что теперь умеет делать String, если не заброшу его. Добавил перевод ++ в +1 из C,C++.

Автор:  dirty.cheese [ Пт июл 15, 2016 2:24 pm ]
Заголовок сообщения:  Re: Утилита

Ребят подскажите, кто создавал нечто подобное, почему программу можно запустить, но нельзя компилировать.

Автор:  Тигрёнок [ Пт янв 13, 2017 11:14 pm ]
Заголовок сообщения:  Re: Утилита

Хороша задумка, но есть огромный минус - действие такого препроцессора не распространяется на вложенные файлы :( . То есть файлы добавленные к основному коду с помощью IncludeFile или XIncludeFile останутся необработанными, а компилятор скорее всего ругнётся "ошибка синтаксиса". Чтобы это исправить нужно переописать в препроцессоре IncludeFile, XIncludeFile, IncludePath и кто знает что ещё чтобы насильно насытить файл #FILE_Output содержимым файлов-вложений.
Основываясь программке dirty.cheese я собирался сделать свой препроцессор который немного упростил бы хранение и подключение модулей. По идее, модули хранились бы в одном месте на ЖД и вызывались бы командой ' UseLibrary "Module.pb" '. Досадно :cry:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
 
Enumeration File
  #PreProc_File_Temporal
  #PreProc_File_Output
EndEnumeration
 
InputFile$ = ProgramParameter(0)
LibDirectory$ = ProgramParameter(1)
 
If Not (Len(LibDirectory$) And Len(InputFile$))
  MessageRequester("Macro UseLibrary", "Ошибка ввода аргументов. Проверьте их правильность:"+#CRLF$+
                                       "  Путь к файлу: "+InputFile$+#CRLF$+
                                       "  Путь к библиотеке: "+LibDirectory$, #PB_MessageRequester_Error)
  End
EndIf
 
TemporalFile$ = GetTemporaryDirectory()+"PreProcessing.pb"
 
If CopyFile(InputFile$, TemporalFile$)
  If ReadFile(#PreProc_File_Temporal, TemporalFile$)
    If CreateFile(#PreProc_File_Output, InputFile$)
     
      While Not Eof(#PreProc_File_Temporal)
        CurrentString$=ReadString(#PreProc_File_Temporal)
        ; \\\\\\\\
       
        EditedString$=ReplaceString(CurrentString$, "UseLibrary", "XIncludeFile "+~"\""+LibDirectory$+~"\"" +"+", #PB_String_NoCase)
       
        ; \\\\\\\\\\\
        WriteStringN(#PreProc_File_Output, EditedString$)
      Wend
     
      CloseFile(#PreProc_File_Output)
    EndIf
    CloseFile(#PreProc_File_Temporal)
  EndIf
EndIf
 
 


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