ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Транспилятор в Си от Юрия » Подсветка синтаксиса для форума


Подсветка синтаксиса для форума

Сообщений 61 страница 90 из 117

61

Евгений написал(а):

Сможет Лис поместить две строчки в текст страницы?

Нет. Только по подробнейшим пошаговым инструкциям, включающим в себя скриншоты шагов и пояснения как их выполнять.

Евгений написал(а):

У меня была идея, что если Лис поместит на страницу не содержимое, а лишь ссылки на файлы, к которым у меня будет доступ, то я сразу смогу отладить скрипт на этом форуме без лишних телодвижений.

Лис не поместит, не умеет.

0

62

ОК, я понял. Будем ремонтировать двигатель через выхлопную трубу))

0

63

Хорошо бы найти иконку для кнопки. Или сделать наподобие. https://forumupload.ru/uploads/0018/41/1a/46/608739.png Ни у кого нет возможности?

0

64

Евгений написал(а):

Ни у кого нет возможности?

Мне Лис только разрешил новые темы создавать на этом форуме.

0

65

NuShaman написал(а):

Мне Лис только разрешил новые темы создавать на этом форуме.

Ну, вдруг не у всех такие ограниченные возможности.

0

66

Я не понимаю, про что идёт речь.

0

67

Лис написал(а):

Только по подробнейшим пошаговым инструкциям, включающим в себя скриншоты шагов и пояснения как их выполнять

Админская панель - > вкладка Формы

Добавляем текст: HTML верх

Код:
<!--Стили для подсветки синтаксиса-->
<link rel="stylesheet" href="https://arduinoporusski.ru/wp-includes/css/highlightru.css">

HTML низ

Код:
<!--Скрипты для подсветки синтаксиса-->
<script src="https://arduinoporusski.ru/wp-includes/js/prep.js"></script>
<script src="https://arduinoporusski.ru/wp-includes/js/highlightru.js"></script>

Старые скрипты и CSS из текста нужно удалить. Новые пусть будут пока в виде ссылки. У меня будет возможность их подправить. Когда окончательно отладим, тогда можно будет уже загрузить на сервер.
Скриншот)
https://forumupload.ru/uploads/0018/41/1a/46/t737990.png

0

68

Что вы мучаетесь, сначала отлаживаем на тестовом форуме, потом это же делаем на "вече".

0

69

БудДен написал(а):

Что вы мучаетесь, сначала отлаживаем на тестовом форуме, потом это же делаем на "вече".

Движки совершенно разные. Для "вече" все будет работать. А здесь всё ... как бы помягче сказать... из-под подвыподверта)
Инструкция можете попробовать.

А вообще тестовый форум здорово помог. Иначе было бы не осилить.

Отредактировано Евгений (2022-05-31 21:59:04)

0

70

Потому что здесь бесплатный форум с заведомо ограниченным функционалом, а вече развёрнуто на полноценном хостинге. Цена вопроса - рублей 100 в месяц. Стоит ли изгаляться и тратить время, если мы всерьёз тут чем-то занимаемся? Время программиста стоит 1-2 тыр в час.

0

71

Админская панель - > вкладка Формы

Сделал.

http://forumupload.ru/uploads/0018/41/1a/34/t373660.png

Правда от отключения стилей съехал заголовок форума...
Но это неважно.

UPD: включил старые стили обратно, вроде они не мешают подсветке.

Отредактировано Лис (2022-05-31 22:42:16)

0

72

БудДен написал(а):

если мы всерьёз тут чем-то занимаемся?

Ты неоднократно заявлял, что останавливаешь или прекращаешь проект. Remdev (оплата домена) тоже загнулся.
Закрепить договорённости на бумаге в виде НКО никто не спешит.

Отредактировано Лис (2022-05-31 22:39:58)

0

73

Ага, Лис включил-таки подсветку. Из недостатков:
   не работает нумерация строк;
   после вставки кода подсветка начинает работать только после обновления страницы; 
   не возможно развернуть код на полную высоту;
   и еще не получится разделить русский и английский код на разные кнопки.
Нумерацию можно восстановить, переписав часть скрипта, правда не факт, что останется функциональной кнопка "Выделить код". А вот Развернуть-Свернуть, как на тестовом я сделать не могу.

0

74

#вставка "myRTOS.h"

// RTOS Подготовка. Очистка очередей
пуст ТОСРВ::ПодготовитьОСРВ()
{
беззнак симв индекс;

для(индекс=0;индекс!=Длина_Очереди_Задач+1;индекс++) // Во все позиции записываем Бездействие
{
ОчередьЗадач[индекс] = Бездействие;
}

для(индекс=0;индекс!=Длина_Очереди_Таймеров+1;индекс++) // Обнуляем все таймеры.
{
ОчередьТаймеров[индекс].уЗадача = Бездействие;
ОчередьТаймеров[индекс].Период = 0;
ОчередьДлинныхТаймеров[индекс].уЗадача = Бездействие;
ОчередьДлинныхТаймеров[индекс].Период = 0;
}
СтартТаймера();
}

