Посмотрел, стало немного понятнее. Но не до конца

Я вот пытаюсь немного улучшить свою подсветку markdawn, но что-то пока не очень. (а если еще и в недавно организованный стандарт смотреть, взрыв мозга гарантирован) Для примера, немного упрощенный случай:
1. *Такой текст* должен быть выделен курсивом, причем сразу после открывающей и перед закрывающей * не должно быть пробела. Регексп такой:
Code: Select all
0 "(\*(?! )[^\*]+(?<! )\*)" "\1=(3,${TAG},0)"
Code: Select all
0 "(\*\*(?! )[^\*]+(?<! )\*\*)" "\1=(2,${TAG},0)"
Code: Select all
0 "(?:(?<=\*)|(?=\*))([^\*]*+)(?:(\*\*)|(\*.+?\*))" "\1=(2,${TAG},0) \2=(2,${TAG},0) \3=(4,${TAG},0)"
Когда все три работают вместе получается так:
1) **тут *там* здесь** *где-то*
должно так:
**тут *там* здесь** *где-то*
2) ***ага***
должно так
***ага***
Мне кажется, тут дело даже в не регулярках, а в том, что на основе только одних регэкспов сложные случаи правильно в markdown не раскрасить. В программах или на сайтах, где реализована его подсветка, она сделана через программный код (javascript, Си и т.д.), то бишь через парсер. Вот как бы в сами coder-файлы добавить возможности парсера...(например, как-то передовать один паттерн в другой)