<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ars Longa, Vita Brevis &#187; WP CodeBox</title>
	<atom:link href="http://blog.sjinks.pro/tag/wp-codebox/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Обновление для CodeColorer 0.6.0</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/221-update-for-codecolorer-060/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/221-update-for-codecolorer-060/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 21:47:25 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[CodeBox]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>
		<category><![CDATA[разметка]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=221</guid>
		<description><![CDATA[Исправляем ошибки в CodeColorer 0.6.0 Стараниями Дмитрия Лялина я узнал про еще один плагин WordPress для подсветки синтаксиса&#160;&#8212;&#160;CodeColorer. Как и многие другие плагины (напрмер, WP CodeBox Эрика Вонга или мой CodeBox), CodeColorer использует в качестве движка библиотеку GeSHi. Несмотря на то, что в readme.txt CodeColorer'а утверждается, что генерирует он валидную XHTML-разметку, на самом деле это [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/221-update-for-codecolorer-060/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправляем ошибки в CodeColorer 0.6.0</em></h2>
<p><a href="http://dimox.name/xhtml-validation-using-javascript-flash-noindex/#comment-4107" rel="nofollow">Стараниями</a> <a href="http://dimox.name/" rel="nofollow">Дмитрия Лялина</a> я узнал про еще один <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> для подсветки синтаксиса&nbsp;&mdash;&nbsp;<a href="http://kpumuk.info/projects/wordpress-plugins/codecolorer">CodeColorer</a>. Как и многие другие плагины (напрмер, <a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/" rel="nofollow">WP CodeBox</a> Эрика Вонга или мой <a href="http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/">CodeBox</a>), CodeColorer использует в качестве движка библиотеку <abbr title="Generic Syntax Highlighter">GeSHi</abbr>.<span id="more-221"></span></p>
<p>Несмотря на то, что в <code>readme.txt</code> CodeColorer'а утверждается, что генерирует он валидную <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>-разметку, на самом деле это не так. Например, для блока</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2213">
        <div class="code html" id="p221code3">
[cc lang=&quot;html&quot; line_numbers=&quot;1&quot;]<br />
&nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">style</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; /* <span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span> *<span class="sy0">/</span></span><br />
<span class="sc2"> &nbsp; &nbsp; &nbsp;.<span class="kw3">style</span> <span class="br0">&#123;</span>margin: <span class="nu0">0</span>; padding: <span class="nu0">0</span><span class="br0">&#125;</span></span><br />
<span class="sc2"> &nbsp; &nbsp; &nbsp;<span class="sy0">/</span>* <span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span> */<br />
&nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">style</span>&gt;</span><br />
[cc]
        </div>
    </div>
</div>

<p>была сгенерирована такая <a href="http://blog.sjinks.pro/tag/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a> (для удобства восприятия я её немного переформатировал):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2214">
        <div class="code html" id="p221code4">
<span class="sc2">&lt;<span class="kw2">ol</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;li1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;de1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;sc2&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw2&quot;</span>&gt;</span><span class="sc1">&amp;lt;</span>style<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span> <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw3&quot;</span>&gt;</span>type<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>=<span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;st0&quot;</span>&gt;</span>&quot;text/css&quot;<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw2&quot;</span>&gt;</span><span class="sc1">&amp;gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;li1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;de1&quot;</span>&gt;</span>/* <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;sc2&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw2&quot;</span>&gt;</span><span class="sc1">&amp;lt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>!<span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>[<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>CDATA<span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>[<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span> */<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;li1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;de1&quot;</span>&gt;</span>.<span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw3&quot;</span>&gt;</span>style<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>{<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>margin: <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;nu0&quot;</span>&gt;</span>0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>; padding: <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;nu0&quot;</span>&gt;</span>0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>}<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;li1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;de1&quot;</span>&gt;</span>/* <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>]<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;br0&quot;</span>&gt;</span>]<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw2&quot;</span>&gt;</span><span class="sc1">&amp;gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span> */<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;li1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;de1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;sc2&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;kw2&quot;</span>&gt;</span><span class="sc1">&amp;lt;</span>/style<span class="sc1">&amp;gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ol</span>&gt;</span>
        </div>
    </div>
</div>

<p>В представленном дереве отчётливо видны вложенные элементы <code>span</code>, что, с точки зрения спецификации (X)<a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a>, недопустимо.</p>
<p>Дмитрий написал, что <q cite="http://dimox.name/xhtml-validation-using-javascript-flash-noindex/#comment-4107">[плагин] давно не обновляется</q>, поэтому я решил взять инициативу в свои руки и написать первое обновление для плагина.</p>
<p>В дальнейшем планирую добавить поддержку синтаксиса CodeColorer в <a href="http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/"><strong>CodeBox</strong></a> и забыть про CodeColorer <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Но пока руки до этого не дошли, можно <strong><a href="http://d.sjinks.pro/wordpress/codecolorer-0.6.0.1.zip" rel="nofollow">скачать обновление CodeColorer</a></strong>. Кодовая версия обновления&nbsp;&mdash;&nbsp;0.6.0.1. Надеюсь, что автор не против <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/221-update-for-codecolorer-060/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/221-update-for-codecolorer-060/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CodeBox 0.5 для WordPress</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 20:59:43 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[CodeBox]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=204</guid>
		<description><![CDATA[Плагин для подсветки синтаксиса на основе GeSHi. В статье «CodeBox: подсветка синтаксиса для WordPress» я говорил, что вместо того, чтобы постоянно исправлять старые и новые баги в плагине WP CodeBox, я сделал форк, который будет жить своей жизнью, но при этом будет совместимым с WP CodeBox, чего бы Eric Wang там ни творил. Обещания, как [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em><a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">Плагин</a> для подсветки синтаксиса на основе GeSHi.</em></h2>
<p>В статье <strong>«<a href="http://blog.sjinks.pro/php/177-codebox-syntax-highlight-for-wordpress/">CodeBox: подсветка синтаксиса для WordPress</a>»</strong> я говорил, что вместо того, чтобы постоянно исправлять старые и новые баги в плагине <a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/" rel="nofollow">WP CodeBox</a>, я сделал форк, который будет жить своей жизнью, но при этом будет совместимым с WP <a href="http://blog.sjinks.pro/tag/codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CodeBox">CodeBox</a>, чего бы Eric Wang там ни творил.</p>
<p>Обещания, как говорится, нужно держать <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Сегодня у меня выдались пять часов свободного времени, и я занялся доработкой/исправлением плагина. Фактически, из исходного кода остались только имена параметров, всё остальное было переписано в «<a href="http://blog.sjinks.pro/humour/76-programmers-russian-indian-chinese-canadian/">родном, мудром, обьектно-ориентированном</a>» стиле.</p>
<p>В результате получился <strong>CodeBox 0.5</strong> (функционально соответствующий WP&nbsp;CodeBox&nbsp;1.2.2.1). К версии&nbsp;1.0 планирую довести до ума поддержку TinyMCE (в своё время несовместимость WP&nbsp;CodeBox с TinyMCE привела к тому, что я не использую <abbr title="What You See Is What You Get">WYSIWYG</abbr>), поменять кое-что в <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>, добавить новые опции и т.п. Поддержка интернационализации уже есть, осталось заняться переводом <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Как говорится, планов очень много, где бы время взять?</p>
<p><strong><a href="http://d.sjinks.pro/wordpress/codebox.zip">Скачать CodeBox 0.5 для WordPress</a>.</strong></p>
<p>PS — по сравнению с предыдущей версией, плагин «похудел» практически на 200 килобайт. Работа идёт!</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/204-codebox-05-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>CodeBox: подсветка синтаксиса для WordPress</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/177-codebox-syntax-highlight-for-wordpress/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/177-codebox-syntax-highlight-for-wordpress/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 18:43:41 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[CodeBox]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=177</guid>
		<description><![CDATA[Усоврешенствованный клон WP-CodeBox Наверное, многие знают о плагине WP-CodeBox, написанном Eric Wang. Данный плагин provides clean syntax highlighting and AJAX advanced features for embedding source code within pages or posts, то есть всё то, что нужно блоггеру, который часто постит код. Для подсветки синтаксиса используется GeSHi. Я пользуюсь плагином около трёх месяцев и при этом [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/177-codebox-syntax-highlight-for-wordpress/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Усоврешенствованный клон WP-<a href="http://blog.sjinks.pro/tag/codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CodeBox">CodeBox</a></em></h2>
<p>Наверное, многие знают о плагине WP-CodeBox, написанном Eric Wang. Данный <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> <q>provides clean syntax highlighting and AJAX advanced features for embedding source code within pages or posts</q>, то есть всё то, что нужно блоггеру, который часто постит код. Для подсветки синтаксиса используется <a href="http://qbnz.com/highlighter" rel="nofollow"><abbr title="Generic Syntax Highliter">GeSHi</abbr></a>.<span id="more-177"></span></p>
<p>Я пользуюсь плагином около трёх месяцев и при этом не смотрю на него сквозь розовые очки: неоднократно я уже писал патчи, исправляющие ту или иную ошибку в коде:</p>
<ul>
<li><strong><a href="http://blog.sjinks.pro/html/39-wp-codebox-and-valid-xhtml/">Патч для WP CodeBox для Valid XHTML</a></strong>;</li>
<li><strong><a href="http://blog.sjinks.pro/javascript/32-wp-codebox-and-prototype/">WP CodeBox и Prototype</a></strong>;</li>
<li><strong><a href="http://blog.sjinks.pro/html/39-wp-codebox-and-valid-xhtml/">WP CodeBox 1.1 и Valid XHTML</a></strong>.</li>
</ul>
<p>Но не успел я поправить версию&nbsp;1.2.2, как вышла версия&nbsp;1.2.2.1, использующая более новую версию GeSHi (что я, кстати, поправлял в своём блоге еще в&nbsp;1.2.1).</p>
<p>Устав исправлять старые и новые ошибки, я решил переработать код плагина. В результате изменений:</p>
<ul>
<li>генерируемый <a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a>-код стал более осмысленным и компактным;</li>
<li>генерируемый HTML-код не содержит таблиц, ибо табличных данных нет;</li>
<li>HTML-код использует классы, нежели инлайновые стили: во-первых, это делает исходник более читабельным, а во-вторых, для больших блоков кода очевидно значительное уменьшение размера страницы;</li>
<li><a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a>-код не изобретает велосипед: функциональность, поддерживаемая GeSHi, в коде плагина не дублируется (смысл ее дублировать?);</li>
<li>проведён рефакторинг PHP-кода: <code>ereg()</code> заменен <code>stripos()</code> (а затем вообще удалён), исправлена <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a> в регулярном выражении, из-за чего загрузка файлов могла не работать, исправлены потенциальные XSS-дыры, вместо <code>htmlspecialchars()</code> используется <code>wp_specialchars()</code></li>
<li><a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a> <a href="http://blog.sjinks.pro/javascript/32-wp-codebox-and-prototype/"><strong>не конфликтует с Prototype/LightBox/ProtoBox</strong></a>;</li>
<li>генерируемый <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>-код большей частью валиден (на данный момент я еще не весь код просмотрел);</li>
<li>в GeSHi добавлена поддержка еще нескольких языков и внесены коррекции в существующие модули;</li>
<li>явно было что-то еще, но я уже не помню <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>В общем, я принял героическое решение, что я сам буду поддерживать полученный код и развивать его (фактически, я создал новый форк от WP-CodeBox). С названием я не определился, пока будет называться просто CodeBox, а там посмотрим. Обратную совместимость я постараюсь сохранить.</p>
<p>Если кто-то будет данный пост читать <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , пишите отзывы и пожелания!</p>
<p><a href="http://d.sjinks.pro/wordpress/codebox.zip"><strong>Скачать CodeBox</strong></a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/177-codebox-syntax-highlight-for-wordpress/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/177-codebox-syntax-highlight-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WP CodeBox 1.1 и Valid XHTML</title>
		<link>http://blog.sjinks.pro/wordpress/patches/39-wp-codebox-and-valid-xhtml/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/39-wp-codebox-and-valid-xhtml/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 07:06:48 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/html/39-wp-codebox-and-valid-xhtml/</guid>
		<description><![CDATA[Рецепт, как заставить WP CodeBox 1.1 генерировать валидный XHTML-код Ранее я рассматривал проблему генерации невалидирующегося кода плагином WP CodeBox. Недавно вышла новая версия плагина, но проблемы остались. И добавились новые. Скачать патч в формате unified diff. © 2012 Ars Longa, Vita Brevis. Все права защищены. Перепубликация материалов без разрешения автора запрещена. При использовании материалов блога [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/39-wp-codebox-and-valid-xhtml/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Рецепт, как заставить <a href="http://blog.sjinks.pro/tag/wp-codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WP CodeBox">WP CodeBox</a> 1.1 генерировать валидный <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>-код</em></h2>
<p><a href="http://blog.sjinks.pro/php/13-patch-for-wp-codebox-for-valid-xhtml/">Ранее</a> я рассматривал проблему генерации невалидирующегося кода плагином WP <a href="http://blog.sjinks.pro/tag/codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CodeBox">CodeBox</a>. Недавно вышла новая версия плагина, но проблемы остались. И добавились новые.</p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2008/03/wp-codebox-11-patch.zip' title='wp-codebox-11-patch.zip'>Скачать патч в формате unified diff</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/39-wp-codebox-and-valid-xhtml/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/39-wp-codebox-and-valid-xhtml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WP CodeBox и Prototype</title>
		<link>http://blog.sjinks.pro/wordpress/patches/32-wp-codebox-and-prototype/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/32-wp-codebox-and-prototype/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 16:11:10 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/javascript/32-wp-codebox-and-prototype/</guid>
		<description><![CDATA[Решение, позволяющее совместно использовать на одном сайте плагин WP&#160;Codebox и известную библиотеку Prototype Намедни пришлось заставлять работать скрипт, использующий библиотеку Prototype, на сайте с WordPress, где стоял плагин WP&#160;CodeBox (ранее я уже писал о нём). Сразу обратил внимание, что всё работало как-то криво, выскакивала куча непонятных ошибок. Лишь позже, просмотрев весь JavaScript, я понял, в [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/32-wp-codebox-and-prototype/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Решение, позволяющее совместно использовать на одном сайте <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> WP&nbsp;<a href="http://blog.sjinks.pro/tag/codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CodeBox">Codebox</a> и известную библиотеку <a href="http://blog.sjinks.pro/tag/prototype/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Prototype">Prototype</a></em></h2>
<p>Намедни пришлось заставлять работать скрипт, использующий библиотеку Prototype, на сайте с <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>, где стоял плагин WP&nbsp;CodeBox (<a href="http://blog.sjinks.pro/php/13-patch-for-wp-codebox-for-valid-xhtml/">ранее </a>я уже писал о нём). Сразу обратил внимание, что всё работало как-то криво, выскакивала куча непонятных ошибок. Лишь позже, просмотрев весь <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>, я понял, в чём была проблема.<span id="more-32"></span></p>
<p>В файле /wp-content/plugins/wp-codebox/js/codebox.js есть три магические строчки:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p327">
        <div class="code javascript" id="p32code7">
<span class="kw2">function</span> $<span class="br0">&#40;</span>id<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Эта функция конфликтует с одноимённой функцией из Prototype (причём последняя имеет гораздо больше возможностей). Решается всё просто:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p328">
        <div class="code javascript" id="p32code8">
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="st0">'undefined'</span> <span class="sy0">==</span> <span class="kw1">typeof</span> $<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> $<span class="br0">&#40;</span>id<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Жаль только, что на поиски бага ушло много времени&hellip;</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/32-wp-codebox-and-prototype/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/32-wp-codebox-and-prototype/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Патч для WP CodeBox для Valid XHTML</title>
		<link>http://blog.sjinks.pro/wordpress/patches/13-patch-for-wp-codebox-for-valid-xhtml/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/13-patch-for-wp-codebox-for-valid-xhtml/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 06:52:49 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP CodeBox]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/php/13-patch-for-wp-codebox-for-valid-xhtml/</guid>
		<description><![CDATA[Как научить WP CodeBox генерировать правильную разметку Иногда встречаются люди, повёрнутые на валидности (X)HTML/CSS. Что уж греха таить, я и сам такой временами Для подсветки синтаксиса я пользуюсь плагином WP-CodeBox. Хорошая вещь, но у него есть один маленький недостаток: разметка, которую он генерирует (и CSS, который он использует, но это другая история), не валидируется. Проблема [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/13-patch-for-wp-codebox-for-valid-xhtml/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как научить <a href="http://blog.sjinks.pro/tag/wp-codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WP CodeBox">WP CodeBox</a> генерировать правильную разметку</em></h2>
<p>Иногда встречаются люди, повёрнутые на валидности (X)<a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a>/CSS. Что уж греха таить, я и сам такой временами <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Для подсветки синтаксиса я пользуюсь плагином WP-<a href="http://blog.sjinks.pro/tag/codebox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CodeBox">CodeBox</a>. Хорошая вещь, но у него есть один маленький недостаток: <a href="http://blog.sjinks.pro/tag/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a>, которую он генерирует (и CSS, который он использует, но это другая история), не валидируется.<span id="more-13"></span></p>
<p>Проблема в том, что в генерируемом коде</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1310">
        <div class="code xhtml" id="p13code10">
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;right&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;###&quot;</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;smalltxt&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;copycode($('9code2'));&quot;</span>&gt;</span>[Copy to clipboard]<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;smalltxt&quot;</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;###&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;toggle_collapse('92');&quot;</span>&gt;</span>[<span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;92_symbol&quot;</span>&gt;</span>-<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>]<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;left&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;l9code2&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;javascript:showCodeTxt('9code2'); return false;&quot;</span>&gt;</span>View Code<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span>MYSQL<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
        </div>
    </div>
</div>

<p>идентификаторы элементов начинаются с цифры (&lt;span id="92_symbol"&gt;, &lt;tr class="msgborder" id="92"&gt;, &lt;td class="code" id="9code2"&gt;), что строго запрещено спецификацией <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>.</p>
<p>Когда мне в очередной раз надоело смотреть на то, что <a href="https://addons.mozilla.org/en-US/firefox/addon/249">HTML Validator</a> (кстати, хороший extension) в FireFox показывает красный крест, я решил исправить это безобразие, благо, что лечится довольно легко и быстро.</p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2008/03/mainphp.diff' title='mainphp.diff'>Скачать патч в формате unified diff</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/13-patch-for-wp-codebox-for-valid-xhtml/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/13-patch-for-wp-codebox-for-valid-xhtml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

