Русский
Русский
English
Статистика
Реклама

Sublime text 3

Расчеты на прочность в LibreOffice и выбор текстового редактора

09.01.2021 14:22:36 | Автор: admin

Проблемы оформления расчетов и что такое iMath


Наверное, многие, кто учился в техническом ВУЗе, сначала делали вычисления своих курсовых в Mathcad (или другом математическом пакете), а затем старательно набирали эти же формулы в MS Word с подстановкой чисел. Потом забыли про это.


Когда меня взяли конструктором по расчетам на прочность пришлось вспомнить.



Нет, современные технологии МКЭ используются (SolidWorks, Ansys), но формулы с методиками по ГОСТ никто не отменял. Тут принципы не изменились, хотя со времен защиты моего диплома прошло более 10 лет. Люди сначала набирают формулы, уже набранные в Mathcad, а потом руками подставляют каждое число в формулу и записывают результат.


$\boxed{d=\sqrt{8F_2i\over_2}=\sqrt{8 200 5\over3.14 900}=1.68}\text{мм}$


Зачем писать цифры после формулы, если результат считает компьютер?

Это спорное мнение, такие записи действительно иногда помогают найти ошибку. Просто нонсенс делать это руками. Люди пытались решить эту проблему с разных сторон, существуют TechEditor, CalcPad, NormCad, но не о них речь, на практике применяю только 2 решения:


  1. Оформление прямо в Mathcad и распечатка как есть


  2. Оформление в LibreOffice Writer с плагином iMath он считает и подставляет числа



Подход 1 применим не для всех документов:


  • рамки ГОСТ, таблицы, автонумерацию рисунков, ссылок в Mathcad не особо реализуешь


  • для "оформленных" расчетов требуют подставлять числа и перечислять переменные с пояснением после формулы:


    $$display$$ \boxed{d=\sqrt{8F_2i\over _2}=\sqrt{8 200 5\over3.14 900}=1.68}\text{мм,}\\ \begin{align} \text{где } & \boxed{F_2=200}\text{Н - рабочее усилие на пружине;}\\ & \boxed{i=5}\text{ - индекс пружины;}\\ & \boxed{_2=900}\text{МПа - допускаемое напряжение сдвига.} \end{align} $$display$$


    если подставить значения можно в старом Mathcad 15, то с присвоением значений после формулы проблемы что в Mathcad 15, что в Mathcad Prime


  • общее ограничение оформительских возможностей, нельзя вывести значение переменной без её имени и знака равенства, например



Подход 2 тоже ограничен возможностями iMath, и иногда приходиться копипастить таблицы из Mathcad в LibreOffice Writer, но не приходится хотя бы каждую цифру руками набирать в каждой формуле.


Зачем нужен text expander при наборе формул iMath


Простой пример (серым показан исходный текст):


$$display$$ \boxed{ \color{gray}{\text{%ii @nospace\{%DELTA x\}@ EQDEF nospace\{%DELTA x\}=10}}\\ \Delta x=10 } $$display$$


Многовато для переменной из 2-х символов. Но решается проблема просто, т.к. iMath поддерживает юникод и существуют программы, раскрывающие сниппеты не только в Вашем любимом текстовом редакторе, но вообще везде. С помощью них можно набирать греческие буквы просто и без мышки.


Назначим сниппеты по аналогии с Mathcad, где это делается так: D, Ctrl+G , у нас будет так: DG . Тогда и читать исходник формулы станет проще:


$$display$$ \boxed{ \color{gray}{\text{%ii @x@ EQDEF x=10}}\\ \Delta x=10 } $$display$$


Из бесплатных программ остановился на этих, они решают проблему:


  • aText (некоторые функции платные, пока без них приемлемо) Windows7+/MacOS
    Здесь лежат греческие буквы и другие сниппеты для оформления расчетной документации, загружаются через FileОткрыть и надо выбрать csv в диалоге, перед загрузкой можно удалить Default Group и Examples
  • espanso Windows8+/MacOS/Linux

Причем здесь текстовый редактор


Проблема 1. Чтобы отобразить переменные после формулы, нужно просто присвоить их скрытно перед формулой и затем отобразить после формулы их значения (серым показан исходный текст)


