Advertisement
dizballanze

typograf.ru

Jun 6th, 2011
593
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.87 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Класс для работы с typograf.ru
  4.  * @author Шиканов Юрий <dizballanze@gmail.com>
  5.  * @link http://dizballanze.com
  6.  */
  7. class Typograf {
  8.     /**
  9.      * Теги
  10.      * Атрибут delete — значения: 0 — не удалять; 1 — удалять до типографирования; 2 — удалять после типографирования.
  11.      * @var int
  12.      */
  13.     public $tags_delete = 0;
  14.     /**
  15.      * Теги
  16.      * Значения: 0 — не расставлять; 1 — расставлять
  17.      * @var int
  18.      */
  19.     public $tags = 1;
  20.     /**
  21.      * Параграфы
  22.      * Атрибут delete — значения: 0 — не удалять; 1 — удалять до типографирования; 2 — удалять после типографирования.
  23.      * @var int
  24.      */
  25.     public $paragraph_insert = 1;
  26.     /**
  27.      * Внешний вид обрамления абзаца
  28.      * Начальный тег
  29.      * @var string
  30.      */
  31.     public $paragraph_start = '<p>';
  32.     /**
  33.      * Внешний вид обрамления абзаца
  34.      * Конечный тег
  35.      * @var string
  36.      */
  37.     public $paragraph_end = '</p>';
  38.     /**
  39.      * Перевод строки
  40.      * Атрибут insert: 1 — ставить; 0 — не ставить.
  41.      * @var int
  42.      */
  43.     public $newline_insert = 1;
  44.     /**
  45.      * Перевод строки
  46.      * Теги перевода строки
  47.      * @var string
  48.      */
  49.     public $newline = '<br />';
  50.     /**
  51.      * Переводы строк <p>&nbsp;</p>
  52.      * @var int
  53.      */
  54.     public $cms_new_line_valid = 0;
  55.     /**
  56.      * dos-text — удаляет одинарные переводы строк и переносы.
  57.      * Атрибут delete: 0 — не удалять; 1 — удалять.
  58.      * @var int
  59.      */
  60.     public $dos_text_delete = 0;
  61.     /**
  62.      * nowraped — неразрывные конструкции.
  63.      * Атрибут insert: 1 — ставить; 0 — не ставить.
  64.      * @var int
  65.      */
  66.     public $nowraped_insert = 1;
  67.     /**
  68.      * nowraped — неразрывные конструкции.
  69.      * Атрибут nonbsp: 0 — не использовать неразрывные конструкции вместо (неразрывного пробела); 1 — наоборот.
  70.      * @var int
  71.      */
  72.     public $nowraped_nobsp = 0;
  73.     /**
  74.      * nowraped — неразрывные конструкции.
  75.      * Атрибут length: не объединять в неразрывные конструкции слова, написанные через дефис, с общей длинной больше N знаков. Если 0 то не используется
  76.      * @var int
  77.      */
  78.     public $nowraped_length = 0;
  79.     /**
  80.      * nowraped — неразрывные конструкции.
  81.      * Начальный тег
  82.      * @var string
  83.      */
  84.     public $nowraped_start = '<nobr>';
  85.     /**
  86.      * nowraped — неразрывные конструкции.
  87.      * Конечный тег
  88.      * @var string
  89.      */
  90.     public $nowraped_end = '</nobr>';
  91.     /**
  92.      * hanging-punct — висячая пунктуация.
  93.      * Атрибут insert: 1 — использовать; 0 — не использовать.
  94.      * @var int
  95.      */
  96.     public $hanging_punct_insert = 0;
  97.     /**
  98.      * hanging-line — висячие строки.
  99.      * Атрибут delete: 1 — удалять; 0 — не удалять.
  100.      * @var int
  101.      */
  102.     public $hanging_line_delete = 0;
  103.     /**
  104.      * minus-sign — указывает какой символ использовать вместо знака минус: — &ndash; или &minus;
  105.      * @var string
  106.      */
  107.     public $minus_sign = '&ndash;';
  108.     /**
  109.      * Переносы.
  110.      * Атрибут insert
  111.      * @var int
  112.      */
  113.     public $hyphen_insert = 0;
  114.     /**
  115.      * Переносы.
  116.      * Атрибут length
  117.      * @var int
  118.      */
  119.     public $hyphen_length = 0;
  120.     /**
  121.      * acronym — выделять сокращения.
  122.      * Атрибут insert: 1 — выделять; 0 — не выделять
  123.      * @var int
  124.      */
  125.     public $acronym_insert = 1;
  126.     /**
  127.      * symbols — как выводить типографированный текст.
  128.      * Атрибут type: 0 — буквенными символами (&nbsp;); 1 — числовыми (&#160;).
  129.      * @var type
  130.      */
  131.     public $symbols_type = 0;
  132.     /**
  133.      * link — добавляет дополнительные атрибуты к ссылкам
  134.      * Атрибут target
  135.      * @var string
  136.      */
  137.     public $link_target = '';
  138.     /**
  139.      * link — добавляет дополнительные атрибуты к ссылкам
  140.      * Атрибут class
  141.      * @var string
  142.      */
  143.     public $link_class = '';
  144.  
  145.     private $_xml ='<?xml version="1.0" encoding="windows-1251" ?>
  146. <preferences>
  147.     <tags delete="{tags_delete}">{tags}</tags>
  148.     <paragraph insert="{paragraph_insert}">
  149.         <start><![CDATA[{paragraph_start}]]></start>
  150.         <end><![CDATA[{paragraph_end}]]></end>
  151.     </paragraph>
  152.     <newline insert="{newline_insert}"><![CDATA[{newline}]]></newline>
  153.     <cmsNewLine valid="{cms_new_line_valid}" />
  154.     <dos-text delete="{dos_text_delete}" />
  155.     <nowraped insert="{nowraped_insert}" nonbsp="{nowraped_nobsp}" length="{nowraped_length}">
  156.         <start><![CDATA[{nowraped_start}]]></start>
  157.         <end><![CDATA[{nowraped_end}]]></end>
  158.     </nowraped>
  159.     <hanging-punct insert="{hanging_punct_insert}" />
  160.     <hanging-line delete="{hanging_line_delete}" />
  161.     <minus-sign><![CDATA[{minus_sign}]]></minus-sign>
  162.     <hyphen insert="{hyphen_insert}" length="{hyphen_length}" />
  163.     <acronym insert="{acronym_insert}"></acronym>
  164.     <symbols type="{symbols_type}" />
  165.     <link target="{link_target}" class="{link_class}" />
  166. </preferences>';
  167.    
  168.     public function __construct() {
  169.        
  170.     }
  171.    
  172.     /**
  173.      * Формирует XML
  174.      * @return string
  175.      */
  176.     protected function burnXML(){
  177.         $xml = $this->_xml;
  178.         foreach ($this as $key=>$value){
  179.             if ($key == '_xml')
  180.                 continue;
  181.             $xml = str_replace('{' . $key . '}', $value, $xml);
  182.         }
  183.         return mb_convert_encoding($xml, 'CP1251', 'UTF-8');
  184.     }
  185.    
  186.     /**
  187.      * Осуществляет post-запрос
  188.      * @param string $host
  189.      * @param string $script
  190.      * @param string $data
  191.      * @return string
  192.      */
  193.     protected function post($host,$script,$data){
  194.  
  195.             $fp = fsockopen($host,80,$errno, $errstr, 30 );  
  196.  
  197.             if ($fp) {
  198.                     fputs($fp, "POST $script HTTP/1.1\n");  
  199.                     fputs($fp, "Host: $host\n");  
  200.                     fputs($fp, "Content-type: application/x-www-form-urlencoded\n");  
  201.                     fputs($fp, "Content-length: " . strlen($data) . "\n");
  202.                     fputs($fp, "User-Agent: PHP Script\n");  
  203.                     fputs($fp, "Connection: close\n\n");  
  204.                     fputs($fp, $data);  
  205.                     while(fgets($fp,2048) != "\r\n" && !feof($fp));
  206.                     $buf = '';
  207.                     while(!feof($fp)) $buf .= fread($fp,2048);
  208.                     fclose($fp);
  209.             }
  210.             else{
  211.                     return false;
  212.             }
  213.             return $buf;
  214.     }
  215.    
  216.     /**
  217.      * Типографировать текст
  218.      * @param string $text
  219.      * @param string $chr
  220.      * @return string|bool
  221.      */
  222.     public function typograf($text, $chr = 'UTF-8'){
  223.         $xml = $this->burnXML();
  224.         return $this->post('www.typograf.ru', '/webservice/', 'text=' . urlencode($text) . '&xml=' . urlencode($xml) . '&chr=' . urlencode($chr));
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement