Как стать автором
Обновить

Комментарии 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.

Мой перевод был, возможно, слишком вольным. Здесь, видимо, имеется в виду больше не проблема случайного бага, а непродуманный отказ от поддержки какой-нибудь из устаревших функций или синтаксических конструкций викитекста.
Не нужно ничего менять. Администрация, по крайней мере, на сентябрь 2011, не имеет ничего против переводов, оформленных как топики. В обоих случаях для автора есть и плюсы, и минусы. Те, кто считают, что в оформлении перевода как обычного топика, есть какой-то сакральный смысл и корыстный умысел автора, должны навестить психиатра.
Сам публиковал пару переводов, вышедших в топ-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


Взяли бы исходники Blitz и допилили под свой синтаксис. Я думаю это вполне реально.
Можете объяснить, как этот шаблон работает? %)
Всё-таки не совсем это, а вот такие вызовы подшаблонов:

rq/(1, nocat)
rq/(2, nocat)


(Да, это я всё это писал.)
Только когда используешь всё это, другим юзерам-непрограммистам вся эта викиразметка снится в страшном сне и кажется, что всё можно было бы сделать намного проще. Но вот, что на самом деле скрывается под одной строчкой псевдокода 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 символов я что-то не понял. Практические языки обычно парсят за линейное время. Для подстановок нужно столько проходов, какова их максимальная глубина.
> Так что можно написать новый парсер и прогнать его на всех страницах.
> Практические языки обычно парсят за линейное время.

Беда в том, что нет даже полного словесного описания грамматики, не говоря уже о формальном описании, а вносимые изменения не документируются, их просто негде документировать. Да и в целом, нет какого-то принципа согласно которому развивается язык.

Если бы это было, уже бы понаписали 9000 и 1 парсер на всяких разных языках, хотя бы один уж точно оказался удачным. А так, чёрт его знает, какого типа парсер писать, как восстановить грамматику из PHP-лапши, как это всё потом поддерживать и что делать если вдруг бравые кодеры Mediawiki внесут изменения в язык, непереносимые в наш замечательный парсер, и придётся всё начинать заново.
Речь идет о том, чтобы просто убедиться, что на существующих страницах новый парсер дает в точности тот же результат, что и старый.
Ну вот, только разогнался, а тут конец поста! :)

Ранее имел опыт написания расширений MediaWiki, частично постиг творящуюся там магию, но на полное освоение меня не хватило — разбираться в возникающих в последствии странностях я не стал. :)
Только Markdown, только хардкор!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации