• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Модуль Типограф

Статус
В этой теме нельзя размещать новые ответы.

$aSH

Мой дом здесь!
Регистрация
3 Ноя 2006
Сообщения
536
Реакции
233
Основа взята из _http://iskariot.ru/wordpress/typo/ (Типограф для Wordpress - "ВП Типограф Фулл").
Так что (с) Сергей М.

Код адаптирован (?) для dle.

Уже ближе к полноценной интеграции

\engine\classes\parse.class.php
после
PHP:
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}
вставить
PHP:
/* типограф */
function quotes($qtxt)
{
	$quotes=array('"', '«', '»', '«', '»', '“', '„', '„', '“');
	$qtxt = str_replace($quotes, '"', $qtxt);

	$qtxt = preg_replace('/([^=]|\A)""(\.{2,4}[а-яА-Я\w\-]+|[а-яА-Я\w\-]+)/', '$1<typo:quot1>"$2', $qtxt);
	$qtxt = preg_replace('/([^=]|\A)"(\.{2,4}[а-яА-Я\w\-]+|[а-яА-Я\w\-]+)/', '$1<typo:quot1>$2', $qtxt);
	

	$qtxt = preg_replace('/([а-яА-Я\w\.\-]+)""([\n\.\?\!, \)][^>]{0,1})/', '$1"</typo:quot1>$2', $qtxt);
	$qtxt = preg_replace('/([а-яА-Я\w\.\-]+)"([\n\.\?\!, \)][^>]{0,1})/', '$1</typo:quot1>$2', $qtxt);

	$qtxt = preg_replace('/(<\/typo:quot1>[\.\?\!]{1,3})"([\n\.\?\!, \)][^>]{0,1})/', '$1</typo:quot1>$2', $qtxt);
	$qtxt = preg_replace('/(<typo:quot1>[а-яА-Я\w\.\- \n]*?)<typo:quot1>(.+?)<\/typo:quot1>/', '$1<typo:quot2>$2</typo:quot2>', $qtxt);
	$qtxt = preg_replace('/(<\/typo:quot2>.+?)<typo:quot1>(.+?)<\/typo:quot1>/', '$1<typo:quot2>$2</typo:quot2>', $qtxt);
	$qtxt = preg_replace('/(<typo:quot2>.+?<\/typo:quot2>)\.(.+?<typo:quot1>)/', '$1<\/typo:quot1>.$2', $qtxt);
	$qtxt = preg_replace('/(<typo:quot2>.+?<\/typo:quot2>)\.(?!<\/typo:quot1>)/', '$1</typo:quot1>.$2$3$4', $qtxt);
	$qtxt = preg_replace('/""/', '</typo:quot2></typo:quot1>', $qtxt);
	$qtxt = preg_replace('/(?<=<typo:quot2>)(.+?)<typo:quot1>(.+?)(?!<\/typo:quot2>)/', '$1<typo:quot2>$2', $qtxt);
	$qtxt = preg_replace('/"/', '</typo:quot1>', $qtxt);

	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);
	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);
	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);
	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);
	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);
	$qtxt = preg_replace('/(<[^>]+)<\/typo:quot\d>/', '$1"', $qtxt);

	$qtxt = str_replace('<typo:quot1>', "«", $qtxt);
	$qtxt = str_replace('</typo:quot1>', "»", $qtxt);
	$qtxt = str_replace('<typo:quot2>', "„", $qtxt);
	$qtxt = str_replace('</typo:quot2>', "“", $qtxt);

	return $qtxt;
}


function typograf($typotxt, $opt_quotes = -1, $opt_spec = -1, $opt_correct = -1)
	{
	/* ОСНОВА */
	$replace=array(
		// Знак дефиса или два-три знака дефиса подряд — на знак длинного тире.
		// + Нельзя разрывать строку перед тире
		// Добавлена обработка диалогов
		"/(\s+|^|\n|&nbsp;|(?:(?U)<.*>))(--?-?)(?=\s)/" => '$1&mdash;',

		//правим неразрывный до тире
		"(( |\s|\t|&nbsp;)+&mdash;)" => '&nbsp;&mdash;',
			
		// Знак дефиса, ограниченный с обоих сторон цифрами — на знак минуса
		'/(?<=\d)-(?=\d)/' => '&minus;',
		'/(?<=\s)-(?=\d)/' => '&minus;',
		'/(?<=\d)-(?=\s)/' => '&minus;',

/*
		//диапазоны дат?
		'/(?<=\d{4})(&minus;|-)(?=\d{4})/' => '&mdash;',
*/

		// Неразрывный пробел после инициалов.
		'~([А-ЯA-Z]\.)\s?([А-ЯA-Z]\.)\s?([А-Яа-яA-Za-z]+)~s' => '<nobr>$1$2&nbsp;$3</nobr>',
		'~([А-Яа-яA-Za-z]+)\s?([А-ЯA-Z]\.)\s?([А-ЯA-Z]\.)~s' => '<nobr>$1&nbsp;$2$3</nobr>',

/*
		// Русские денежные суммы, расставляя пробелы в нужных местах.
		'~(\d+)\s?(млн.|тыс.|млрд.)?\s?(руб.|коп.)~s'	=>	'$1&nbsp;$2&nbsp;$3',
		'~(\d+)\s?(руб.|коп.)~s'	=>	'$1&nbsp;$2',
*/

/*
		//Номер версии программы пишем неразрывно с буковкой v.
		'~([vв]\.) ?([0-9])~i' => '$1&nbsp;$2',
		'~(\w) ([vв]\.)~i' => '$1&nbsp;$2',/
*/

/*
		//до н.э, н.э, заодно фиксится пробел
		"#(\d)\s*(до)\s+(н\.э\.)#i" => "$1&nbsp;$2&nbsp;$3",
		"#\s*(и)\s+(т\.(д|п)\.)#i" => " $1&nbsp;$2",
		"#(\d)\s*(н\.э\.)#i" => "\\1&nbsp;\\2",
*/


		);
	$typotxt=preg_replace(array_keys($replace), array_values($replace), $typotxt);

	/*КАВЧКИ*/
	if (1==$opt_quotes)
		{
		/*
		РАБОТАЮТ НЕ ДО КОНЦА! В ПРОЦЕССЕ ПОИСКА АНАЛОГОВ/ДОРАБОТКИ
		*/
	        $typotxt = quotes($typotxt);
		}

	/*СПЕЦСИМВОЛЫ*/
	if (1==$opt_spec)
		{
		$replace=array(
			//Многоточие
			"~(?<!\.)\.{2,5}(?!\.)~"	=> "&hellip;",

			// Знаки (c), (r), (tm)
			'~\((c|C|с|С)\)~i'		=> '&copy;',
			'~\((r|R)\)~i'			=> '<sup><small>&reg;</small></sup>',
			'~\((tm|TM|тм|ТМ)\)~i'		=> '<sup>&trade;</sup>',

			//знак умножения
			'~\b(\d+)(x|х)(\d+)\b~'		=> '$1&times;$3',

			// Спецсимволы для 1/2 1/4 3/4
			'~\b1/2\b~'			=> '&frac12;',
			'~\b1/4\b~'			=> '&frac14;',
			'~\b3/4\b~'			=> '&frac34;',

			//Плюс-минус
			'~([^\+]|^)\+-~'		=> '$1&plusmn;',

			//Меры измерения в степени
			'~\s(мм|см|м|км|г|кг|т|б|кб|Кб|Мб|Гб|кбит|Кбит|мбит|Мбит|гбит|Гбит)(\d+)\b~'	=> '&nbsp;$1<sup>$2</sup>',
			 );
		$typotxt=preg_replace(array_keys($replace), array_values($replace), $typotxt);
		}

	/*ИСПРАВЛЕНИЯ*/		
	if(1==$opt_correct)
		{
		$replace=array(
			//убираем ненужные табуляции и пробелы
			"~( |\t)+~"	=> " ",

			//оторвать тире от знаков препинания
			'~-([\.;])~'	=> '- $1',
			'~([\.,])- ?~'	=> '$1 - ',

			// Разносим неправильные кавычки
			'~([^"]\w+)"(\w+)"~'	=> '$1 "$2"',
			'~"(\w+)"(\w+)~'	=> '"$1" $2',
			'~&nbsp;"~'		=> ' "',

			// Оторвать скобку от слова
			'~(\w)\(~'		=> '$1 (',
			'~\)(\w)~'		=> ') $1',

			//Слепляем скобки со словами
			'~(?<![:;8=-])\(\s~s'	=> '(',
			'~\s\)~s'		=> ')',

			//Знаки с предшествующим пробелом... нехорошо!
			'~(\S) +([,])~'		=> '$1$2',
			'~([?,!])([-А-Яа-я"])~'	=> '$1 $2',

			 //неправильное количество других знаков препинания
			"~[,]{2,}~"	=> ',',
			"~[;]{2,}~"	=> ';',
			"~[:]{3,6}~"	=> ':',
			"~[\?]{2}~"	=> '?',
			"~[\?]{4,}~"	=> '???',
			"~[!]{2}~"	=> '!',
			"~[!]{4,}~"	=> '!!!',

			//дважды повторяющиеся слова убираем (выключено)
			//"~(\S+)\s\\1~" => "$1",

			//многажды повторяющиеся слова убираем (выключено)
			//"~(\S+)(\s\\1)+~" => "$1",
			);
		$typotxt=preg_replace(array_keys($replace), array_values($replace), $typotxt);
	}

	return $typotxt;
	}
/* типограф */

после
PHP:
if ($this->filter_mode) $source = $this->word_filter($source);
вставить
PHP:
	/* типограф */
	$source = typograf($source, 0, 1, 1);
	/*
	что означают три циферки...
	1) включает расставление ввложенных кавычек, работает на половину. включить можно при желании
	2) замена разных спецсимволов, например (c), (r), tm
	3) небольшая шлифовка текста
	*/
	/* типограф */

После этого типографируется ВСЕ (новости, комментарии...), что идет через BBCODES редактор

на данный момент ЕСТЬ не ошибка, а коссяк. скрипт правильно переделывает вложенные кавычки,а потом их исправляет сам двиг. поглядите кому не лень в каком месте это происходит, я уже всю голову изломал
входной текст
"елочки и вложенные "лапки" тратата".
должно быть
«елочки и вложенные „лапки“ тратата».
на деле
«елочки и вложенные «лапки» тратата».
 
посмотрел прикольный класс, может нужно будет сделать как в википедии редактор чтобы таблици можно было мутить
 
Ничё непонял чё там типографируеться.
Можно скрин например или сайт, где посмотреть на сие чудо.
Там понял что с символами что то, но вот по поводу остального ничё непонял.
:nezn:
 
зайди на _http://iskariot.ru/wordpress/typo/ и все прочтешь
 
GauraStyle написал(а):
Ничё непонял чё там типографируеться.
Можно скрин например или сайт, где посмотреть на сие чудо.
Там понял что с символами что то, но вот по поводу остального ничё непонял.
Смысл модуля - исправление ошибок в статьях, в соответствии с правилами русской типографии. Пунктуация, грамматика и т.п.
 
Я так понял,что новости типографирються только через добовления через админку,
А если новости грабером грабить оно будет добовляться или нет????
Вроде ж через парсер идет :)
 
в том то и дело, что НУЖНО типограф встраивать в парсер, пока оно работает отдельно
 
целсофт отказался весной его встраивать. сказал что он немец и ему вообще русский язык неродной теперь.
 
  • Заблокирован
  • #9
целсофт отказался весной его встраивать. сказал что он немец и ему вообще русский язык неродной теперь.

Если он на самом деле так сказал, кретин полный... Причём здесь вообще он? Его клиенты получается не волнуют вовсе.. Т.к я думаю процент Россиян в списке клиентов по более остальных.

А по теме скажу - Типограф нужен 100% сейчас мой программист делает сайт какрас на DLE также в нём будет типограф, так что я обязательно по окончанию выложу его в клуб.
 
  • Нравится
Реакции: $aSH
издеваетесь? какой типограф, какие запятые и тире... целсофт отказался проверку орфографии прикрутить. вот бы что реально полезно было. pspell и aspell практически на всех хостингах стоит. а движков которые юзают её мало.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху