purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 4:23 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Утилита
СообщениеДобавлено: Пн июл 11, 2016 5:35 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 30
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Написал вот такую утилиту, которая преобразует код 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]
Скачиваний: 66


Последний раз редактировалось dirty.cheese Пн июл 11, 2016 11:19 pm, всего редактировалось 3 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пн июл 11, 2016 6:34 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Скажем так, что двойные кавычки внутри строки Пурик и сам умеет вставлять.
Код:
1
2
A$=~"Эта строчка содержит \"Двойные кавычки\"!"
Debug A$


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

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пн июл 11, 2016 7:04 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 30
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
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-а, или пробовать это сделать, если напишите мне об них. Архив перезалит.


Последний раз редактировалось dirty.cheese Пн июл 11, 2016 10:42 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пн июл 11, 2016 9:19 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 113
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 6 раз.
Пункты репутации: 4
dirty.cheese, в 5.40 добавили https://www.purebasic.com/news73.php
Цитата:
- Added: Literal string escape support with the '~' operator (ex: a$ = ~"Hello\nWorld\n")


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пн июл 11, 2016 11:22 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 30
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
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++.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пт июл 15, 2016 2:24 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 30
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Ребят подскажите, кто создавал нечто подобное, почему программу можно запустить, но нельзя компилировать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утилита
СообщениеДобавлено: Пт янв 13, 2017 11:14 pm 
Не в сети
доцент

Зарегистрирован: Ср апр 28, 2010 4:02 pm
Сообщений: 49
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Хороша задумка, но есть огромный минус - действие такого препроцессора не распространяется на вложенные файлы :( . То есть файлы добавленные к основному коду с помощью 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
 
 



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB