gilenson 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +23 -0
- data/History.txt +80 -0
- data/Manifest.txt +8 -0
- data/README.txt +114 -0
- data/Rakefile +15 -0
- data/bin/gilensize +22 -0
- data/lib/gilenson.rb +572 -0
- data/test/test_gilenson.rb +396 -0
- metadata +114 -0
data/.autotest
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'autotest/restart'
|
4
|
+
|
5
|
+
# Autotest.add_hook :initialize do |at|
|
6
|
+
# at.extra_files << "../some/external/dependency.rb"
|
7
|
+
#
|
8
|
+
# at.libs << ":../some/external"
|
9
|
+
#
|
10
|
+
# at.add_exception 'vendor'
|
11
|
+
#
|
12
|
+
# at.add_mapping(/dependency.rb/) do |f, _|
|
13
|
+
# at.files_matching(/test_.*rb$/)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# %w(TestA TestB).each do |klass|
|
17
|
+
# at.extra_class_map[klass] = "test/test_misc.rb"
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# Autotest.add_hook :run_command do |at|
|
22
|
+
# system "rake build"
|
23
|
+
# end
|
data/History.txt
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
=== 1.0.5 / 2010-08-15
|
2
|
+
|
3
|
+
* Гиленсон теперь сервируется отдельным блюдом. История изменений ниже по тексту взята из rutils.
|
4
|
+
|
5
|
+
=== 1.0.1 - 08.02.2009
|
6
|
+
|
7
|
+
* Протестировано на JRuby 1.1.6 (julik)
|
8
|
+
* Основные шестеренки совместимы с Ruby 1.9.1 (julik)
|
9
|
+
|
10
|
+
=== 0.2.4 - 10.07.2008
|
11
|
+
|
12
|
+
* В Gilenson закрывающая латинская кавычка не принимается за знак дюйма
|
13
|
+
* В Gilenson корректно обрабатываются неразрывные пробелы если в сегменте присутствуют пунктуация из глифов
|
14
|
+
* В Gilenson добавлены настройки force_en_quotes и force_ru_quotes (если нужно свести все кавычки к одной форме)
|
15
|
+
* До свидания, Gilenson::Obsolete (julik)
|
16
|
+
* До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
|
17
|
+
|
18
|
+
=== 0.2.2 - 24.09.2007
|
19
|
+
|
20
|
+
* Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
|
21
|
+
* Gilenson - отформатирован под 2 пробела (julik)
|
22
|
+
|
23
|
+
=== 0.2.1 - 02.04.2007
|
24
|
+
|
25
|
+
* Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
|
26
|
+
|
27
|
+
=== 0.1.9 - 17.02.2007
|
28
|
+
|
29
|
+
* Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
|
30
|
+
|
31
|
+
=== 0.1.8 - 05.02.2007
|
32
|
+
|
33
|
+
* Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
|
34
|
+
|
35
|
+
=== 0.1.4 - 02.12.2005
|
36
|
+
|
37
|
+
* Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
|
38
|
+
* Gilenson - в тестах произведена замена <cOdE> на <code> и <TT> на <tt> (mash)
|
39
|
+
* Gilenson - в двух регулярных выражениях (в "def process_quotes") изменен #{@mark_tag} на
|
40
|
+
\#{@mark_tag} чтобы предотвратить segfault ruby 1.8.2 (2004-12-25) на [i386-mswin32] (mash)
|
41
|
+
* Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
|
42
|
+
|
43
|
+
=== 0.1.3 - 14.11.2005
|
44
|
+
|
45
|
+
* Gilenson - замена троеточий на ellipsis (julik)
|
46
|
+
* Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
|
47
|
+
меняется на glyph[:nbsp]. (mash)
|
48
|
+
* Gilenson - починен баг из-за которого не типографилась закрывающая кавычка после вопросительного
|
49
|
+
и восклицательного знака (julik)
|
50
|
+
* По умолчанию используется новый Gilenson (Gilenson::Formatter). Старый доступен как Gilenson::Obsolete и через
|
51
|
+
String#o_gilensize и грузится только в случае необходимости. Если у вас были тесты провеяющие gilensize
|
52
|
+
скорее всего они "полетели" (julik)
|
53
|
+
* Gilenson - дополнительная фича, не связанная с типографикой: замена амперсанда в следующих атрибутах
|
54
|
+
тагов: href, src, data. Пример: <a href="?x=1&y=2&z=3"> => <a href="?x=1&y=2&z=3"> (mash)
|
55
|
+
* Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
|
56
|
+
при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
|
57
|
+
В иерархии метод выставлен первым для корректной обработки случаев вида
|
58
|
+
%{Используйте & вместо &}.gilensize(:html=>false) (mash)
|
59
|
+
* Gilenson - добавлены :skip_attr=>false и :skip_code=>true для управления обработкой типографики атрибутов тегов title, alt и содержимого <code/>, <tt/>, <![CDATA[...]]> (mash)
|
60
|
+
* Gilenson - добавлен :raw_output=>true для вывода обычных UTF-8 chars вместо entities (julik)
|
61
|
+
* Смена структуры модулей Gilenson (julik)
|
62
|
+
RuTils::Gilenson::Obsolete - старый класс форматтера
|
63
|
+
RuTils::Gilenson::Formatter - новый класс форматтера
|
64
|
+
При вызове RuTils::Gilenson.new возвращается новый Formatter
|
65
|
+
* Gilenson - документация (julik)
|
66
|
+
* Gilenson - основные группы настроек "по-умолчанию" выносятся в константы (julik)
|
67
|
+
* Gilenson - фильтры выносятся в методы типа process_фильтр и их можно применять по отдельности через Formatter#apply (julik)
|
68
|
+
* Gilenson - добавлены ¶ и № (последний - не стандарт, но нужен для преобразований символа "номер") (mash)
|
69
|
+
* Gilenson - добавлен хэш @glyph_copy_paste для подмены юникодных типографских символов на entities
|
70
|
+
(опционально, через @settings[:copypaste]=>true) (mash)
|
71
|
+
* Gilenson - добавлена "склейка" инициалов полукруглой шпацией (thin space)
|
72
|
+
* Gilenson - добавлен Formatter#process чтобы обрабатывать строки поточно, и сделан удобный доступ к настройкам
|
73
|
+
через "хвост" метода (julik)
|
74
|
+
* Во всех внутренних строковых подстановках Gilenson используются указатели на глифы с двоеточием в начале (julik)
|
75
|
+
* Gilenson - введен DOUBLE PRIME (″) для знаков дюйма (julik)
|
76
|
+
http://en.wikipedia.org/wiki/Prime_%28mark%29
|
77
|
+
Согласно изощренным правилам скошенный prime правильней чем "
|
78
|
+
* Новый Гиленсон lib/gilenson/gilenson.rb (mash)
|
79
|
+
RuTils::GilensonNew::Typografica.new('какой-то текст')
|
80
|
+
%q{"какой-то текст"}.n_gilensize
|
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
= gilenson
|
2
|
+
|
3
|
+
* http://github.com/julik/gilenson
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Обработчик типографских символов в HTML согласно общепринятым правилам.
|
8
|
+
Посвящается П.Г.Гиленсону[http://www.rudtp.ru/lib.php?book=172], благодаря которому русские правила тех.
|
9
|
+
редактуры еще как минимум 20 лет останутся бессмысленно старомодными.
|
10
|
+
|
11
|
+
== ФУНКЦИИ
|
12
|
+
|
13
|
+
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы, английские - для латиницы),
|
14
|
+
заменит "хитрые" пунктуационные символы на entities и отформатирует знаки типа (c), (tm), телефоны и адреса.
|
15
|
+
|
16
|
+
Gilenson базируется на коде Typografica[http://pixel-apes.com/typografica] от PixelApes,
|
17
|
+
который был приведен к положенному в Ruby стандарту. Основные отличия Gilenson от Typografica на PHP:
|
18
|
+
|
19
|
+
* работа только и полностью в UTF-8 (включая entities, применимые в XML)
|
20
|
+
* поддержка "raw"-вывода (символов вместо entities) - текст выводимый Gilenson можно верстать на бумаге
|
21
|
+
|
22
|
+
== ИСПОЛЬЗОВАНИЕ:
|
23
|
+
|
24
|
+
Программой gilensize поставляющейся в комплекте
|
25
|
+
cat файл_с_текстом_в_utf8.txt | gilensize > красивый_документ.txt
|
26
|
+
|
27
|
+
Из кода - как фильтр
|
28
|
+
|
29
|
+
formatter = Gilenson.new
|
30
|
+
formatter.configure(:dash=>true)
|
31
|
+
for string in strings
|
32
|
+
puts formatter.process(string)
|
33
|
+
end
|
34
|
+
|
35
|
+
или через метод ++gilensize++ для любой строковой переменной
|
36
|
+
|
37
|
+
%{ И вот они таки "приехали"}.gilensize => 'И вот они таки «приехали»'
|
38
|
+
|
39
|
+
Все дополнительные настройки в таком случае передаются форматтеру
|
40
|
+
|
41
|
+
%{ И вот они таки "приехали"}.gilensize(:laquo=>false) => 'И вот они таки "приехали"'
|
42
|
+
|
43
|
+
Настройки регулируются через методы
|
44
|
+
formatter.dashglue = true
|
45
|
+
или ассоциированным хешем
|
46
|
+
formatter.configure!(:dash=>true, :quotes=>false)
|
47
|
+
|
48
|
+
Хеш также можно передавать как последний аргумент методам process и to_html,
|
49
|
+
в таком случае настройки будут применены только при этом вызове
|
50
|
+
|
51
|
+
beautified = formatter.process(my_text, :dash=>true)
|
52
|
+
|
53
|
+
В параметры можно подставить также ключ :all чтобы временно включить или выключить все фильтры
|
54
|
+
|
55
|
+
beautified = formatter.process(my_text, :all=>true)
|
56
|
+
|
57
|
+
Помимо этого можно пользоваться каждым фильтром по отдельности используя метод +apply+
|
58
|
+
|
59
|
+
Можно менять глифы, которые форматтер использует для подстановок. К примеру,
|
60
|
+
formatter.glyph[:nbsp] = ' '
|
61
|
+
заставит форматтер расставлять "традиционные" неразрывные пробелы.
|
62
|
+
Именно это - большая глупость, но другие глифы заменить может быть нужно.
|
63
|
+
|
64
|
+
=== Настройки форматтера
|
65
|
+
|
66
|
+
* "inches" - преобразовывать дюймы в знак дюйма;
|
67
|
+
* "laquo" - кавычки-ёлочки
|
68
|
+
* "quotes" - кавычки-английские лапки
|
69
|
+
* "dash" - проставлять короткое тире (150)
|
70
|
+
* "emdash" - длинное тире двумя минусами (151)
|
71
|
+
* "initials" - проставлять тонкие шпации в инициалах
|
72
|
+
* "copypaste" - замена непечатных и "специальных" юникодных символов на entities
|
73
|
+
* "(c)" - обрабатывать знак копирайта
|
74
|
+
* "(r)", "(tm)", "(p)", "+-" - спецсимволы, какие - понятно
|
75
|
+
* "acronyms" - сворачивание пояснений к аббревиатурам (пояснение - в скобках после аббревиатуры без пробела). Пояснение будет "приклеено" к аббревиатуре полукруглой шпацией.
|
76
|
+
* "degrees" - знак градуса
|
77
|
+
* "dashglue", "wordglue" - приклеивание предлогов и дефисов
|
78
|
+
* "spacing" - запятые и пробелы, перестановка
|
79
|
+
* "phones" - обработка телефонов
|
80
|
+
* "html" - при false - запрет использования тагов html
|
81
|
+
* "de_nobr" - при true все <nobr/> заменяются на <span class="nobr"/>
|
82
|
+
* "raw_output" - (по умолчанию false) - при true вместо entities выводятся UTF-символы.
|
83
|
+
Это нужно чтобы обработанный текст верстать на бумаге.
|
84
|
+
* "skip_attr" - (по умолчанию false) - при true не отрабатывать типографику в атрибутах тегов (title, alt)
|
85
|
+
* "skip_code" - (по умолчанию true) - при true не отрабатывать типографику внутри <code/>, <tt/>, CDATA
|
86
|
+
|
87
|
+
== УСТАНОВКА:
|
88
|
+
|
89
|
+
* sudo gem install gilenson
|
90
|
+
|
91
|
+
== ЛИЦЕНЗИЯ:
|
92
|
+
|
93
|
+
(The MIT License)
|
94
|
+
|
95
|
+
Copyright (c) 2003-2004 Julik Tarkhanov, Danil Ivanov and contributors
|
96
|
+
|
97
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
98
|
+
a copy of this software and associated documentation files (the
|
99
|
+
'Software'), to deal in the Software without restriction, including
|
100
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
101
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
102
|
+
permit persons to whom the Software is furnished to do so, subject to
|
103
|
+
the following conditions:
|
104
|
+
|
105
|
+
The above copyright notice and this permission notice shall be
|
106
|
+
included in all copies or substantial portions of the Software.
|
107
|
+
|
108
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
109
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
110
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
111
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
112
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
113
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
114
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require File.dirname(__FILE__) + "/lib/gilenson"
|
6
|
+
|
7
|
+
DOCOPTS = %w(--charset utf-8 --promiscuous)
|
8
|
+
|
9
|
+
r = Hoe.spec 'gilenson' do | p |
|
10
|
+
p.developer('Julik Tarkhanov', 'me@julik.nl')
|
11
|
+
p.version = Gilenson::VERSION
|
12
|
+
end
|
13
|
+
r.spec.rdoc_options += DOCOPTS
|
14
|
+
|
15
|
+
# vim: syntax=ruby
|
data/bin/gilensize
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
#
|
4
|
+
# Processes text on standard input with Gilenson. Please feed it UTF-8!
|
5
|
+
#
|
6
|
+
# == Usage
|
7
|
+
#
|
8
|
+
# cat myfile.txt | gilensize > output.txt
|
9
|
+
#
|
10
|
+
# == Author
|
11
|
+
# Julik <me@julik.nl>
|
12
|
+
|
13
|
+
$KCODE = 'u'
|
14
|
+
require File.dirname(__FILE__) + '/../lib/rutils'
|
15
|
+
require 'optparse'
|
16
|
+
OptionParser.new do | p |
|
17
|
+
p.on(" -h", "--help") { require 'rdoc/usage'; RDoc::usage }
|
18
|
+
end.parse!
|
19
|
+
|
20
|
+
while st = gets do
|
21
|
+
puts Gilenson.new(st).to_html
|
22
|
+
end
|