// Функция установки задачи в очередь. Передаваемый параметр - указатель на функцию
// Отдаваемое значение - код ошибки.
пуст ТОСРВ::ДобавитьЗадачу(ТуЗадача у_задача)
{

беззнак симв    индекс = 0;
беззнак симв    флаг_прерывания_запрещены = 0;

если (РЕГИСТР_СОСТОЯНИЯ & (1<<ФЛАГ_ПРЕРЫВАНИЙ))  // Если прерывания разрешены, то запрещаем их.
{
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
флаг_прерывания_запрещены = 1;        // И ставим флаг, что мы не в прерывании.
}

пока(ОчередьЗадач[индекс]!=Бездействие )      // Прочесываем очередь задач на предмет свободной ячейки
{                // с значением Бездействие - конец очереди.
индекс++;
если (индекс==Длина_Очереди_Задач +1 || ОчередьЗадач[индекс]== у_задача)     // Если очередь переполнена то выходим не солоно хлебавши
    {                            //  или задача уже в очереди
    если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ; // Если мы не в прерывании, то разрешаем прерывания
    return;                // Раньше функция возвращала код ошибки - очередь переполнена. Пока убрал.
    }
   
}
                        // Если нашли свободное место, то
ОчередьЗадач[индекс] = у_задача;            // Записываем в очередь задачу
если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;        // И включаем прерывания если не в обработчике прерывания.
}

//Функция установки задачи по таймеру. Передаваемые параметры - указатель на функцию,
// Время выдержки в тиках системного таймера.
пуст ТОСРВ::ДобавитьТаймерЗадачи(ТуЗадача у_задача, беззнак цел период)
{
беззнак симв    индекс=0;
беззнак симв    флаг_прерывания_запрещены = 0;

если (РЕГИСТР_СОСТОЯНИЯ & (1<<ФЛАГ_ПРЕРЫВАНИЙ))      // Проверка запрета прерывания, аналогично функции выше
{
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
флаг_прерывания_запрещены = 1;
}

для(индекс=0;индекс!=Длина_Очереди_Таймеров+1;++индекс) //Прочесываем очередь таймеров
{
если(ОчередьТаймеров[индекс].уЗадача == у_задача)        // Если уже есть запись с таким адресом
    {
    ОчередьТаймеров[индекс].Период = период;    // Перезаписываем ей выдержку
    если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;    // Разрешаем прерывания если не были запрещены.
    return;                    // Выходим. Раньше был код успешной операции. Пока убрал
    }
}

для(индекс=0;индекс!=Длина_Очереди_Таймеров+1;++индекс) // Если не находим похожий таймер, то ищем любой пустой
{
если (ОчередьТаймеров[индекс].уЗадача == Бездействие)   
    {
    ОчередьТаймеров[индекс].уЗадача = у_задача;    // Заполняем поле перехода задачи
    ОчередьТаймеров[индекс].Период = период;    // И поле выдержки времени
    если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ; // Разрешаем прерывания
    return;                // Выход.
    }
   
}                        // тут можно сделать return c кодом ошибки - нет свободных таймеров
}
//Функция установки задачи по таймеру. Передаваемые параметры - указатель на функцию,
// Время выдержки в секундах.
пуст ТОСРВ::ДобавитьДлинныйТаймерЗадачи(ТуЗадача у_задача, беззнак цел период)
{
беззнак симв    индекс=0;
беззнак симв    флаг_прерывания_запрещены = 0;

если (РЕГИСТР_СОСТОЯНИЯ & (1<<ФЛАГ_ПРЕРЫВАНИЙ))      // Проверка запрета прерывания, аналогично функции выше
{
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
флаг_прерывания_запрещены = 1;
}

для(индекс=0;индекс!=Длина_Очереди_Таймеров+1;++индекс) //Прочесываем очередь таймеров
{
если(ОчередьДлинныхТаймеров[индекс].уЗадача == у_задача)        // Если уже есть запись с таким адресом
    {
    ОчередьДлинныхТаймеров[индекс].Период = период;    // Перезаписываем ей выдержку
    если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;    // Разрешаем прерывания если не были запрещены.
    return;                    // Выходим. Раньше был код успешной операции. Пока убрал
    }
}

для(индекс=0;индекс!=Длина_Очереди_Таймеров+1;++индекс) // Если не находим похожий таймер, то ищем любой пустой
{
если (ОчередьДлинныхТаймеров[индекс].уЗадача == Бездействие)   
    {
    ОчередьДлинныхТаймеров[индекс].уЗадача = у_задача;    // Заполняем поле перехода задачи
    ОчередьДлинныхТаймеров[индекс].Период = период;    // И поле выдержки времени
    если (флаг_прерывания_запрещены) РАЗРЕШИТЬ_ПРЕРЫВАНИЯ; // Разрешаем прерывания
    return;                // Выход.
    }
   
}                        // тут можно сделать return c кодом ошибки - нет свободных таймеров
}

/*
Служба таймеров ядра. Должна вызываться из прерывания раз в 1мс. Хотя время можно варьировать в зависимости от задачи

To DO: Привести к возможности загружать произвольную очередь таймеров. Тогда можно будет создавать их целую прорву.
А также использовать эту функцию произвольным образом.
В этом случае не забыть добавить проверку прерывания.
*/
пуст ТОСРВ::ДиспетчерТаймеров(пуст)
{
    беззнак char индекс;
    для (индекс = 0; индекс != Длина_Очереди_Таймеров + 1; индекс++) // Прочесываем очередь таймеров
    {
        если (ОчередьТаймеров[индекс].уЗадача == Бездействие)
        {
            continue;    // Если нашли пустышку - щелкаем следующую итерацию
        }
        если (ОчередьТаймеров[индекс].Период != 1)                     // Если таймер не выщелкал, то щелкаем еще раз.
        {
            // To Do: Вычислить по тактам, что лучше !=1 или !=0.
            ОчередьТаймеров[индекс].Период --;                       // Уменьшаем число в ячейке если не конец.
        }
        else
        {
            ДобавитьЗадачу(ОчередьТаймеров[индекс].уЗадача);             // Дощелкали до нуля? Пихаем в очередь задачу
            ОчередьТаймеров[индекс].уЗадача = Бездействие;               // А в ячейку пишем затычку
        }
    }
}
пуст ТОСРВ::ДиспетчерДлинныхТаймеров(пуст)
{
    беззнак char индекс;
    для (индекс = 0; индекс != Длина_Очереди_Таймеров + 1; индекс++) // Прочесываем очередь таймеров
    {
        если (ОчередьДлинныхТаймеров[индекс].уЗадача == Бездействие)
        {
            continue;    // Если нашли пустышку - щелкаем следующую итерацию
        }
        если (ОчередьДлинныхТаймеров[индекс].Период != 1)                     // Если таймер не выщелкал, то щелкаем еще раз.
        {
            // To Do: Вычислить по тактам, что лучше !=1 или !=0.
            ОчередьДлинныхТаймеров[индекс].Период --;                       // Уменьшаем число в ячейке если не конец.
        }
        else
        {
            ДобавитьЗадачу(ОчередьДлинныхТаймеров[индекс].уЗадача);             // Дощелкали до нуля? Пихаем в очередь задачу
            ОчередьДлинныхТаймеров[индекс].уЗадача = Бездействие;               // А в ячейку пишем затычку
        }
    }
}

/*=================================================================================
Диспетчер задач ОС. Выбирает из очереди задачи и отправляет на выполнение.
*/

пуст ТОСРВ::ДиспетчерЗадач(пуст)
{
беззнак симв    индекс=0;
ТуЗадача уЗадача = Бездействие;    // Инициализируем переменные

ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;        // Запрещаем прерывания!!!
уЗадача = ОчередьЗадач[0];    // Хватаем первое значение из очереди

если (уЗадача==Бездействие)      // Если там пусто
{
РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;    // Разрешаем прерывания
(Бездействие)();          // Переходим на обработку пустого цикла
}
else
{
для(индекс=0;индекс!=Длина_Очереди_Задач;индекс++) // В противном случае сдвигаем всю очередь
    {
    ОчередьЗадач[индекс]=ОчередьЗадач[индекс+1];
    }

ОчередьЗадач[Длина_Очереди_Задач]= Бездействие;        // В последнюю запись пихаем затычку

РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;            // Разрешаем прерывания
(уЗадача)();                // Переходим к задаче
}
}

Пример. Вроде все работает.

Отредактировано Евгений (2023-03-19 00:15:11)

0

75

Евгений написал(а):

Вроде все работает.

Ура!

0

76

Лис написал(а):

Ура!

Стоит подумать, как добавлять языки. И как сделать автоопределение языка.

0

77

Лис написал(а):

Ты неоднократно заявлял, что останавливаешь или прекращаешь проект. Remdev (оплата домена) тоже загнулся.
Закрепить договорённости на бумаге в виде НКО никто не спешит.

Отредактировано Лис (Сегодня 22:39:58)

Что мешает Лису перенести свой форум на хостинг, по аналогии с вече?

0

78

БудДен написал(а):

