— универсальное средство подготовки текстов к web-изданиюверсия: 2.0

Веб-сервис «Типограф» — продукт нашего времени, удобное средство для искушённых пользователей. Отныне нет необходимости постоянно держать под рукой открытым сайт www.typograf.ru. Вы можете импортировать всю мощь и функционал оригинального сервиса в сердце своего сайта.

Работает сервис достаточно просто: необходимо осуществить POST запрос в переменной text по адресу http://www.typograf.ru/webservice/, и принять ответ. Всю остальную рутинную работу он сделает за вас.

Чтобы результат выдавался в кодировке UTF-8 или koi8-r, необходимо передать дополнительный параметр chr=UTF-8 или chr=koi8-r.

Если вы ещё более искушённый пользователь, и вам недостаточно дефолтных настроек, вы можете передать вместе с текстом переменную xml, в которой указать валидный xml с настройками.

Пример дефолтных настроек:

<?xml version="1.0" encoding="windows-1251" ?>
<preferences>
	<!-- Теги -->
	<tags delete="0">1</tags>
	<!-- Абзацы -->
	<paragraph insert="1">
		<start><![CDATA[<p>]]></start>
		<end><![CDATA[</p>]]></end>
	</paragraph>
	<!-- Переводы строк -->
	<newline insert="1"><![CDATA[<br />]]></newline>
	<!-- Переводы строк <p>&nbsp;</p> -->
	<cmsNewLine valid="0" />
	<!-- DOS текст -->
	<dos-text delete="0" />
	<!-- Неразрывные конструкции -->
	<nowraped insert="1" nonbsp="0" length="0">
		<start><![CDATA[<nobr>]]></start>
		<end><![CDATA[</nobr>]]></end>
	</nowraped>
	<!-- Висячая пунктуация -->
	<hanging-punct insert="0" />
	<!-- Удалять висячие слова -->
	<hanging-line delete="0" />
	<!-- Символ минус -->
	<minus-sign><![CDATA[&ndash;]]></minus-sign>
	<!-- Переносы -->
	<hyphen insert="0" length="0" />
	<!-- Акронимы -->
	<acronym insert="1"></acronym>
	<!-- Вывод символов 0 - буквами 1 - числами -->
	<symbols type="0" />
	<!-- Параметры ссылок -->
	<link target="" class="" />
</preferences>                                                      

Расшифровка настроек

  • tags (теги) — значения: 0 — не расставлять; 1 — расставлять. Атрибут delete — значения: 0 — не удалять; 1 — удалять до типографирования; 2 — удалять после типографирования.
  • paragraph (параграфы) — атрибут insert: 1 — ставить; 0 — не ставить. start/end теги задают внешний вид обрамления параграфа, начальные и конечные теги соответственно (могут быть пустыми).
  • newline перевод строки. Атрибут insert: 1 — ставить; 0 — не ставить. Внутри тега пишутся теги перевода строки.
  • dos-text удаляет одинарные переводы строк и переносы. Атрибут delete: 0 — не удалять; 1 — удалять.
  • nowraped неразрывные конструкции. Атрибут insert: 1 — ставить; 0 — не ставить. Атрибут nonbsp: 0 — не использовать неразрывные конструкции вместо (неразрывного пробела); 1 — наоборот. Атрибут length: не объединять в неразрывные конструкции слова, написанные через дефис, с общей длинной больше N знаков. Если 0 то не используется. start/end аналогично параграфам.
  • hanging-punct висячая пунктуация. Атрибут insert: 1 — использовать; 0 — не использовать.
  • hanging-line висячие строки. Атрибут delete: 1 — удалять; 0 — не удалять.
  • minus-sign указывает какой символ использовать вместо знака минус: — &ndash; или &minus;.
  • acronym выделять сокращения. Атрибут insert: 1 — выделять; 0 — не выделять.
  • symbols как выводить типографированный текст. Атрибут type: 0 — буквенными символами (&nbsp;); 1 — числовыми (&#160;).
  • link добавляет дополнительные атрибуты к ссылкам

Настройки можно ставить в любом порядке. Количество настроек можно сокращать и использовать только необходимые, остальные настройки будут браться по-умолчанию.

Parser

...
<form method="post">
	^if(def $form:text){
		$file[^file::load[text;http://www.typograf.ru/webservice/;
					$.charset[windows-1251]
					$.method[POST]
					$.form[
					$.text[$form:text]
					$.xml[]
				]
			]
		]
	}
	<textarea name="text" rows="5" style="width: 50%">^if(def $file.text){$file.text}</textarea>
	<br />
	<input type="submit" value="типографировать" style="margin-top: 0.5em" />
</form>
...

Perl

#!/usr/bin/perl

use strict;
use warnings;
use LWP;

print "Content-type: text/plain\n\n";

my $browser = LWP::UserAgent->new;

my $word = 'Я от дедушки ушёл...';

my $url = 'http://www.typograf.ru/webservice/';
my $response = $browser->post( $url, [ 'text' => $word ] );

print $response->content;

PHP

<?php
/**
* Функция возвращает результат post запроса
* $host - хост сайта куда предполагается делать post запросы. Напр., имеется сайт
*    http://www.typograf.ru/webservice/, хостом в данном случае является www.typograf.ru
* $script - имя каталога или скрипта, который обрабатывает ваш post запрос.
*    Для сайта http://www.typograf.ru/webservice/ обработчиком будет каталог /webservice/.
* $data - это данные формата имя=значение, которые передаются для обработки. Для веб-сервиса
*    http://www.typograf.ru/webservice/ необходимо передать значение переменной text, поэтому
*    значение переменной $data будет text=текст для типографирования.
*/

function post($host,$script,$data)
{ 

	$fp = fsockopen($host,80,$errno, $errstr, 30 );  
         
	if ($fp) { 
		fputs($fp, "POST $script HTTP/1.1\n");  
		fputs($fp, "Host: $host\n");  
		fputs($fp, "Content-type: application/x-www-form-urlencoded\n");  
		fputs($fp, "Content-length: " . strlen($data) . "\n");
		fputs($fp, "User-Agent: PHP Script\n");  
		fputs($fp, "Connection: close\n\n");  
		fputs($fp, $data);  
		while(fgets($fp,2048) != "\r\n" && !feof($fp));
		unset($buf);
		while(!feof($fp)) $buf .= fread($fp,2048);
		fclose($fp); 
	}
	else{ 
		return "Сервер не отвечает"; 
	}
	return $buf; 
}

$word = 'Я от дедушки ушёл...';

$xml = '';

echo post('www.typograf.ru','/webservice/','text='.urlencode($word).'&xml='.urlencode($xml));
?>

Python

#!/usr/bin/env python
# -*- coding: cp1251 -*-

import urllib
url = "http://www.typograf.ru/webservice/"
params = urllib.urlencode( {"text":"Я от дедушки ушёл..."} )
f = urllib.urlopen(url, params)
print f.read()
дам-ка денег | соглашение | кнопочки | спасибо!
О разработке 3-й версии Типографа на Facebook, Вконтакте и в Twitter © 2003—2017, Eugene Spearance