Комментарии 70
<a>
, а <я>
! Anchor = якорь.А если серьезно — вопрос о том, как назвать очередную команду оказался нетривиальным. Хотелось, чтобы команды были понятными, но краткими, а иногда просто было сложно придумать русскоязычный аналог.
Например, как адекватно перевести на русский <a> и <link>? Ведь и то, и другое — ссылка.
Но ведь фактически, и то, и другое — ссылки. Как адекватно перевести названия этих команд на русский?
Возможно вы правы и такой вариант именования команд был бы более верным. Хотя я всегда думал, что <a> — это ссылка (зато теперь понятно, почему «а» — спасибо за ликбез).
Вот если бы вы изобрели трехбуквенный тег, которым можно было бы описывать страницы не хуже, чем командуют в армии...!!!)
Или как создать текстовый редактор с подсветкой синтаксиса ЯГТР. Но тут я даже не знаю с какого края ухватиться.
Для начала можно попробовать посмотреть на генераторы парсеров по грамматикам — например, на pegjs. Далее можно попробовать свои силы в написании плагина к какому-нибудь редактору. В частности, например, для NetBeans-а еще нет подсветки pegjs, а сделать ее не очень сложно. Самое интересное, что на основе примера интеграции новой подсветки языка можно реализовать подсветку грамматики pegjs с помощью самого pegjs (если сначала портировать его на java. Впрочем, можно воспользоваться и другим парсер-комбинатором, но это не так эпично)! Я и сам хочу этим заняться, но пока поглощен другим проектом.
Да, Scintilla прекрасный компонент, больше всего он мне нравится тем, что сворачивает код железно везде, а не игнорирует какие-то странные случаи, как, к сожалению делает NetBeans для Java-классов на верхнем уровне файла (кто им сказал, что их не нужно сворачивать? В одном файле, вообще-то, несколько package-private классов может быть и невозможность их свернуть очень огорчает) или MSVS (почему-то иногда не считает нужным сворачивать блоки в фигурных скобках внутри функций. Километровые if-ы и switch-и читать просто "удовольствие"). Плюс нормальные маркеры свертывания, а не как в каждой IDE изголяются кто во что горазд — то линию "от сих до сих" прячут, пока не наведешь мышь (кому она мешает?), то вместо нормальных ± какие-то стрелки понатыкают. SciTE до сих пор мой любимый редактор именно из-за этой простоты и детерминированности, всяким Sublime-ам и Atom-ам до него еще расти и расти в этом плане.
К сожалению, код Scintilla (когда я его смотрел в последний раз, но это было несколько лет назад. Зная, как не любят писать документацию к существующему коду, сомневаюсь, что что-то изменилось) практически недокументирован и разбираться в нем тяжело, да это и более низкий уровень. Вряд ли подойдет новичку.
Вы не правильно используете знак «коммерческое at», он по смыслу совсем для других целей.
Например:
мыло @ сервер
5А @ 220v
130W @ 25℃
зануда_mode_off
P.S. как и многие другие. Что за мода пошла?
ИМХО, для программирования лучше просто не использовать вовсе какой-либо второй язык — только английский.
только неудобства для зарубежных разработчиков
Не спасет именование функций латиницей, код подразумевает задачи, комментарии, документацию, обратную связь. Если нет поддержки по всем фронтам, то это все равно не интернациональный проект, а значит, аргумент отклоняется.
Важнее было прокачать навыки программирования, а тут просто попалась на глаза интересная идея.
\пар(Этот текст ( будет \ж(полужирным), а этот - \к(курсивом))
\пар(Этот текст \пар( будет \ж(полужирным), а этот - \к(курсивом))
Для создания редактора с подсветкой синтаксиса ЯГТР, можно использовать библиотеку wx там есть достаточно мощный редактор кода Scintilla:
А это пример кода с аналогичным функционалом на lua:
utf8=require'lua-utf8'
s=[[\пар(Этот текст будет \ж::class='bold'::(полужирным), а этот - \к(курсивом)\изо`align='center'`)]]
--хеш для тегов с телом
local complex_tags = {
['пар']='p', ['ж']='b', ['к']='i'
}
--хеш для тегов без тела
local simple_tags = {
['бр']='br', ['изо']='img'
}
--паттерны для разбора тегов, без начального символа "\"
local complex_tag_pattern = [[:?:?([^:%)%(\]*):?:?(%b())]]
local simple_tag_pattern = [[:?:?([^:%)%(\]*):?:?]]
--рекурсивная функция в которой все и происходит
local function pp(str)
--обрабатываем теги без тела
for ya_tag, html_tag in pairs(simple_tags) do
str=utf8.gsub(str, [[\]]..ya_tag..simple_tag_pattern,
function(attrs)
local s = '<'..html_tag
if #attrs>0 then s=s..' '..attrs end
s=s..'>'
return s
end)
end
--тоже но уже для тегов с телом
for ya_tag, html_tag in pairs(complex_tags) do
str=utf8.gsub(str, [[\]]..ya_tag..complex_tag_pattern,
function(attrs, body)
local s = '<'..html_tag
if #attrs>0 then s=s..' '..attrs end
s=s..'>'..pp(utf8.sub(body, 2, -2))..'</'..html_tag..'>'
return s
end)
end
return str
end
--выводим результат
print(pp(s))
А как насчет экранирования, например когда код на подобии такого:
\пар(Этот текст ( будет \ж(полужирным), а этот — \к(курсивом))
Для экранирования используется \ — так, чтобы ввести символ "(" нужно писать \(
\пар(Этот текст \пар( будет \ж(полужирным), а этот — \к(курсивом))
А в данном случае компилятор выдаст ошибку — для внешнего
\пар
не будет найдена закрывающая ")".По поводу примера: с lua не знаком, ничего сказать не могу. Но могу сказать, что сначала тоже думал использовать регулярные выражения, но не осилил.
Можно, например, взять другую систему выравнивания. К примеру Android. Но только меня беспокоит, что требования заказчиков превратят лаконичную нерекурсивную разметку обратно в Html.
<html>
Насчет pre можно использовать подход LaTeX, ну или похожий на него
\начало пфт
Текст Предварительно Форматированного Текста
Следующая строка
\конец пфт
\команда::аргументы::(текст)
, а подход латеха сильно отличается.Ну если стандарт позволит то можно попробовать так:
\пфт(
Многострочный текст,
здесь
monospace
)
\)
. Вопрос следующий: если я захочу вставить символ ")" внутри команды
\пфт
, мне ставить перед ним "\"? Если да, то какой же это преформатированный текст? А если нет, то как определить конец команды?Ну да, в контексте \команда::аргументы::(текст)
это сложно реализовать, нужно придумывать многострочный вариант команды, как в первом комментарии. Получается такой блок, где все аттрибуты также наследуются
\начало пфт— это почти то же самое, что и пара
Текст Предварительно Форматированного Текста
Следующая строка
\конец пфт
::
, только здесь начало и конец отличаются, а случае с ::
, они являются признаком и начала, и конца.Он даже в байт-код (я такого слова еще не знал) компилировался, чтобы не разбирать его при каждом запуске.
Даже скриптов понаписывал на нем. Эх, если бы я тогда учился где-то у нормальных преподов, может и вышел бы из меня толк.
Целые трактаты писал, было время и желание, сейчас так делать уже лень :-)
https://github.com/hiddenman/pointmaster/blob/master/trunk/utf8/script/example.pms
Как я создавал убийцу HTML