Подсветка синтаксиса 1с в Obsidian

07.09.23

Разработка - Инструментарий разработчика

Как добавить подсветку синтаксиса 1с в систему заметок Obsidian

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Подсветка синтаксиса 1с в Obsidian
.zip 887,73Kb
21
21 Скачать (1 SM) Купить за 1 850 руб.

Obsidian - это локальная база знаний, одна из самых дружесвенных из всех, что я на текущий попробовал. Сама база это просто папка на диске с файлами в формате Markdown. Такой сопособ хранения отлично дружит с Git. Так же она расширяется плагинами на подобии VS Code. Одна в ней была проблемма. При способности подсвечивать синтаксис на разных языках, нет в ней подсветки 1с. После изучения вопроса, я выяснил что для подсветки используется библиотека CodeMirror и уже есть реализованный для 1с модуль. Спасибо Сергею Кудашкину и Александра Колесникову на https://github.com/sikuda/codemirror-1C нашел то, что мне было нужно.

Сейчас по шагам распишу, что нужно делать. Все плагины, которые вы устанавливаете, устанавливаются непосредсвенно в папку с вашей базой знаний, или хранилищем в терминологии obsidian. Нужный нам плагин лежит в папке <ваша база знаний>\.obsidian\plugins\cm-editor-syntax-highlight-obsidian\

Поменять необходимо всего 1 файл main.js в двух местах. Нужно в перечисления модулей добавить наш модуль. Привожу пример кода:

CodeMirror.modeInfo = [
   ...
    {name: "BSL", mime: "text/x-bsl", mode: "bsl", ext: ["bsl"],alias: ["1s","1c"]},
   ...
]

 

И собственно сам модуль:

createCommonjsModule(function (module, exports) {
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// for 1C - http://code1c.sikuda.ru/
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
    mod(codemirror);
})(function(CodeMirror) {
"use strict";

CodeMirror.defineMode("bsl", function(conf, parserConf) {
    var ERRORCLASS = 'error';

    function wordRegexp(words) {
        return new RegExp("^((" + words.join(")|(") + "))([ ;\\/\\n\\t]|$)", "i"); //\\b \\W //[^$A-Za-z0-9А-ЯЁа-яё_]
    }
    
    var singleOperators = new RegExp("^[\\+\\-\\*/%&<>=]");
    var singleDelimiters = new RegExp("^[\\(\\)\\[\\]\\{\\},:=;\\.]");
    var doubleOperators = new RegExp("^((<>)|(<=)|(>=))");
    var identifiers = new RegExp("^[_A-Za-zА-ЯЁа-яё][_A-Za-z0-9А-ЯЁа-яё]*");

    var openingKeywords = ['если', 'if', 'пока', 'while', 'для', 'for', 'процедура', 'procedure', 'функция', 'function', 'попытка', 'try'];
    var middleKeywords = ['иначе', 'else', 'иначеесли', 'elsif', 'исключение', 'except'];
    var doubleClosing = wordRegexp(['конецесли', 'endif', 'конеццикла', 'enddo', 'конецпроцедуры', 'endprocedure', 'конецфункции', 'endfunction', 'конецпопытки', 'endtry']);
    var endKeywords = ['loop'];
    var operatorKeywords = ['and', 'or', 'not', 'xor', 'in'];
    var commonKeywords = ['новый', 'new', 'каждого', 'each', 'из', 'from', 'цикл', 'do', 'или', 'or', 'не', 'not', 'ложь', 'false', 'истина', 'true', 'и','and', 'возврат', 'return', 'тогда', 'then', 'экспорт', 'export', 'неопределено', 'undefined', 'продолжить', 'continue', 'прервать', 'break', 'перейти', 'goto', 'по', 'to' , 'null'];
    var commontypes = ['перем', 'var', 'знач', 'val'];

    var wordOperators = wordRegexp(operatorKeywords);
    var keywords = wordRegexp(commonKeywords);
    var types = wordRegexp(commontypes);
    var stringPrefixes = '"';
    var stringNewLine  = '|';

    var opening = wordRegexp(openingKeywords);
    var middle = wordRegexp(middleKeywords);
    var closing = wordRegexp(endKeywords);
    var doOpening = wordRegexp(['do', 'пока']);
    
    var indentInfo = null;

    CodeMirror.registerHelper("hintWords", "bsl", openingKeywords.concat(middleKeywords).concat(endKeywords).concat(operatorKeywords).concat(commonKeywords).concat(commontypes));

    //CodeMirror.registerHelper("hint", "1c", openingKeywords.concat(middleKeywords).concat(endKeywords).concat(operatorKeywords).concat(commonKeywords).concat(commontypes));
    
    function indent(_stream, state) {
      state.currentIndent++;
    }

    function dedent(_stream, state) {
      state.currentIndent--;
    }
    // tokenizers
    function tokenBase(stream, state) {
        if (stream.eatSpace()) {
            return null;
        }

        var ch = stream.peek();

        // Handle Comments
        if (ch === "/") {
            var ch_next = stream.string.charAt(stream.pos+1) || undefined;
            if (ch_next === "/") {
                stream.skipToEnd();
                return "comment";
            }
         }

        //handle meta - &OnClient or #If
        if (ch === "&" || ch === "#") {
            stream.skipToEnd();
            return "meta";
        }

        //~nameLabel
        if (ch === "~"){
            stream.next();
            stream.match(identifiers);
            return 'label';
        }

        
        // Handle Number Literals
        if (stream.match(/^\.?[0-9]{1,}/i, false)) {
            var floatLiteral = false;
            // Floats
            if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; }
            else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; }
            else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; }

            if (floatLiteral) {
                // Float literals may be "imaginary"
                stream.eat(/J/i);
                return 'number';
            }
            // Integers
            var intLiteral = false;
            // Hex
            if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; }
            // Octal
            else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; }
            // Decimal
            else if (stream.match(/^[0-9]\d*F?/)) {
                // Decimal literals may be "imaginary"
                stream.eat(/J/i);
                // TODO - Can you have imaginary longs?
                intLiteral = true;
            }
            // Zero by itself with no other piece of number.
            else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; }
            if (intLiteral) {
                // Integer literals may be "long"
                stream.eat(/L/i);
                return 'number';
            }
        }

        // Handle Strings
        if (stream.match(stringPrefixes)) {
            state.tokenize = tokenStringFactory(stringPrefixes);
            return state.tokenize(stream, state);
        }
        if (stream.match(stringNewLine)) {
            state.tokenize = tokenStringFactory(stringPrefixes);
            return state.tokenize(stream, state);
        }


        if (stream.match(doubleOperators)
            || stream.match(singleOperators)
            || stream.match(wordOperators)) {
            return 'operator';
        }
        if (stream.match(singleDelimiters)) {
            return 'delimiter';
        }
        if (stream.match(doOpening)) {
            indent(stream,state);
            state.doInCurrentLine = true;
            return 'keyword';
        }
        if (stream.match(opening)) {
            if (! state.doInCurrentLine)
              indent(stream,state);
            else
              state.doInCurrentLine = false;
            return 'keyword';
        }
        if (stream.match(middle)) {
            return 'keyword';
        }

        if (stream.match(doubleClosing)) {
            //dedent(stream,state);
            dedent(stream,state);
            return 'keyword';
        }
        if (stream.match(closing)) {
            dedent(stream,state);
            return 'keyword';
        }

        if (stream.match(types)) {
            return 'keyword';
        }

        if (stream.match(keywords)) {
            return 'keyword';
        }

        if (stream.match(identifiers)) {
            return 'variable';
        }

        // Handle non-detected items
        stream.next();
        return ERRORCLASS;
    }

    function tokenStringFactory(delimiter) {
        var singleline = delimiter.length == 1;
        var OUTCLASS = 'string';

        return function(stream, state) {
            while (!stream.eol()) {
                stream.eatWhile(/[^'"]/);
                if (stream.match(delimiter)) {
                    state.tokenize = tokenBase;
                    return OUTCLASS;
                } else {
                    stream.eat(/['"]/);
                }
            }
            if (singleline) {
                if (parserConf.singleLineStringErrors) {
                    return ERRORCLASS;
                } else {
                    state.tokenize = tokenBase;
                }
            }
            return OUTCLASS;
        };
    }


    function tokenLexer(stream, state) {
        var style = state.tokenize(stream, state);
        var current = stream.current();

        var delimiter_index = '[({'.indexOf(current);
        if (delimiter_index !== -1) {
            indent(stream, state );
        }
        if (indentInfo === 'dedent') {
            if (dedent(stream, state)) {
                return ERRORCLASS;
            }
        }
        delimiter_index = '])}'.indexOf(current);
        if (delimiter_index !== -1) {
            if (dedent(stream, state)) {
                return ERRORCLASS;
            }
        }
        return style;
    }

    var external = {
        electricChars:"dDpPtTfFeE ",
        startState: function() {
            return {
              tokenize: tokenBase,
              lastToken: null,
              currentIndent: 0,
              nextLineIndent: 0,
              doInCurrentLine: false
          };
        },

        token: function(stream, state) {
            if (stream.sol()) {
              state.currentIndent += state.nextLineIndent;
              state.nextLineIndent = 0;
              state.doInCurrentLine = 0;
            }
            var style = tokenLexer(stream, state);
            state.lastToken = {style:style, content: stream.current()};
            return style;
        },

        indent: function(state, textAfter) {
            var trueText = textAfter.replace(/^\s+|\s+$/g, '') ;
            if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1);
            if(state.currentIndent < 0) return 0;
            return state.currentIndent * conf.indentUnit;
        },

        lineComment: "'"
    };
    return external;
});

CodeMirror.defineMIME("text/x-bsl", "bsl");

});  
});

 

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

Для тех кому лениво заниматся кописастом, прилагаю файлик исправленного модуля.

Obsidian заметки база знаний

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169292    937    403    

905

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    12610    99    42    

101

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26537    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16829    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    190552    1150    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

15000 руб.

10.11.2023    11396    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    778    2    0    

4

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103927    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 167 07.09.23 22:35 Сейчас в теме
Очень интересно!
Поставил, вроде заработало, но
зачем-то перед знаком равно воткнуло символ \

КомпоновщикНастроек\=

Как можно исправить?
9. stoptime 408 08.09.23 11:10 Сейчас в теме
(1)
КомпоновщикНастроек\=
Не знаю, у меня такое поведение не наблюдалось.
10. leosoft 167 08.09.23 11:18 Сейчас в теме
(9) У меня в заметке был код на 1С, я его решил обернуть в блок кода,
в этот момент у всех = появился \=
А если сначала пустой блок создать, а потом туда вставить код - все нормально.
13. stoptime 408 08.09.23 11:27 Сейчас в теме
(10)Значит символ был, \ в Obsidian не отображается. Я из за этого пути файлов в одиночные обратные кавычки всегда оборачиваю
12. leosoft 167 08.09.23 11:20 Сейчас в теме
(9) И еще вопросик - как задать свои цвета для разметки?
14. stoptime 408 08.09.23 11:29 Сейчас в теме
(12) для темной темы в той же папке styles.css . А вот для светлой упакован в base64 в самом файлике main
2. pma_2015 134 08.09.23 09:22 Сейчас в теме
Для какой версии Obsidian модуль: 1.4.5?
6. stoptime 408 08.09.23 10:58 Сейчас в теме
(2) На текущий момент я 1.4.5 использую. Но работало и раньше с 0.9 версии.
3. infosoft-v 941 08.09.23 09:22 Сейчас в теме
Очень круто.
Подскажите, а для Joplin такая настройка подойдет? Может можно адаптировать?
8. stoptime 408 08.09.23 11:07 Сейчас в теме
(3) Joplin вроде тоже CodeMirror использует, посмотрел мельком там немного по другому сделали. Но если погрузится можно думаю прикрутить.
4. tolyan_ekb 80 08.09.23 10:29 Сейчас в теме
Орфографию бы в публикации проверить и поправить
5. a_plastinin 267 08.09.23 10:54 Сейчас в теме
Дополню чуть, что в режиме просмотра (Rendered) используется prism.js. Там подсветка bsl работает из коробки.
user2056853; mrChOP93; JohnyDeath; stoptime; +4 Ответить
7. stoptime 408 08.09.23 11:02 Сейчас в теме
(5) Спасибо за дополнение. Я об этом не упомянул.
a_plastinin; +1 Ответить
11. leosoft 167 08.09.23 11:19 Сейчас в теме
(5) А где этот prism лежит? В каком-то плагине тоже?
16. stoptime 408 08.09.23 12:09 Сейчас в теме
(11) Нет это встроеная библиотека, все там можно чере css настроить под себя. Пока туда не погружался. После этого вопроса появилось такое желание. Если что получиться, напишу здесь.
18. stoptime 408 08.09.23 12:22 Сейчас в теме
(11)Посмотрел, можно поставить плагины Style Settings и CodeMirror Options и там уже развлекаться с внешним видом.
20. leosoft 167 08.09.23 14:57 Сейчас в теме
15. Gaster 08.09.23 11:34 Сейчас в теме
Отличные новости, спасибо!
17. kuzyara 2106 08.09.23 12:18 Сейчас в теме
в обсидиане синхронизация с облаком и хостинг платные?
19. stoptime 408 08.09.23 12:24 Сейчас в теме
(17)Если их родной использовать, то да. На то и живут. Я для этих целей git использую, на своих серверах. Все хранилище это просто каталог с текстовыми файлами и картинками. Для синхронизации этого есть куча способов.
21. user1493358 08.09.23 15:08 Сейчас в теме
Так есть же по дефолту подсветка.
22. ixijixi 1975 08.09.23 15:46 Сейчас в теме
Коллеги, смотрю публикация получила неплохой отклик, значит Обсидиан активно 1сниками используется, а я ни сном ни духом. Можете тезисно накидать, для чего он может пригодиться? Навскидку вижу использование в качестве хранилища шаблонов, но 1С в шаблоны и так умеет "искаропки". В чём же ещё профит от использования?
23. stoptime 408 08.09.23 16:31 Сейчас в теме
(22) Опишу свой опыт, если у когото есть свои соображения прошу добавить.
Для меня это в первыую очердь база знаний. Раньше были попытки для этого использовать движок wiki - не прижилось.
В базе собираются Статьи, мои мысли по поводу статей.
Конечно же код, и не только на 1с, и в не целях работы над ним. Для этого другие инструменты использую. А для сохранения и размышления
Записки по проэктам, по контактам на проэктах и всей подноготной, которая лично мне нужна, но ни в какую корпоративную систему я это не положу.
Есть удобный поиск по тексту, по тегам
Система плагинов, которая позволяет настроить под себя в достаточно широком диапазоне. Для примера, я например использую плагин Kanban, чтобы у меня была моя персональная доска. Знаю что есть аналоги, но история с недавно закрывшим доступ Trello как бы намекает, что не все удобное есть добро. Есть и отечественные аналоги, которые для работы использую. Так что это ворос лично моего предпочтения.
Есть набор плагинов, который позволяет работать с pdf файлами, я это использую для чтения технических книг. Снабжаю их ссылками на другие материалы и делаю для себя заметки и выделения.
Вся база, по сути набор текстовых файлов, и в нее можно легко и очень гибко подключать всяки сценарии автоматизации. Плюс все это версионировать.
Внутри можно использовать внутренние и внешние ссылки. Внутренние обновляются, при изменении имен файлов в процессе работы с программой.
denis83; LeXXeR; JohnyDeath; svbel85; Cmapnep; Bassgood; +6 Ответить
24. ixijixi 1975 08.09.23 16:40 Сейчас в теме
(23) Спасибо, вижу, что диапазон широк, интересно, но в моей практике мало применимо. Послушаем других участников)

Спасибо еще раз!
25. leosoft 167 08.09.23 22:25 Сейчас в теме
(24) По сути это wiki система с перекрестными ссылками.
Все заметки - это отдельные текстовые файлы в формате markdown.
Есть система иерархических тегов, папок и т.п.
Мощная поисковая система, интерфейс по аналогии с VS Code вроде на том же движке.
Пока бесплатная.
26. ixijixi 1975 09.09.23 09:22 Сейчас в теме
(25) Так, а 1снику это зачем?
triviumfan; +1 Ответить
27. leosoft 167 09.09.23 10:44 Сейчас в теме
(26) Можно код хранить и систематизировать, описания всяких обработок и т.п.
Конспекты всяких семинаров и курсов.
Информацию по клиентам, контактов с ними, информация о доработках.
29. user1658716 09.09.23 22:11 Сейчас в теме
(26)https://github.com/Ndochp/1c_fight_and_work
У меня примерно так. Для публикации специально не готовилось, если найдете пароли - свистните.

Из неприятного - делать ссылки в стиле [[]] удобнее, чем в стиле МД, но за пределами обсидиана это не работает. Поэтому гитхаб становится неинтерактивным.
HectorPrima; twiny; +2 Ответить
28. triviumfan 97 09.09.23 17:47 Сейчас в теме
(24) Аналогично. Сценариев много, но зачем оно мне - не понятно)
32. mip128 13.09.23 09:38 Сейчас в теме
(23) это типа аналога oneNote?
35. stoptime 408 13.09.23 10:06 Сейчас в теме
(32) Как OneNote его тоже можно использовать.
44. pma_2015 134 01.11.23 18:18 Сейчас в теме
(23) Посмотрите плагин Projects. Вместо Kanban.
30. user1590291 10.09.23 21:19 Сейчас в теме
(22), говоря про Обсидиан нельзя не затронуть ещё и такую методологию ведения заметок как Цеттелькастен.
Вообще, если Вам интересно, то рекомендую прочитать вот этот цикл статей (если Вы не против длиннопостов, конечно.
stoptime; +1 Ответить
37. stoptime 408 13.09.23 11:39 Сейчас в теме
(30) Статьи стоющие, спасибо
31. Foxtrot1388 11.09.23 09:59 Сейчас в теме
Ну как бы у этого плагина (https://github.com/deathau/cm-editor-syntax-highlight-obsidian) ужа давненько висит PR для добавления этой функциональности, которая полностью игнорируется автором. При желании собрать плагин можно из форка.
twiny; stoptime; +2 Ответить
33. mip128 13.09.23 09:39 Сейчас в теме
34. Foxtrot1388 13.09.23 09:51 Сейчас в теме
36. stoptime 408 13.09.23 10:15 Сейчас в теме
(31) Не увидел, Денис. Спасибо за Вашу работу.
42. mip128 23.09.23 17:29 Сейчас в теме
(31) Честно, я не понял, что ты написал. Ты хотел, чтобы он сделал форк с этого репозитория для того, чтобы добавить подсветку 1С?
38. friskdb 33 13.09.23 14:22 Сейчас в теме
На версии 1.4.12 не сработало. Собрал main.js по инструкции.
Fuck_em_all; +1 Ответить
43. twiny 15 10.10.23 10:37 Сейчас в теме
39. JohnyDeath 302 15.09.23 09:14 Сейчас в теме
Я посматриваю в сторону AppFlowy. Это опенсорс "аналог" notion. Последним я пользуюсь в том числе и для размещения документации для пользователей.
Но понимаю, что в любой момент notion может просто уехать из РФ, как это сделали многие западные компании. Поэтому и смотрю на аналоги, которые можно разместить у себя.
AppFlowy не смотрели?
40. Sergik_D 23 18.09.23 13:37 Сейчас в теме
(39) Те же опасения испытываю насчет Notion ) AppFlowy где данные хранит?
41. JohnyDeath 302 18.09.23 13:41 Сейчас в теме
(40) локально, где установишь.
На хранение файлов есть отдельная настройка
45. NeTan-root 01.12.23 21:05 Сейчас в теме
Кто смотрел сравнивал Obsidian с Anytype? Вроде очень нравится что есть объекты, типы, свойства, большое количество связей и возможностей отборов. Шифрование, блокчейн хранение (кажется можно даже паролик какой сохранить и не бояться за него, правда?). Синхронизация и локальное хранение уже из коробки. Смесь Noition и Obsidian. На каждый тип делаешь сразу шаблон, удобно добавлять новые объекты итд, печать в PDF тоже есть. Не требует четкой иерархии и папок, сразу добавляешь плоско, но с большим количеством связей. Т.е. вроде все это можно настроить и в Obsidian, но тут уже из коробки все есть, и самое главное все интерактивно, не нужно помнить все настройки плагинов и всякую их разметку, синтаксис, писать запросы итд. Но есть и неудобные нюансы с которыми придется какое-то время мириться. Но в общих чертах вроде как свои функции выполняет и не надо морочить голову над архитектурой как в Obsidian. До сих пор не могу выбрать для себя что будет основным приложением...


Если еще актуально для плагина syntax-highlight написал дополнение, в которое запихнул код из шапки и он даже работает. Если кому нужно, пользуйтесь. Как уже заметили выше подсветка BSL есть в Obsidian из коробки, но только в режиме просмотра, а в режиме редактирования можно видеть через этот плагин. Осталось только разобраться как настроить цвета для конкретного синтаксиса не зависимо от темы, чтобы прям по красоте 1С код был.

Папку с плагином закинуть в папку <ваша база знаний>\.obsidian\plugins\, затем включить в настройках.
Прикрепленные файлы:
bsl-syntax-highlight.7z
atatarikov1; Student1C; friskdb; Mistrall; +4 Ответить
46. Kyrales 145 14.02.24 23:42 Сейчас в теме
(45)

Попробовал и не работает в режиме редактирования. Может чего еще потыкать надо?
47. GeraltSnow 176 06.03.24 15:36 Сейчас в теме
(46) Тоже столкнулся с такой проблемой. Выяснил, что плагин чувствителен к регистру названия языка из заголовка блока кода. Так что нужно писать ```bsl, а не ```BSL, чтобы подсветка активировалась. Если хочется второй вариант - нужно переписать в main.js строку

CodeMirror.defineMode("bsl", function(conf, parserConf) { 


на

CodeMirror.defineMode("BSL", function(conf, parserConf) {
49. Student1C 58 07.05.24 10:17 Сейчас в теме
(45) Почему то комментарии не окрашивает, цвета директив компиляции тоже.
50. vidostreif 21.07.24 16:51 Сейчас в теме
(45) Взял за основу ваш плагин и сделал доработки. Как и в оригинальном плагине, редактирование css файла ни к чему не приводило.
Переписал стили, что бы они срабатывали. Заменил название стилей в js коде на те, что мне показались более логичны. Подобрал цвета под темную тему (theme-dark) и создал отдельные стили с оригинальными цветами для светлой темы (theme-light). Все лишние стили удалил для удобства редактирования.
Как бонус - добавил возможность изменять цвет для свойств.
Прикрепленные файлы:
bsl-syntax-highlight.zip
ABudnikov; leosoft; sergei_tekh; +3 Ответить
52. vidostreif 22.07.24 12:46 Сейчас в теме
(50) Отмечу, что плагин работает только с ключевым словом bsl
ABudnikov; +1 Ответить
48. Kyrales 145 13.03.24 20:42 Сейчас в теме
(47) да, заработало. Спасибо
51. andrej999 22.07.24 08:09 Сейчас в теме
(50) Спасибо все отлично работает, а то методами из статьи тоже не мог раскрасить код 1С.
vidostreif; +1 Ответить
53. leosoft 167 24.09.24 19:39 Сейчас в теме
(50) Спасибо, все заработало! Только я не понял - как воспользоваться бонусом для изменения цвета для свойств,
У плагина вроде нет настроек?
54. Artem-B 103 05.12.24 11:56 Сейчас в теме
Никита Федькин добавил в подсветку синтаксиса 1С в библиотеку Shiki
Теперь достаточно установить community-плагин для Obsidian - Shiki Highlighter
Поддерживается как подсветка синтаксиса встроенного языка (```bsl), так и конкретно языка запросов (```sdbl)
dimaster; leosoft; Gesperid; +3 Ответить
Оставьте свое сообщение