Подсветка кода

Код почему-то по-разном подсвечивается:

VertexShader.glsl

#version 110

attribute vec2 position;

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

void main()
{
	gl_Position = projectionMatrix * viewMatrix * vec4(position, 0.0, 1.0);
}

FragmentShader.glsl

#version 110

void main()
{
	gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

В первом hljs не тот язык автораспознал.

Можно самому указать

```cs
1 лайк

Где можно посмотреть, какому языку, что соответствует. Например, что “py” - это python, а “glsl” - это GLSL. Так-то код на GLSL, а не на C#. Можно и как “cpp” писать. Я поискал в спецификации языка MarkDown, но не нашёл.

Там много синонимов, скорее всего сработает любое популярное имя языка.

А так в консоли hljs.listLanguages().sort().join('\n')

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

1 лайк

Здесь есть glsl.js, но почему-то не срабатывает

а, тут в админке есть список языков.

Я думал это только для авто.

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

На ПФ я еще доделывал ограничение языков в авто в зависимости от раздела, чтоб улучшить качество определения.

Да, на КиберФоруме есть тег [glsl][/glsl], который позволяет подсвечивать код на языке GLSL. На Discourse, конечно, можно просто выделить код и нажать кнопку, но будет без подсветки, либо “cs” или “cpp” писать.

странно, там простого js нет, хотя он тоже работает:

class Moshev_PFConsts {
  // Это просто URL картинки-лоадера
  static get PATH_TO_LOADER_ICON() {
    return '/images/misc/progress.gif'
  }

  // ==========================================================================

  // Функция перенумеровывает все посты на странице по порядку, начиная с номера,
  // переданного в аргументе
  static renumberPosts(aStart = 1) {
    if (typeof aStart !== 'number') {
      throw new TypeError('Аргумент функции renumberPosts должен быть числом.')
    }

    const hyperReferencesWithPostNumbers = document.querySelectorAll('a[id^="postcount"]');
    for (let i = 0, newNumber = aStart; i < hyperReferencesWithPostNumbers.length; i++) {
      const currentHyperReference = hyperReferencesWithPostNumbers[i];

      currentHyperReference.setAttribute('name', newNumber);
      currentHyperReference.href = currentHyperReference.href.replace(/postcount=\d+/, `postcount=${newNumber}`);
      currentHyperReference.querySelector('strong').textContent = newNumber;

      newNumber++;
    }
  }

  // ==========================================================================

  // Для сообщения, имя автора которого передано в aUserName, устанавливаются
  // признаки блокировки пользователя в соответствии с настройками форума:
  // — удаляется аватар;
  // — устанавливается статус «Заблокирован», все остальные статусы удаляются;
  // — удаляется подпись.
  static setSuspendedStatusToUsername(aUserName) {
    const
      STATUS                          = 'Заблокирован',
      SMALLFONT_CLASS_SEARCH_SELECTOR = 'table[id^="post"] tr:nth-child(2) td:first-child div.smallfont',
      SINGATURE_BLOCK_SEARCH_SELECTOR = 'td[id^="td_post_"] div.signature';

    if (typeof aUserName !== 'string') {
      throw new TypeError('Аргумент функции setSuspendedStatusByUsername должен быть строкой.')
    }

    if (posts === null) {
      throw new TypeError('Контейнер с сообщениями не обнаружен на текущей странице.')
    }

    let userPosts = posts.querySelectorAll('div[align="center"]');
    let currentUserSmallfontElements;

    userPosts = Array.prototype.slice.call(userPosts);
    userPosts
      .filter(aCurrentPost => {
        let userNameContainer = aCurrentPost.querySelector('.bigusername');
        return userNameContainer !== null && userNameContainer.textContent === aUserName
      }).forEach(aCurrentPost => {
          currentUserSmallfontElements = aCurrentPost.querySelectorAll(SMALLFONT_CLASS_SEARCH_SELECTOR);
          if (currentUserSmallfontElements.length === 1) {
            let theOnlySmallfont = currentUserSmallfontElements[0];

            let suspendedCaption = document.createElement('div');
            suspendedCaption.classList.add('smallfont');
            suspendedCaption.textContent = STATUS;

            theOnlySmallfont.parentNode.insertBefore(suspendedCaption, theOnlySmallfont);
          } else {
            currentUserSmallfontElements[0].textContent = STATUS;
            for (let i = currentUserSmallfontElements.length - 2; i > 0 ; i--) {
              currentUserSmallfontElements[i].remove()
            }
          }

          // удалить подпись
          let signature = aCurrentPost.querySelector(SINGATURE_BLOCK_SEARCH_SELECTOR);
          if (signature !== null) {
            signature.remove()
          }
      });
  }
}

А будет ли какая нибудь обработка синтаксиса кода?? Хоть какой нибудь тег чтобы отделить код от основного текста? А то все как то некрасиво выглядит.

Оно есть FAQ, отличия от классических форумных движков

Ну то есть руками теги прописывать? Кнопки то в редакторе я не нашел. Или плохо смотрю?

Есть кнопка </>, но там оказывается не было автоопределения языка, включил опцию

И еще поменял её поведение с добавления 4 пробелов на три ` потому что с пробелами нужно самому добавить пустую строку между текстом и кодом
и сложнее указать язык вручную (дописать ```php)

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

Кстати, если нужен блок кода без подсветки — можно использовать ```text


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

Тут всплывающее окошко говорит что эта кнопка вставляет текст как есть, без форматирования.

public void Start(string ServerName)
        {
            running = true;
            server = new TcpListener(lIp, port);
            server.Start();
            Listener = new Thread(Listen) { IsBackground = true, Priority = ThreadPriority.Normal, Name = ServerName };
            Listener.Start();
        }

Чего то под шарп не раскрасил. Или надо как то по другому имя задать?

Раскрасил, может быть просто цвет непривычный.

Для C# проще писать cs, но тут и без указания определяет.

Там наверно в первую очередь речь об обычном форматировании типа жирный/курсив.
Ну и если применять к —> части одной строки <—, то там и подсветки не будет.

А у меня черная тема. Тут немного отличается. Да и поставил cs и не раскрасило по человечески.

Ну оно минималистичное, не как в VS )
Некоторые вещи вроде нельзя выделить, например, имена классов внутри выражений. Тут же не полноценный парсер как в IDE.

CSS подсветки можно поменять (например на основе готовых отсюда https://highlightjs.org, переключаются кликом по имени), но сложность в том, что надо учитывать светлую и темную схемы. Или может быть просто два разных, для светлой и темной.
На Стековерфлоу вроде цвета почти как в VS, на сером фоне как тут.
На форуме Алара было примерно как тут с немного другими цветами. Даже меньше выделений, без имен функций.