Комментарии 17
> Переписать его было практически невозможно, т.к. он относится к ядру движка. Миллионы страниц Википедии могли полететь в один момент, если бы в каком-то месте нового кода произошла ошибка.
Довольно странный аргумент.
Статья не оформлена как перевод.
А где ссылка на сам парсер?
Довольно странный аргумент.
Статья не оформлена как перевод.
А где ссылка на сам парсер?
Спасибо за замечания.
Я добавила ссылки на документацию к парсеру и текущий релиз Mediawiki в начале статьи. На всякий случай привожу их здесь:
svn.wikimedia.org/doc/classParser.html — документация к классу Parser
www.mediawiki.org/wiki/Download — текущий релиз Mediawiki
Что касается ошибки оформления — я пробую её исправить, но безуспешно. Тип существующей статьи, похоже изменить нельзя — только убирать эту и создавать новую. Но ведь её уже кто-то добавил в избранное — и ссылка будет не работать… Подскажете, как исправить ситуацию?
Забавно, что в данном случае возникает намек на ту же проблему, что и в процитированном тексте. Вот его оригинал:
Rewriting it was made almost impossible by the fact that it was so essential to the software. Millions of pages on Wikipedia could have easily been made garbldy-gook in an instant if changes were not handled correctly.
Мой перевод был, возможно, слишком вольным. Здесь, видимо, имеется в виду больше не проблема случайного бага, а непродуманный отказ от поддержки какой-нибудь из устаревших функций или синтаксических конструкций викитекста.
Я добавила ссылки на документацию к парсеру и текущий релиз Mediawiki в начале статьи. На всякий случай привожу их здесь:
svn.wikimedia.org/doc/classParser.html — документация к классу Parser
www.mediawiki.org/wiki/Download — текущий релиз Mediawiki
Что касается ошибки оформления — я пробую её исправить, но безуспешно. Тип существующей статьи, похоже изменить нельзя — только убирать эту и создавать новую. Но ведь её уже кто-то добавил в избранное — и ссылка будет не работать… Подскажете, как исправить ситуацию?
Забавно, что в данном случае возникает намек на ту же проблему, что и в процитированном тексте. Вот его оригинал:
Rewriting it was made almost impossible by the fact that it was so essential to the software. Millions of pages on Wikipedia could have easily been made garbldy-gook in an instant if changes were not handled correctly.
Мой перевод был, возможно, слишком вольным. Здесь, видимо, имеется в виду больше не проблема случайного бага, а непродуманный отказ от поддержки какой-нибудь из устаревших функций или синтаксических конструкций викитекста.
Не нужно ничего менять. Администрация, по крайней мере, на сентябрь 2011, не имеет ничего против переводов, оформленных как топики. В обоих случаях для автора есть и плюсы, и минусы. Те, кто считают, что в оформлении перевода как обычного топика, есть какой-то сакральный смысл и корыстный умысел автора, должны навестить психиатра.
Сам публиковал пару переводов, вышедших в топ-1 за сутки, как топики. Меня просто засрали ЛСками с замечаниями по этому поводу. Идиоты.
Сам публиковал пару переводов, вышедших в топ-1 за сутки, как топики. Меня просто засрали ЛСками с замечаниями по этому поводу. Идиоты.
> и корыстный умысел автора
Ну как же! Вдвое больше бабла можно заработать :-)
Ну как же! Вдвое больше бабла можно заработать :-)
А, всё понятно, спасибо.
При том, что Википедия — одно из величайших изобретений, MediaWiki — угрёбищное порождение php-дегенератов.
Не верите? Цитирую небольшую программку (реальный шаблон), написанную на их markup-language:
{{rq/|{{{1|}}}|{{{nocat|}}}}}{{rq/|{{{2|}}}|{{{nocat|}}}}}{{rq/|{{{3|}}}|{{{nocat|}}}}}{{rq/|{{{4|}}}|{{{nocat|}}}}}{{rq/|{{{5|}}}|{{{nocat|}}}}}{{rq/|{{{6|}}}|{{{nocat|}}}}}{{rq/|{{{7|}}}|{{{nocat|}}}}}{{rq/|{{{8|}}}|{{{nocat|}}}}}{{rq/|{{{9|}}}|{{{nocat|}}}}}{{rq/|{{{10|}}}|{{{nocat|}}}}}{{rq/|{{{11|}}}|{{{nocat|}}}}}{{rq/|{{{12|}}}|{{{nocat|}}}}}{{rq/|{{{13|}}}|{{{nocat|}}}}}{{rq/|{{{14|}}}|{{{nocat|}}}}}{{rq/|{{{15|}}}|{{{nocat|}}}}}{{rq/|{{{16|}}}|{{{nocat|}}}}}
Всего то делает:
if exists rq/$1: include $1
if exists rq/$2: include $2
…
Не верите? Цитирую небольшую программку (реальный шаблон), написанную на их markup-language:
{{rq/|{{{1|}}}|{{{nocat|}}}}}{{rq/|{{{2|}}}|{{{nocat|}}}}}{{rq/|{{{3|}}}|{{{nocat|}}}}}{{rq/|{{{4|}}}|{{{nocat|}}}}}{{rq/|{{{5|}}}|{{{nocat|}}}}}{{rq/|{{{6|}}}|{{{nocat|}}}}}{{rq/|{{{7|}}}|{{{nocat|}}}}}{{rq/|{{{8|}}}|{{{nocat|}}}}}{{rq/|{{{9|}}}|{{{nocat|}}}}}{{rq/|{{{10|}}}|{{{nocat|}}}}}{{rq/|{{{11|}}}|{{{nocat|}}}}}{{rq/|{{{12|}}}|{{{nocat|}}}}}{{rq/|{{{13|}}}|{{{nocat|}}}}}{{rq/|{{{14|}}}|{{{nocat|}}}}}{{rq/|{{{15|}}}|{{{nocat|}}}}}{{rq/|{{{16|}}}|{{{nocat|}}}}}
Всего то делает:
if exists rq/$1: include $1
if exists rq/$2: include $2
…
Взяли бы исходники Blitz и допилили под свой синтаксис. Я думаю это вполне реально.
Можете объяснить, как этот шаблон работает? %)
Всё-таки не совсем это, а вот такие вызовы подшаблонов:
rq/(1, nocat)
rq/(2, nocat)
…
(Да, это я всё это писал.)
rq/(1, nocat)
rq/(2, nocat)
…
(Да, это я всё это писал.)
Только когда используешь всё это, другим юзерам-непрограммистам вся эта викиразметка снится в страшном сне и кажется, что всё можно было бы сделать намного проще. Но вот, что на самом деле скрывается под одной строчкой псевдокода
При всём желании на lua не получится написать изящнее, чем на python. Хотя как вспомогательный язык, lua будет хорошим дополнением.
if exists rq/$1: include rq/($1, nocat)
:if 1 in args and args[1].strip():
if exist('Шаблон:Rq/' + args[1]):
include_template('Шаблон:Rq/' + args[1], args['nocat'] if args.get('nocat', '').strip() else ''):
else:
print("<span style=\"color:#F00\">'''Неверный параметр шаблона {{tl|rq}} — ''[[Шаблон:rq/%1|%1]]''. Проверьте исходный текст и обратитесь к [[Шаблон:rq/doc|документации]].'''</span>" % args[1])
if not args.get('nocat', '').strip() and parser.namespace == 0:
print("[[Категория:Википедия:Статьи с некорректным использованием шаблона rq]]")
При всём желании на lua не получится написать изящнее, чем на python. Хотя как вспомогательный язык, lua будет хорошим дополнением.
Либо перевод неточный/неправильный, либо я что-то не понимаю. Двойной парсинг это же просто пипец как тормозно будет. Видимо всётаки они не «парсят в xml» а просто строят дом-дерево на основе лексики вики и на самом деле никакого xml нет. Есть структура в памяти.
Парсеру не нужно работать правильно, ему нужно работать правильно на всех существующих страницах. Так что можно написать новый парсер и прогнать его на всех страницах. Расхождения исправить в одном из парсеров или на странице.
Про 40000 проходов для статьи в 40000 символов я что-то не понял. Практические языки обычно парсят за линейное время. Для подстановок нужно столько проходов, какова их максимальная глубина.
Про 40000 проходов для статьи в 40000 символов я что-то не понял. Практические языки обычно парсят за линейное время. Для подстановок нужно столько проходов, какова их максимальная глубина.
> Так что можно написать новый парсер и прогнать его на всех страницах.
> Практические языки обычно парсят за линейное время.
Беда в том, что нет даже полного словесного описания грамматики, не говоря уже о формальном описании, а вносимые изменения не документируются, их просто негде документировать. Да и в целом, нет какого-то принципа согласно которому развивается язык.
Если бы это было, уже бы понаписали 9000 и 1 парсер на всяких разных языках, хотя бы один уж точно оказался удачным. А так, чёрт его знает, какого типа парсер писать, как восстановить грамматику из PHP-лапши, как это всё потом поддерживать и что делать если вдруг бравые кодеры Mediawiki внесут изменения в язык, непереносимые в наш замечательный парсер, и придётся всё начинать заново.
> Практические языки обычно парсят за линейное время.
Беда в том, что нет даже полного словесного описания грамматики, не говоря уже о формальном описании, а вносимые изменения не документируются, их просто негде документировать. Да и в целом, нет какого-то принципа согласно которому развивается язык.
Если бы это было, уже бы понаписали 9000 и 1 парсер на всяких разных языках, хотя бы один уж точно оказался удачным. А так, чёрт его знает, какого типа парсер писать, как восстановить грамматику из PHP-лапши, как это всё потом поддерживать и что делать если вдруг бравые кодеры Mediawiki внесут изменения в язык, непереносимые в наш замечательный парсер, и придётся всё начинать заново.
Ну вот, только разогнался, а тут конец поста! :)
Ранее имел опыт написания расширений MediaWiki, частично постиг творящуюся там магию, но на полное освоение меня не хватило — разбираться в возникающих в последствии странностях я не стал. :)
Ранее имел опыт написания расширений MediaWiki, частично постиг творящуюся там магию, но на полное освоение меня не хватило — разбираться в возникающих в последствии странностях я не стал. :)
Только Markdown, только хардкор!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как работает парсер Mediawiki