Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как работает подсветка синтаксиса? (https://javascript.ru/forum/events/44142-kak-rabotaet-podsvetka-sintaksisa.html)

Hapson 08.01.2014 17:05

Как работает подсветка синтаксиса?
 
Всем привет!
Вопрос такой: как работают библиотеки подсветки синтаксиса?
Перепробовал уже несколько библиотек - все работает, но вот в принципе их работы никак не могу разобраться.

В целях учебы решил написать свой небольшой парсер для php кода.
Делаю так:

1) код отрисовывается в <pre class="php">...</pre>
2) нахожу этот тег и беру у него pre.textContent
3) дальше при помощи str.replace ищу например переменные и обрамляю их в <span class="phpVar">переменная</span>
4) в итоге получаю строку в которой все переменные помещены в спаны

И вот тут у меня затык. По идее, я этой строкой должен заменить содержимое pre с кодом. Но как это сделать?
Если очистить тег pre и добавить строку через createTextNode, то все теги span видны как есть. Поэтому приходится очищать исходный тег и делать в него innerHTML.

Другого варианта не вижу. Только если парсить получившуюся строку и добавлять ее как положено в дерево.

Vlasenko Fedor 08.01.2014 17:16

Вложений: 1
В php есть встроенная подсветка кода можете использовать ее
Прикрепил файл

Hapson 08.01.2014 17:31

Poznakomlus,
Я знаю, про эту функцию. Вопрос в реализации на JS - как правильно заменить исходный код подсвеченным.

Vlasenko Fedor 08.01.2014 17:46

регулярные выражения и строковые функции никто не отменял
совет не занимайтесь велосипедом
возьмите уже готовые и оттестированные решения highlight code js in Google

Hapson 08.01.2014 17:49

Poznakomlus,
Ну написал же...
Цитата:

Перепробовал уже несколько библиотек - все работает, но вот в принципе их работы никак не могу разобраться.
Цитата:

В целях учебы решил написать свой небольшой парсер для php кода.

Hapson 08.01.2014 17:50

Цитата:

Сообщение от Poznakomlus
регулярные выражения и строковые функции никто не отменял

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

рони 08.01.2014 17:51

Hapson,
вариант ... jQuery highlight plugin — поиск и подсветка слов в тексте

Hapson 08.01.2014 17:59

Хорошо, задам вопрос иначе...
Есть строка
"&lt;?php <span style="color:#00F">$var</span> = <span style="color:#F00">&quot;string&quot;</span>; <span style="color:#00F">$str</span> = <span style="color:#F00">&quot;&lt;str&gt;&quot;</span>; ?&gt; "


Как ее вставить в <pre>сюда</pre>, чтобы теги span выполняли свою задачу, а не вставлялись как есть

Vlasenko Fedor 08.01.2014 18:20

<style>
    pre {
      white-space:normal;
    }
  </style>
    <pre>"&lt;?php
      <span style="color:#00F">$var</span>=
      <span style="color:#F00">&quot;string&quot;</span>;
      <span style="color:#00F">$str</span>=
      <span style="color:#F00">&quot;&lt;str&gt;&quot;</span>; ?&gt; "</pre>

вы про white-space?

Hapson 08.01.2014 18:34

Poznakomlus,
Вот к примеру, я нашел тег pre, из которого взял вот такую строку
"<?php\n$var = "string";\n?>\n"

Я преобразовал ее в:
"&lt;?php <span style="color:#00F">$var</span> = <span style="color:#F00">&quot;string&quot;</span>; ?&gt; "


Теперь мне нужно очистить тег pre - это не проблема.
Дальше нужно эту строку вставить в тег pre, но чтобы теги span раскрашивали текст, а не вылезали как есть


Часовой пояс GMT +3, время: 08:31.