gilenson 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|