Что мешает Лису перенести свой форум на хостинг, по аналогии с вече?

Понимание того, что Лис смертен, и дело надо организовывать так, чтобы были прописаны процедуры перехода владения.
Сейчас постоянные посетители (например MihalNik) смогут написать в mybb.ru и продолжить работать с форумом.
Вроде бы Юрий уже делал так с каким-то старым форумом.

0

79

Ну и лапки ещё, конечно.

0

80

mybb.ru тоже смертен.

0

81

БудДен написал(а):

mybb.ru тоже смертен.

Именно поэтому я предлагаю НКО. Решение проверенное в государственном масштабе.

0

82

Ну ясно, ладно, надеюсь, когда у Евгения будет готов вариант для АО, он и для "вече" напишет инструкцию, благо, это должно быть проще.

0

83

БудДен написал(а):

Ну ясно, ладно, надеюсь, когда у Евгения будет готов вариант для АО, он и для "вече" напишет инструкцию, благо, это должно быть проще.

С Вас список ключевых слов и схема раскраски: какие конструкции раскрашивать, а какие нет.

0

84

вече.программирование-по-русски.рф/viewtopic.php?f=2&t=22 - тут общая идея и репозиторий, откуда можно взять вариант для VS Code - там лексер, но он не совсем на регэкспах, кажется, конкретный файл - вот этот:

https://github.com/budden/vscode-langua … tmLanguage

Ключевые слова - тут:

https://tvoygit.ru/budden/ja-o-s/src/br … ификаторов

Я бы подсвечивал только те ключевые слова, которые определяют структуру вложенности блоков, т.е.
PROCEDURE(проц), BEGIN(нач), END(кон,всё,кц)), IF(если), THEN(то), ELSE(иначе, аесли), AWAIT(дождись), ключевые слова циклов и т.п. Слова VAR, встроенные типы и встроенные процедуры не стал бы подсвечивать.
Также подсвечивается красным модуль SYSTEM (НИЗКОУР), но это тоже необязательно для веба.

Вообще критична подсветка строк и комментариев, всё остальное можно хоть одноцветным делать.

По идее можно посмотреть на среду вот здесь: https://semantic-dict.ru/static/v86

А вот исходник лексера: https://tvoygit.ru/budden/ja-o-s/media/ … canner.Mod

Отредактировано БудДен (2022-06-01 16:03:36)

0

85

БудДен написал(а):

модуль SYSTEM (НИЗКОУР)

основание (ОСН).

ОСН.пиши
ОСН.читай

НАВЫК.запись
НАВЫК.чтение

Можно сэкономить от двух до четырёх букв.

Отредактировано Лис (2022-06-02 01:17:46)

0

86

Если кому любопытно, то тут можно посмотреть результаты подсветки Оберона.

0

87

Делюсь впечатлениями... Пусть даже подсветка для АО реализована частично. Но даже в таком виде код визуально легко делится на узнаваемые структуры и ориентироваться в нем значительно легче. Было любопытно познакомиться,  с особенностями языка, с тем, как автор подошел к переводу ключевых слов, какого стиля придерживается при выборе идентификаторов. Где-то мысли созвучны, где-то нет, где-то, на мой взгляд, есть удачные находки.

0

88

Юстас Алексу, в смысле Лису. Нужно бы внести изменения в настройки форума. Добавлена подсветка стандартных языков. Исправлена нумерация строк. Работает автоопределение между русскими и английскими языками. Автоопределение между русским С и Обероном тоже работает, но у БудДена пока затык с видимостью подсветки. В настоящий момент подсветка на этом форуме на работает, так как нужно изменить очередность файлов в панели управления.

Как всегда по шагам)
Админская панель - > вкладка Формы

Заменяем текст: HTML верх

Код:
<!--Стили для подсветки синтаксиса-->
<link rel="stylesheet" href="https://arduinoporusski.ru/wp-includes/css/highlightru.css">
<link rel="stylesheet" href="https://arduinoporusski.ru/wp-includes/css/prettify.css">

HTML низ

Код:
<!--Скрипты для подсветки синтаксиса-->
<script src="https://arduinoporusski.ru/wp-includes/js/highlightru.js"></script>
<script src="https://arduinoporusski.ru/wp-includes/js/prettify.js"></script>
<script src="https://arduinoporusski.ru/wp-includes/js/prep.js"></script>

Отредактировано Евгений (2022-06-05 18:15:04)

0

89

Евгений написал(а):

нужно изменить очередность файлов

Сделал.

0

90

Очередная загадка...  На тестовом работает, а тут опять что-то не так. Гляньте, кому не лень, работает подсветка тут?

Отредактировано Евгений (2022-06-06 10:59:47)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Транспилятор в Си от Юрия » Подсветка синтаксиса для форума