$$display$$ \boxed{\small\color{silver}{ \text{%%ii @F_2@ EQDEF* F_2=200}\\ \text{%%ii @i_{}@ EQDEF* i_{}=5}\\ \text{%%ii @_2@ EQDEF* _2=900} }} \boxed{ \small\color{silver}{ \text{%%ii @d@ EQDEF d=sqrt{{8 F_2 i_{}}over{%pi _2}}}\\ \text{%%ii TEXT =sqrt\{\{8 _ii_VAL(F_2)_ii_ _ii_VAL(i_\{\})_ii_\}}\\ \text{over\{_ii_VAL(%pi)_ii_ _ii_VAL(_2)_ii_\}\}=_ii_VAL(d)_ii_} }\\ d=\sqrt{8F_2i\over_2}=\sqrt{8 200 5\over3.142 900}=1.682 }\text{мм,}\\ \begin{align} \text{где } & \boxed{\small\color{silver}{\text{%%ii PRINTVAL F_2}}\\F_2=200}\text{Н - рабочее усилие на пружине;}\\ & \boxed{\small\color{silver}{\text{%%ii PRINTVAL i_{}}}\\i=5}\text{ - индекс пружины;}\\ & \boxed{\small\color{silver}{\text{%%ii PRINTVAL _2}}\\_2=900}\text{МПа - допускаемое напряжение сдвига.} \end{align} $$display$$


В чем проблема? А в подстановке значений. Здесь пришлось скопипастить d=sqrt{{8 F_2 i_{}}over{%pi _2}}}, немного изменить до вида =sqrt{{8 F_2 i_{}}over{%pi _2}}}=d и обернуть каждую переменную в _ii_VAL()_ii_. На практике это быстрее чем вместо оборачивания выискивать значения и вписывать их. Но работа лишняя.


Автоматизировать эту подстановку в iMath проблематично, но можно зайти с другого конца сделать эти правки с помощью макросов в текстовом редакторе.


Проблема 2. Вместе со сгенерированным текстом исходник формулы довольно тяжело воспринимается


%%ii @d@ EQDEF d=sqrt{{8  F_2  i_{}}over{%pi  _2}}d=sqrt{{8  F_2  i_{}}over{%pi  _2}} %%gg%%ii TEXT =sqrt{{8  _ii_VAL(F_2)_ii_  _ii_VAL(i_{})_ii_}over{_ii_VAL(%pi)_ii_  _ii_VAL(_2)_ii_}}=_ii_VAL(d)_ii_=sqrt{{8  200  5}over{3,142  900}}=1,682 %%gg

Лечится подсветкой сгенерированного отдельным цветом, опять же в текстовом редакторе.


Проблема 3. Часто приходится искать пропавшую скобочку. Во встроенном редакторе формул подсветку парных скобок никак не добавят. Тоже решается использованием внешнего редактора


Разработчик iMath, Jan Rheinlaender, пошел мне навстречу и добавил редактирование формул из внешнего редактора. Дело за малым выбрать его и настроить.


Требования к редактору такие:


  • Бесплатность
  • Макросы
  • Множественное редактирование (потребуется для использования в макросах, и просто удобно)
  • Подсветка пользовательского синтаксиса
  • Подсветка парных скобок
  • Удобство редактирования английского текста вперемешку с русским, чтобы набирать такое, например:
    Q_д=0.785  D_сп^2  p
    
  • Кроссплатформенность (желательно)
  • Сохранение без подтверждений при закрывании (желательно)

Сравнение текстовых редакторов


Sublime Text


Этот редактор выглядит привлекательнее остальных. Формально он не бесплатный, но напоминает об этом даже не каждый день и ничем больше не досаждает.


Смотрим, можно ли настроить подсветку своего синтаксиса. Да, у него есть возможность описать его в yaml. Пишем файл подстветки, результат выглядит отлично:



Теперь записываем макросы: Ctrl+Q, Ctr+F, пишем регулярку для выделения переменной, выделяем, переводим курсор влево, пишем _ii_VAL(, выделяем регуляркой опять, переводим курсор вправо, пишем )_ii_, Ctrl+Q. Проверяем что получилось запускаем макрос с помощью Ctrl+Shift+Q. И ничего. Не выделяется оно, и люди жалуются с 2009. Да...


Ладно, разберёмся позже. Попробуем пока настроить Sublime, чтобы он сохранял файл без подтверждений и выходил по одной кнопке. И тут снова проблема в Sublime нельзя назначить 2 действия на один шоткат. Окей, ставим плагин для поддержки назначения нескольких действий, но сохранить без подтверждений и закрыть редактор все равно не получается. Не проблема у нас же есть макросы! Нажимаем Ctrl+Q, запись пошла, нажимаем Ctrl+S сохранились, теперь выходим...



Ну окно закрылось, может быть даже закрытие записалось в макрос, но сам макрос то не сохранился. Что ж, не судьба, смотрим другие редакторы.


Vim


Настроить его можно, но каково набирать русские подписи к переменным. Везде описываются решения с langmap и keymap, но они не достаточны. В статье Vim и переключение раскладок: о наболевшем рекомендуется плагин, который переключает раскладку. Можно найти еще одно вроде бы рабочее решение.


Однако даже при решении проблемы с русской раскладкой остается вопрос: сколько инженеров использует vim в своей работе? Его даже из программистов только часть использует. Откладываем vim в сторону и ищем дальше.


[W]indows [L]inux [M]acOS WLM WLM W__ WLM W__ W__ WLM WLM
поиск регулярками + + + + + + + +
замена внутри выделения + + + + + + + +
подстановки (\0, \1, ...) + - + + + + + +
добавить курсор мышью + + + + - + + ?
добавить выделение совпадения ^D ^D - ^D - - ^D +
выделить все совпадения F3 - - - ^ - ?
выделить все совпадения из диалога поиска E - - - - - ?
добавить курсор строкой ниже ^ - - - - - +
макрос редактирования текста + + + - + - + +
запись поиска - + + - - - + +
подсветка парных скобок + + + + + + + +
возможность определить сложный синтаксис + + ? ? ? +
удобство работы с русским текстом + + + + + +
поддержка плагинов + + + + - + +
менеджер плагинов + + + - + - - +
палитра команд ^P ^P ^M - - - ^E -

Клавиши (для Windows): ^ Ctrl, Shift, Alt, Space, Enter, стрелки, не назначено
делается плагинами
требует настройки
по умолчанию русский текст не отображается, нужно активировать code.page=65001 в файле настроек
шоткат NppMenuSearch конфликтует с пометками, нужно перенастраивать
шоткаты, содержацие буквы, работают только в английской раскладке
конфликтует с шоткатом переворачивания экрана
есть шоткат , но на самом деле он выполняет прямоугольное выделение
без настройки нижнее подчеркивание не очень заметно


Что тут можно обобщить? Удивляют 2 вещи: невозможность записи поиска в макросах Sublime и невозможность (или я плохо искал?) подстановки при поиске с заменой в Cuda. Тем не менее, выбора в общем-то и нет.


Logo Название Версия Дата Текстовый компонент Решение
Sublime Text 3.2.2 01.10.19 Cвой (на Skia) Нужные макросы не записать
CudaText 1.118.2.0 29.12.20 Свой Подходит
Notepad++ 7.9.2 01.01.21 Scientilla Слабые возможности редактирования текста
SciTE 4.4.6 01.12.20 Scientilla Макросов вообще не нашел
AkelPad 4.9.8 18.07.16 Scientilla Нужные макросы не записать
Notepad3 5.20.915.1 15.09.20 Scientilla Блокнот я им заменил, но нужные макросы не записать
Textadept 11.0 01.12.20 Scientilla / Curses Шоткаты на русской раскладке не работают
Vim 8.2 10.12.20 ? Сколько инжеренов его знает?

CudaText


И так, берем CudaText. Он поставляется как portable zip-архив. В wiki что-то пишут про не portable версию, но инсталлятора я не нашел. Хорошо это или плохо? Устанавливающаяся версия кажется понятнее все настройки лежат в %APPDATA% и их можно хранить в репозитории. А здесь? Окей, положим весь редактор в репозиторий, 25Мб это не так много, зато на другой машине не надо будет устанавливать запустил из репозитория и голову не забиваешь. Надо сказать, что настройки хоть и хранятся в той же папке, что и редактор, при заливке в нее новой версии не перетираются, неудобство только в том что нужно руками распаковать новую версию. Первый запуск:



Эстетически выглядит норм, но как-то не контрастно всё. Ладно, это настроим. Так, убираем все что нам не нужно для набора формул. Включаем подсветку парных скобок и перенос по словам. Так же убираем поведение с последней строкой вверху экрана при прокрутке до упора (не привычно), автозакрытие скобок (польза спорная, а записи макросов иногда мешает). Statusbar оставляем, чтобы видеть, когда включен режим записи макроса.


Выбираем Options Settings default/user, пишем


{  "wrap_mode" : 1,  "wrap_indented" : false,  "ui_statusbar_show" : true,  "ui_sidebar_show" : true,  "find_hidden_buttons": "c",  "bracket_highlight" : true,  "ui_toolbar_show" : false,  "ui_theme" : "white",  "ui_theme_syntax" : "white",  "ui_font_name" : "default",  "ui_font_size" : 9,  "font_name" : "Lucida Console",  "font_size" : 10,  "ui_title_path" : true,  "ui_menu_show" : false,  "ui_tab_show" : false,  "gutter_show" : false,  "gutter_fold" : false,  "show_last_line_on_top" : false,  "log_sessions" : false,  "py_init_log" : false,  "auto_close_brackets": ""}

Теперь команды меню доступны только по кнопке ' ' слева вверху и через меню Ctrl+Shift+P (как в Sublime). Текущая вкладка, крестика которой теперь не видно, закрывается по Ctrl+W


Нужно выбрать тему поконтрастнее.



Но тратить время на это не придётся светлая контрастная тема одна white (вторая слева).


Из оригинального: если увеличить высоту окна, слева появится кнопка '', которая показывает список специальных символов



Но нам это не нужно мы используем aText для набора греческих и математических символов.


Теперь надо установить плагины: Auto_Save и Macros. Устанавливаются они как в Sublime: Plugins Addons Manager Install..., ну или через Ctrl+Shift+P и наборе чего-то типа plugin:Install+Enter. Через некоторое время появится список доступных плагинов



Тут все понятно. Надо только обратить внимание, что плагины разбиты по категориям. и для фильтрации можно набирать название этой категории с ':', например, 'theme:' для просмотра всех неустановленных тем. И еще: установленные плагины не отображаются в списке, для них есть пункт меню Plugins Addons Manager Remove add-on...


Сначала повесим шоткаты на команды макроса (из коробки таких шоткатов нет). Если в Sublime это делалось правкой конфига через PreferencesKey Bindings, то здесь это делается оригинально:


  • надо нажать Ctrl+Shift+P, выбрать требуемую команду, например 'macros: start recording'
  • нажать F9
  • в появившемся окне нажать кнопку "Set"
  • нажать комбинацию клавиш
  • нажать ОК

Назначаем Ctrl+Q для "macros: start recording" и Ctrl+Shift+Q для "macros: stop recording".


Настройки эти сохраняются в файле settings/keys:


..."2810" : {    "name" : "macros: start recording",    "s1" : [ "Ctrl+Q" ]  }...

Но можно ли дописывать шоткаты прямо в файле и назначать произвольные цифровые айдишники не ясно.


Основная задача записать макрос iMath:explain EQDEF, который будет копировать выражение, ставить переменную в конце после '=', оборачивать переменные в _ii_VAL( и )_ii_ и еще будет переименовывать @метку@. Задача большая, поэтому разобъем её на более мелкие. Здесь приведу запись только одной. Итак, записываем макрос, который обернет переменные в _ii_VAL( и )_ii_:


  • Ctrl+Q запись пошла
  • Вначале надо подписать всем ключевым словам @@ впереди, чтобы не обернуть их нечаянно. CudaText это единственный редактор без поддержки замены с подстановками вместо групп совпадения типа \0, \1, ..., поэтому будем пользоваться мультивыделением. Жмем Ctrl+F, пишем регулярку \b(abs|acute|aleph|alignb...widetilde|widevec|wp|yellow)\b, жмем Alt+E, Esc теперь у нас выделены все ключевые слова, жмем , вписываем @@
  • Выделяем строки, начинающиеся на %%ii TEXT с помощью регулярки (?<=^%%ii\s+TEXT).*$
  • Выделяем внутри выделения числа и переменные с помощью регулярки (?<=[^%@'"])(\d+\.\d+|%\w+_\{[^{}]*\}|%\w+|\b\w+_\{[^{}]*\}|\b\w+)(?!.*%%gg$)
  • С прыжками курсора влево вправо возиться лениво ну что ж, затрем буфер обмена, Ctrl+X
  • Пишем _ii_VAL(, Ctrl+V, )_ii_
  • Удаляем @@ простой заменой по всему документу
  • Ctlr+Shift+Q закончили запись, назначаем имя imath:_ii_VAL()_ii_ all
  • Теперь он появился в списке команд назначаем шоткат по той же схеме: Ctrl+Shift+P, выбрать макрос imath:_ii_VAL()_ii_ all(не нажимая Enter), F9, назначаем Ctrl+Shift+V

Макрос можно править (что я и делал), он лежит в settings/macros.json. Примерно такими же хитрыми манипуляциями записываем остальное. При записи макроса можно вызывать другой макрос.


Теперь настроим Auto_Save. Ctrl+Shift+P ищем plugin:Auto Save: config, правим конфиг


[op]save_interval=30save_before_closing_tab=1on_deactivate=0

Теперь Cudа будет сохранять файлы ничего не спрашивая, таким образом правка формулы в Cuda будет происходить по той же логике, что и правка в LO Math. Ещё я назначил "file:quit program" шоткат F3 (у меня и в iMath редактор вызывается по F3) чтобы открыть/закрыть двумя нажатиями одной кнопки.


Осталось настроить подсветку синтаксиса. Wiki говорит, что чтобы создать свой лексер, нужно установить SynWrite и потом, видимо, удалить и забыть про него. Действуем по этой инструкции.


  1. Устанавливаем SynWrite
  2. Options Customize lexers library..., копируем какой-нибудь простой язык или добавляем новый с именем eqn
  3. View Lexer Выбираем свой новый лексер
  4. Options Customize lexer...
  5. Накидываем стили из других языков с помощью кнопки "Import Items" (красная стрелка с листом бумаги)

  6. Добавляем правила

  7. Копируем файлы eqn.lcf и eqn.cuda-lexmap из SynWrite\Data\lexlib в cudatext\Data\lexlib
  8. Перезапускаем редактор, вставляем тестовый текст, нажимаем Ctrl+Shift+P, eqn, Enter. Появляется окно


    Выбираем подходящие по смыслу стили и нажимаем ОК, лексер заработал:


Вот и все. Теперь заниматься оформителькой писаниной стало гораздо легче! Настройки можно взять здесь (нужно распаковать в папку, в которую распаковали редактор)



Заключение


Конечно, я пропустил много популярных редакторов (те же Atom и Visual Studio Code). Но все равно странно казалось, подойдет любой продвинутый, а подошел только один, причём в других не хватало простых вещей. Хотелось поделиться обнаружением этого редактора. Еще хотел поделиться способом оформления расчетной документации (или курсовых) с помощью iMath (плагин еще тот по стабильности и эргономичности, но другого нет).


Страница скачивания LibreOffice тестировал на 7.0, но и 6.4 должен работать
Страница скачивания iMath скачивать нужно iMath-2.3.1~beta2.oxt
Обсуждение фичи iMath "open in external editor" на sourceforge.net про настройку iMath
Документация по iMath
Страница скачивания CudaText
Настройки CudaText для работы с iMath (нужно распаковать в папку, в которую распаковали редактор)
CudaText на github.com
CudaText на sourceforge.net здесь только плагины
Настройки aText для набора греческих символов и не только открываются по Ctrl+O из aText

Подробнее..

Яндекс.Функции, Sublime Text и навыки для Алисы

05.07.2020 20:11:11 | Автор: admin
27 июня Яндекс проводил онлайн-хакатон по разработке навыков для Алисы.

Решил и я принять в нем участие. Ранее навыки для Алисы я уже делал, но хостил их все на Google App Engine. Тут же я решил изучить что-то новое в рамках Хакатон. Яндекс активно продвигает свои Функции в Яндекс.Облаке для разработки навыков. Для навыков они бесплатны (правда, бесплатно не всё).



Да и Google App Engine теперь требует подключить аккаунт для оплаты, чтобы приложение на сервер залить.

Решил я попробовать навык в Яндекс.Облаке разместить. К тому же, решил я, навык должен быть простым чтобы за день в рамках Хакатона успеть сделать. Тут Функции в Облаке очень подходят к сторонним сервисам обращаться не надо (они в функциях платные), данные можно хранить в самом навыке, внешняя БД не нужна.

Раньше я старался делать полезные навыки чтобы оплатить парковку голосом, например (в Яндекс.Навигаторе) или узнать, когда автобус/троллейбус/трамвай придет на ближайшую остановку. Это требовало интеграций со сторонними сервисами, долгой разработки, а Яндексу, судя по премии Алисы, больше игровые-развлекательные навыки по душе. Потому в этот раз я решил делать игру.

Для работы с Функциями предлагается либо все делать локально, а потом файлы в Функции загружать, либо же редактировать файлы в онлайн-редакторе. Онлайн-редакторы я люблю ;), потому сначала попробовал воспользоваться им. Однако после двух-трех-четырех правок и сохранения новых версий, от этой идеи решил отказаться уж очень неудобно, что нажав на Сохранить, тебя редиректит на другой экран. Итого каждая правка это куча лишних кликов.

С командой строкой жить чуть проще. Но файлы нужно каждый раз нужно в zip добавлять, а лишь потом в Облако грузить. Руками неудобно.

Так уж сложилось, что моя IDE это Sublime Text 3. Недавно Google отказался от Google App Engine Launcher и с ним остался единственный вариант загрузка файлов через командную строку. Тогда-то я и узнал о существовании build systems в Sublime Text нажимаешь Ctrl/Cmd+B и Sublime выполняет нужную тебе команду. Для GAE я тогда сделал набор команд, решил, что и тут что-то подобное нужно.

Сначала была сделана функциональность просто для загрузки файлов.
Для GAE я делал так, чтобы передаваемые параметры (а именно название проекта) читалось из файла проекта Sublime Text. Тут же для экономии времени название функции, точка входа и остальные параметры просто зашиты в build system. Не очень хорошо, но для моих целей подходило.


Но если все тестировать на боевом сервере, то и логи надо как-то удобно смотреть. Потому для загрузки и отображения логов было добавлена отдельная команда.

Увы, если логи просто отобразить, то ориентироваться в них довольно сложно.
Пришлось немного подшаманить с командой (чтобы unicode-строки отображались корректно но и то, работает это не всегда), с самим кодом (чтобы JSON выводить в читаемом виде):
    logging.getLogger().setLevel(logging.DEBUG)    logging.debug('REQUEST: ')    for line in json.dumps(event['request'], indent=4).split('\n'):        logging.debug(line)

и создать отдельный файл синтаксиса, чтобы подсвечивать ошибки в логе.


Отдельная удобная фича Sublime Text умеет подсвечивать и саму строку, если нашла ее в коде.

Итого получилось следующее
Файл Yandex Cloud.sublime-build
// Install Yandex CLI - https://cloud.yandex.ru/docs/cli/quickstart#install//// http://www.sublimetext.com/docs/3/build_systems.html// https://cloud.yandex.ru/docs/functions/operations/function/version-manage#version-create{    "file_patterns": ["*.py"],    "syntax": "Packages/User/YCLog.sublime-syntax",    "file_regex": "File \\\"/function/code/(...*?)\\\", line ([0-9]*)",     "variants":        [            {                "name": "Upload",                "shell_cmd": "zip -u -0 yc_upload.zip *.py && yc serverless function version create --function-name=my-function-name --runtime=python27 --entrypoint=main.handler --memory=128m --execution-timeout=2s --source-path=yc_upload.zip",            },            {                "name": "Logs",                "shell_cmd": "printf '%b\n' \"\\$(yc serverless function logs alice-guess-the-language)\""            }        ]}


Файл YCLog.sublime-syntax
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: YC Log
file_extensions: [log]
scope: source.example-c
contexts:
main:
# Request identifiers
- match: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (START|END|REPORT) RequestID: .*'
scope: storage.type.string.c

# Dates
- match: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
scope: comment.line.c

- match: '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{2,3}Z [0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}'
scope: comment.line.c

# Log level
- match: '\[(INFO|DEBUG)\]'
scope: comment.line.example-c

# Log level
- match: '\[(ERROR|WARNING)\]'
scope: keyword.control.flow.break.c

# Strings begin and end with quotes, and use backslashes as an escape
# character
- match: '"'
scope: punctuation.definition.string.begin.c
push: double_quoted_string

double_quoted_string:
- meta_scope: string.quoted.double.example-c
- match: '\\.'
scope: constant.character.escape.example-c
- match: '"'
scope: punctuation.definition.string.end.example-c
pop: true



Редактировать код Функций в Яндекс.Облаке стало гораздо приятнее.

P.S. Мой навык игра Угадай язык.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru