facets 2.6.0 → 2.7.0
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/HISTORY.rdoc +331 -35
- data/MANIFEST +685 -826
- data/{doc/guide/notes.rd → NOTES} +0 -0
- data/README.rdoc +73 -25
- data/Rakefile +245 -2
- data/TODO +5 -0
- data/demo/hook.rd +47 -0
- data/demo/scenario_require.rd +9 -0
- data/doc/README.more +24 -6
- data/doc/manual/about.rb +47 -0
- data/doc/manual/annotations.rdoc +60 -0
- data/doc/manual/associations.rdoc +55 -0
- data/doc/manual/blockups.rdoc +101 -0
- data/doc/manual/capsule.rdoc +34 -0
- data/doc/manual/command.rdoc +177 -0
- data/doc/manual/core.rdoc +37 -0
- data/doc/manual/faq.rdoc +32 -0
- data/doc/manual/typecast.html +112 -0
- data/lib/core/facets.rb +359 -11
- data/lib/core/facets/array/combination.rb +3 -3
- data/lib/core/facets/array/index.rb +4 -1
- data/lib/core/facets/array/permutation.rb +2 -2
- data/lib/core/facets/array/product.rb +1 -1
- data/lib/core/facets/binding/eval.rb +1 -1
- data/lib/core/facets/denumerable.rb +76 -0
- data/lib/core/facets/duplicable.rb +34 -0
- data/lib/core/facets/enumerable/count.rb +10 -4
- data/lib/core/facets/enumerable/defer.rb +77 -0
- data/lib/core/facets/enumerable/each_by.rb +1 -1
- data/lib/core/facets/enumerable/every.rb +35 -0
- data/lib/{more/facets/elementwise.rb → core/facets/enumerable/ewise.rb} +0 -0
- data/lib/core/facets/enumerable/filter.rb +25 -0
- data/lib/core/facets/enumerable/group_by.rb +1 -1
- data/lib/core/facets/enumerable/none.rb +3 -2
- data/lib/core/facets/enumerable/one.rb +3 -2
- data/lib/core/facets/enumerable/per.rb +61 -0
- data/lib/core/facets/exception/raised.rb +14 -0
- data/lib/core/facets/integer/odd.rb +5 -1
- data/lib/core/facets/kernel/__dir__.rb +13 -3
- data/lib/core/facets/kernel/__here__.rb +14 -0
- data/lib/core/facets/kernel/__method__.rb +9 -3
- data/lib/core/facets/kernel/ask.rb +1 -0
- data/lib/core/facets/kernel/equate.rb +13 -0
- data/lib/core/facets/kernel/extension.rb +9 -0
- data/lib/core/facets/kernel/identical.rb +4 -0
- data/lib/core/facets/kernel/instance_exec.rb +2 -1
- data/lib/core/facets/kernel/method.rb +49 -0
- data/lib/core/facets/kernel/object_send.rb +2 -2
- data/lib/core/facets/kernel/{state.rb → object_state.rb} +23 -12
- data/lib/core/facets/kernel/require_all.rb +6 -1
- data/lib/core/facets/kernel/require_local.rb +8 -1
- data/lib/core/facets/kernel/require_relative.rb +52 -0
- data/lib/core/facets/kernel/source_location.rb +13 -0
- data/lib/core/facets/kernel/tap.rb +13 -6
- data/lib/core/facets/module/attr_setter.rb +57 -0
- data/lib/core/facets/module/instance_method.rb +24 -0
- data/lib/core/facets/module/module_load.rb +60 -44
- data/lib/core/facets/module/module_require.rb +1 -0
- data/lib/core/facets/nilclass/to_f.rb +1 -1
- data/lib/core/facets/objectspace/op_fetch.rb +3 -0
- data/lib/core/facets/proc/curry.rb +4 -3
- data/lib/core/facets/string/bytes.rb +10 -4
- data/lib/core/facets/string/camelcase.rb +6 -5
- data/lib/core/facets/string/chars.rb +5 -1
- data/lib/core/facets/string/each_char.rb +1 -1
- data/lib/core/facets/string/each_word.rb +1 -1
- data/lib/core/facets/string/lines.rb +11 -4
- data/lib/core/facets/string/start_with.rb +9 -2
- data/lib/core/facets/string/unfold.rb +27 -0
- data/lib/core/facets/symbol/succ.rb +3 -3
- data/lib/core/facets/symbol/thrown.rb +20 -0
- data/lib/core/facets/symbol/to_proc.rb +3 -2
- data/lib/core/facets/time/to_time.rb +1 -1
- data/lib/core/facets/to_hash.rb +41 -100
- data/lib/core/facets/unboundmethod/name.rb +20 -23
- data/lib/more/facets/ansicode.rb +1 -10
- data/lib/more/facets/autoarray.rb +3 -31
- data/lib/more/facets/basicobject.rb +73 -0
- data/lib/more/facets/blankslate.rb +2 -66
- data/lib/{lore → more}/facets/cgi.rb +0 -0
- data/lib/more/facets/class_extend.rb +1 -0
- data/lib/{lore → more}/facets/continuation.rb +0 -0
- data/lib/{lore → more}/facets/date.rb +3 -3
- data/lib/more/facets/enumargs.rb +192 -0
- data/lib/more/facets/enumerablepass.rb +2 -216
- data/lib/more/facets/enumerator.rb +62 -0
- data/lib/more/facets/{equatable.rb → equitable.rb} +11 -11
- data/lib/more/facets/expirable.rb +13 -41
- data/lib/{lore → more}/facets/fileutils.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/head.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/safe_ln.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/slice.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/tail.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/wc.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/whereis.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/which.rb +0 -0
- data/lib/{lore → more}/facets/getoptlong.rb +0 -0
- data/lib/more/facets/hook.rb +2 -29
- data/lib/more/facets/inheritor.rb +2 -2
- data/lib/more/facets/instance_eval.rb +50 -0
- data/lib/more/facets/instance_function.rb +78 -0
- data/lib/more/facets/main.rb +20 -15
- data/lib/more/facets/memoize.rb +1 -113
- data/lib/more/facets/module/attr.rb +83 -0
- data/lib/more/facets/module/attr_tester.rb +44 -0
- data/lib/more/facets/module/attr_toggler.rb +59 -0
- data/lib/more/facets/module/attr_validator.rb +34 -0
- data/lib/more/facets/{class_extension.rb → module/class_extend.rb} +21 -13
- data/lib/more/facets/once.rb +59 -0
- data/lib/more/facets/openmodule.rb +1 -0
- data/lib/more/facets/orderedhash.rb +1 -33
- data/lib/{lore → more}/facets/ostruct.rb +0 -0
- data/lib/more/facets/ostructable.rb +1 -4
- data/lib/more/facets/partial.rb +18 -16
- data/lib/{lore → more}/facets/pathname.rb +0 -0
- data/lib/more/facets/preinitialize.rb +157 -0
- data/lib/{lore → more}/facets/rbconfig.rb +0 -0
- data/lib/more/facets/recorder.rb +1 -2
- data/lib/{lore → more}/facets/set.rb +0 -0
- data/lib/{lore → more}/facets/shellwords.rb +0 -0
- data/lib/{lore → more}/facets/uri.rb +0 -0
- data/lib/{lore → more}/facets/yaml.rb +0 -0
- data/lib/{lore → more}/facets/zlib.rb +0 -0
- data/meta/loadpath +0 -1
- data/meta/sitemap +4 -0
- data/meta/version +1 -1
- data/test/core/enumerable/test_count.rb +1 -1
- data/test/{more/test_filter.rb → core/enumerable/test_defer.rb} +24 -22
- data/test/{more/test_elementor.rb → core/enumerable/test_every.rb} +2 -15
- data/test/core/enumerable/test_ewise.rb +23 -0
- data/test/core/enumerable/test_per.rb +18 -0
- data/test/core/enumerable/test_take.rb +13 -0
- data/test/core/kernel/test_deepcopy.rb +1 -1
- data/test/{more/test_1stclassmethod.rb → core/kernel/test_method.rb} +2 -7
- data/test/core/kernel/test_tap.rb +1 -1
- data/test/core/proc/test_curry.rb +11 -0
- data/test/core/string/test_bytes.rb +1 -1
- data/test/core/string/test_camelcase.rb +23 -6
- data/test/core/string/test_lines.rb +1 -1
- data/test/core/string/test_unfold.rb +14 -0
- data/test/{more → core}/test_blank.rb +0 -0
- data/test/{more → core}/test_boolean.rb +0 -0
- data/test/{more → core}/test_functor.rb +0 -0
- data/test/{lore → more}/test_basicobject.rb +0 -0
- data/test/more/{test_class_extension.rb → test_class_extend.rb} +6 -6
- data/test/{lore → more}/test_continuation.rb +0 -0
- data/test/{lore → more}/test_date.rb +0 -0
- data/test/more/{test_enumerablepass.rb → test_enumargs.rb} +2 -4
- data/test/more/{test_equatable.rb → test_equitable.rb} +2 -2
- data/test/more/{test_instantise.rb → test_instance_function.rb} +3 -2
- data/test/more/test_memoize.rb +1 -1
- data/test/{lore → more}/test_ostruct.rb +0 -0
- metadata +865 -1016
- data/RELEASE +0 -38
- data/doc/README.lore +0 -51
- data/doc/log/basic_stats/index.html +0 -39
- data/doc/log/changelog.html +0 -648
- data/doc/log/changelog.txt +0 -217
- data/doc/log/stats/index.html +0 -39
- data/doc/log/testlog.txt +0 -278
- data/doc/notes/CHANGES +0 -2529
- data/doc/rdoc/lore/classes/Array.html +0 -176
- data/doc/rdoc/lore/classes/CGI.html +0 -191
- data/doc/rdoc/lore/classes/Config.html +0 -135
- data/doc/rdoc/lore/classes/Continuation.html +0 -113
- data/doc/rdoc/lore/classes/Date.html +0 -631
- data/doc/rdoc/lore/classes/DateTime.html +0 -583
- data/doc/rdoc/lore/classes/Enumerable.html +0 -89
- data/doc/rdoc/lore/classes/Enumerable/Enumerator.html +0 -147
- data/doc/rdoc/lore/classes/File.html +0 -128
- data/doc/rdoc/lore/classes/FileUtils.html +0 -434
- data/doc/rdoc/lore/classes/GetoptLong.html +0 -118
- data/doc/rdoc/lore/classes/GetoptLong/DSL.html +0 -208
- data/doc/rdoc/lore/classes/Kernel.html +0 -135
- data/doc/rdoc/lore/classes/Logger.html +0 -229
- data/doc/rdoc/lore/classes/Logger/Ansicolor.html +0 -277
- data/doc/rdoc/lore/classes/Logger/LogDevice.html +0 -121
- data/doc/rdoc/lore/classes/NilClass.html +0 -119
- data/doc/rdoc/lore/classes/OpenStruct.html +0 -432
- data/doc/rdoc/lore/classes/Pathname.html +0 -353
- data/doc/rdoc/lore/classes/Set.html +0 -117
- data/doc/rdoc/lore/classes/Shellwords.html +0 -111
- data/doc/rdoc/lore/classes/String.html +0 -140
- data/doc/rdoc/lore/classes/Time.html +0 -154
- data/doc/rdoc/lore/classes/URI.html +0 -454
- data/doc/rdoc/lore/classes/URI/Hash.html +0 -105
- data/doc/rdoc/lore/classes/URI/Kernel.html +0 -122
- data/doc/rdoc/lore/classes/Zlib.html +0 -188
- data/doc/rdoc/lore/created.rid +0 -1
- data/doc/rdoc/lore/files/README.html +0 -286
- data/doc/rdoc/lore/files/doc/README_lore.html +0 -155
- data/doc/rdoc/lore/files/lib/lore/facets/basicobject_rb.html +0 -118
- data/doc/rdoc/lore/files/lib/lore/facets/cgi_rb.html +0 -111
- data/doc/rdoc/lore/files/lib/lore/facets/continuation_rb.html +0 -147
- data/doc/rdoc/lore/files/lib/lore/facets/date_rb.html +0 -97
- data/doc/rdoc/lore/files/lib/lore/facets/enumerator_rb.html +0 -111
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/head_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/safe_ln_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/slice_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/tail_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/wc_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/whereis_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/which_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils_rb.html +0 -131
- data/doc/rdoc/lore/files/lib/lore/facets/getoptlong_rb.html +0 -135
- data/doc/rdoc/lore/files/lib/lore/facets/logger_rb.html +0 -142
- data/doc/rdoc/lore/files/lib/lore/facets/ostruct_rb.html +0 -135
- data/doc/rdoc/lore/files/lib/lore/facets/pathname_rb.html +0 -145
- data/doc/rdoc/lore/files/lib/lore/facets/rbconfig_rb.html +0 -124
- data/doc/rdoc/lore/files/lib/lore/facets/set_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/shellwords_rb.html +0 -124
- data/doc/rdoc/lore/files/lib/lore/facets/uri_rb.html +0 -125
- data/doc/rdoc/lore/files/lib/lore/facets/yaml_rb.html +0 -146
- data/doc/rdoc/lore/files/lib/lore/facets/zlib_rb.html +0 -97
- data/doc/rdoc/lore/fr_class_index.html +0 -73
- data/doc/rdoc/lore/fr_file_index.html +0 -71
- data/doc/rdoc/lore/fr_method_index.html +0 -177
- data/doc/rdoc/lore/index.html +0 -26
- data/doc/rdoc/lore/rdoc-style.css +0 -177
- data/doc/release-notes/RELEASE-2.0.5 +0 -8
- data/doc/release-notes/RELEASE-2.1.0 +0 -9
- data/doc/release-notes/RELEASE-2.1.1 +0 -5
- data/doc/release-notes/RELEASE-2.1.2 +0 -6
- data/doc/release-notes/RELEASE-2.1.3 +0 -5
- data/doc/release-notes/RELEASE-2.2.0 +0 -14
- data/doc/release-notes/RELEASE-2.2.1 +0 -4
- data/doc/release-notes/RELEASE-2.3.0 +0 -6
- data/doc/release-notes/RELEASE-2.4.0 +0 -70
- data/doc/release-notes/RELEASE-2.4.1 +0 -8
- data/doc/release-notes/RELEASE-2.4.2 +0 -4
- data/doc/release-notes/RELEASE-2.4.3 +0 -78
- data/doc/release-notes/RELEASE-2.4.4 +0 -38
- data/doc/release-notes/RELEASE-2.4.5 +0 -37
- data/doc/release-notes/RELEASE-2.5.0 +0 -83
- data/lib/core/facets/kernel/instance.rb +0 -19
- data/lib/lore/facets/basicobject.rb +0 -14
- data/lib/lore/facets/enumerator.rb +0 -67
- data/lib/lore/facets/logger.rb +0 -291
- data/lib/more/facets/1stclassmethod.rb +0 -140
- data/lib/more/facets/advisable.rb +0 -162
- data/lib/more/facets/association.rb +0 -210
- data/lib/more/facets/attr.rb +0 -209
- data/lib/more/facets/basex.rb +0 -37
- data/lib/more/facets/bbcode.rb +0 -397
- data/lib/more/facets/bicrypt.rb +0 -265
- data/lib/more/facets/binreadable.rb +0 -221
- data/lib/more/facets/censor.rb +0 -97
- data/lib/more/facets/classmethods.rb +0 -199
- data/lib/more/facets/consoleutils.rb +0 -99
- data/lib/more/facets/crypt.rb +0 -166
- data/lib/more/facets/dependency.rb +0 -151
- data/lib/more/facets/downloader.rb +0 -281
- data/lib/more/facets/duplicable.rb +0 -43
- data/lib/more/facets/elementor.rb +0 -133
- data/lib/more/facets/filter.rb +0 -121
- data/lib/more/facets/heap.rb +0 -22
- data/lib/more/facets/infinity.rb +0 -193
- data/lib/more/facets/ini.rb +0 -264
- data/lib/more/facets/instantise.rb +0 -1
- data/lib/more/facets/instantize.rb +0 -95
- data/lib/more/facets/interval.rb +0 -282
- data/lib/more/facets/iteration.rb +0 -65
- data/lib/more/facets/linkedlist.rb +0 -222
- data/lib/more/facets/lrucache.rb +0 -157
- data/lib/more/facets/matcher.rb +0 -140
- data/lib/more/facets/memoizer.rb +0 -74
- data/lib/more/facets/minitar.rb +0 -1063
- data/lib/more/facets/nackclass.rb +0 -41
- data/lib/more/facets/net/smtp_tls.rb +0 -131
- data/lib/more/facets/nilstatus.rb +0 -48
- data/lib/more/facets/overload.rb +0 -94
- data/lib/more/facets/paramix.rb +0 -202
- data/lib/more/facets/pool.rb +0 -91
- data/lib/more/facets/pqueue.rb +0 -449
- data/lib/more/facets/pry.rb +0 -32
- data/lib/more/facets/reflection.rb +0 -145
- data/lib/more/facets/semaphore.rb +0 -92
- data/lib/more/facets/settings.rb +0 -248
- data/lib/more/facets/snapshot.rb +0 -209
- data/lib/more/facets/sparse_array.rb +0 -809
- data/lib/more/facets/string/mask.rb +0 -278
- data/lib/more/facets/string/obfuscate.rb +0 -65
- data/lib/more/facets/string/stylize.rb +0 -169
- data/lib/more/facets/string/words.rb +0 -167
- data/lib/more/facets/syncarray.rb +0 -114
- data/lib/more/facets/synchash.rb +0 -157
- data/lib/more/facets/typecast.rb +0 -261
- data/lib/more/facets/uninheritable.rb +0 -50
- data/lib/more/facets/xmlhash.rb +0 -112
- data/lib/more/facets/xoxo.rb +0 -259
- data/lib/more/facets/ziputils.rb +0 -490
- data/task/conflicts +0 -63
- data/task/coverage.rake +0 -37
- data/task/methods +0 -49
- data/task/rdoc.rake +0 -17
- data/task/setup.rake +0 -38
- data/task/test.rake +0 -145
- data/test/more/test_advisable.rb +0 -71
- data/test/more/test_association.rb +0 -38
- data/test/more/test_bbcode.rb +0 -21
- data/test/more/test_binreadable.rb +0 -50
- data/test/more/test_buildable.rb +0 -73
- data/test/more/test_classmethods.rb +0 -56
- data/test/more/test_crypt.rb +0 -32
- data/test/more/test_dependency.rb +0 -69
- data/test/more/test_elementwise.rb +0 -25
- data/test/more/test_infinity.rb +0 -40
- data/test/more/test_interval.rb +0 -151
- data/test/more/test_linkedlist.rb +0 -41
- data/test/more/test_lrucache.rb +0 -14
- data/test/more/test_overload.rb +0 -160
- data/test/more/test_paramix.rb +0 -170
- data/test/more/test_prototype.rb +0 -35
- data/test/more/test_snapshot.rb +0 -21
- data/test/more/test_sparsearray.rb +0 -279
- data/test/more/test_syncarray.rb +0 -15
- data/test/more/test_synchash.rb +0 -16
- data/test/more/test_typecast.rb +0 -54
- data/test/more/test_uninheritable.rb +0 -31
- data/test/more/test_xoxo.rb +0 -274
- data/test/test_facets.rb +0 -9
data/lib/more/facets/attr.rb
DELETED
@@ -1,209 +0,0 @@
|
|
1
|
-
class Module
|
2
|
-
|
3
|
-
# Like attr_writer, but the writer method validates the
|
4
|
-
# setting against the given block.
|
5
|
-
#
|
6
|
-
# CREDIT: ?
|
7
|
-
|
8
|
-
def attr_validator(*symbols, &validator)
|
9
|
-
made = []
|
10
|
-
symbols.each do |symbol|
|
11
|
-
define_method "#{symbol}=" do |val|
|
12
|
-
unless validator.call(val)
|
13
|
-
raise ArgumentError, "Invalid value provided for #{symbol}"
|
14
|
-
end
|
15
|
-
instance_variable_set("@#{symbol}", val)
|
16
|
-
end
|
17
|
-
made << "#{symbol}=".to_sym
|
18
|
-
end
|
19
|
-
made
|
20
|
-
end
|
21
|
-
|
22
|
-
# Create aliases for validators.
|
23
|
-
|
24
|
-
def alias_validator(*args)
|
25
|
-
orig = args.last
|
26
|
-
args = args - [orig]
|
27
|
-
args.each do |name|
|
28
|
-
#alias_method(name, orig)
|
29
|
-
alias_method("#{name}=", "#{orig}=")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# TODO Perhaps need to make a check against overriding annotated version.
|
34
|
-
|
35
|
-
# Create an attribute method for both getting
|
36
|
-
# and setting an instance variable.
|
37
|
-
#
|
38
|
-
# attr_setter :a
|
39
|
-
#
|
40
|
-
# _is equivalent to_
|
41
|
-
#
|
42
|
-
# def a(*args)
|
43
|
-
# if args.size > 0
|
44
|
-
# @a = args[0]
|
45
|
-
# self
|
46
|
-
# else
|
47
|
-
# @a
|
48
|
-
# end
|
49
|
-
# end
|
50
|
-
#
|
51
|
-
# CREDIT: Trans
|
52
|
-
|
53
|
-
def attr_setter(*args)
|
54
|
-
code, made = '', []
|
55
|
-
args.each do |a|
|
56
|
-
code << %{
|
57
|
-
def #{a}(*args)
|
58
|
-
args.size > 0 ? ( @#{a}=args[0] ; self ) : @#{a}
|
59
|
-
end
|
60
|
-
}
|
61
|
-
made << "#{a}".to_sym
|
62
|
-
end
|
63
|
-
module_eval code
|
64
|
-
made
|
65
|
-
end
|
66
|
-
|
67
|
-
# Alias an accessor. This create an alias for
|
68
|
-
# both a reader and a writer.
|
69
|
-
#
|
70
|
-
# class X
|
71
|
-
# attr_accessor :a
|
72
|
-
# alias_accessor :b, :a
|
73
|
-
# end
|
74
|
-
#
|
75
|
-
# x = X.new
|
76
|
-
# x.b = 1
|
77
|
-
# x.a #=> 1
|
78
|
-
#
|
79
|
-
# CREDIT: Trans
|
80
|
-
|
81
|
-
def alias_setter(*args)
|
82
|
-
args = args - [orig]
|
83
|
-
args.each do |name|
|
84
|
-
alias_method(name, orig)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# Create a toggle attribute. This creates two methods for
|
89
|
-
# each given name. One is a form of tester and the other
|
90
|
-
# is used to toggle the value.
|
91
|
-
#
|
92
|
-
# attr_accessor! :a
|
93
|
-
#
|
94
|
-
# is equivalent to
|
95
|
-
#
|
96
|
-
# def a?
|
97
|
-
# @a
|
98
|
-
# end
|
99
|
-
#
|
100
|
-
# def a!(value=true)
|
101
|
-
# @a = value
|
102
|
-
# self
|
103
|
-
# end
|
104
|
-
#
|
105
|
-
# CREDIT: Trans
|
106
|
-
|
107
|
-
def attr_accessor!(*args)
|
108
|
-
attr_reader!(*args) + attr_writer!(*args)
|
109
|
-
end
|
110
|
-
alias_method :attr_switcher, :attr_accessor!
|
111
|
-
alias_method :attr_toggler, :attr_accessor!
|
112
|
-
|
113
|
-
# Create aliases for flag accessors.
|
114
|
-
#
|
115
|
-
# CREDIT: Trans
|
116
|
-
|
117
|
-
def alias_accessor!(*args)
|
118
|
-
orig = args.last
|
119
|
-
args = args - [orig]
|
120
|
-
args.each do |name|
|
121
|
-
alias_method("#{name}?", "#{orig}?")
|
122
|
-
alias_method("#{name}!", "#{orig}!")
|
123
|
-
end
|
124
|
-
end
|
125
|
-
alias_method :alias_switcher, :alias_accessor!
|
126
|
-
alias_method :alias_toggler, :alias_accessor!
|
127
|
-
|
128
|
-
# Create an tester attribute. This creates a single method
|
129
|
-
# used to test the attribute for truth.
|
130
|
-
#
|
131
|
-
# attr_reader! :a
|
132
|
-
#
|
133
|
-
# is equivalent to
|
134
|
-
#
|
135
|
-
# def a?
|
136
|
-
# @a ? true : @a
|
137
|
-
# end
|
138
|
-
#
|
139
|
-
def attr_reader!(*args)
|
140
|
-
code, made = '', []
|
141
|
-
args.each do |a|
|
142
|
-
code << %{
|
143
|
-
def #{a}?(truth=nil)
|
144
|
-
@#{a} ? truth || @#{a} : @#{a}
|
145
|
-
end
|
146
|
-
}
|
147
|
-
made << "#{a}?".to_sym
|
148
|
-
end
|
149
|
-
module_eval code
|
150
|
-
made
|
151
|
-
end
|
152
|
-
alias_method :attr_reader?, :attr_reader!
|
153
|
-
alias_method :attr_tester, :attr_reader!
|
154
|
-
|
155
|
-
# Create aliases for flag reader.
|
156
|
-
#
|
157
|
-
# CREDIT: Trans
|
158
|
-
|
159
|
-
def alias_reader!(*args)
|
160
|
-
orig = args.last
|
161
|
-
args = args - [orig]
|
162
|
-
args.each do |name|
|
163
|
-
alias_method("#{name}?", "#{orig}?")
|
164
|
-
end
|
165
|
-
end
|
166
|
-
alias_method :alias_reader?, :alias_reader!
|
167
|
-
alias_method :alias_tester, :alias_reader!
|
168
|
-
|
169
|
-
# Create a flaggable attribute. This creates a single methods
|
170
|
-
# used to set an attribute to "true".
|
171
|
-
#
|
172
|
-
# attr_writer! :a
|
173
|
-
#
|
174
|
-
# is equivalent to
|
175
|
-
#
|
176
|
-
# def a!(value=true)
|
177
|
-
# @a = value
|
178
|
-
# self
|
179
|
-
# end
|
180
|
-
#
|
181
|
-
def attr_writer!(*args)
|
182
|
-
code, made = '', []
|
183
|
-
args.each do |a|
|
184
|
-
code << %{
|
185
|
-
def #{a}!(value=true)
|
186
|
-
@#{a} = value
|
187
|
-
self
|
188
|
-
end
|
189
|
-
}
|
190
|
-
made << "#{a}!".to_sym
|
191
|
-
end
|
192
|
-
module_eval code
|
193
|
-
made
|
194
|
-
end
|
195
|
-
|
196
|
-
# Create aliases for flag writer.
|
197
|
-
#
|
198
|
-
# CREDIT: Trans
|
199
|
-
|
200
|
-
def alias_writer!(*args)
|
201
|
-
orig = args.last
|
202
|
-
args = args - [orig]
|
203
|
-
args.each do |name|
|
204
|
-
alias_method("#{name}!", "#{orig}!")
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
end
|
209
|
-
|
data/lib/more/facets/basex.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
class BaseX
|
2
|
-
|
3
|
-
BASE62 = ["0".."9", "a".."z", "A".."Z"].map { |r| r.to_a }.flatten
|
4
|
-
|
5
|
-
attr :chars, :base, :values
|
6
|
-
|
7
|
-
def initialize(chars=BASE62)
|
8
|
-
@chars = chars
|
9
|
-
@base = @chars.size
|
10
|
-
@values = Hash[*(0...@base).map { |i| [ @chars[i], i ] }.flatten]
|
11
|
-
end
|
12
|
-
|
13
|
-
def encode(byte_string)
|
14
|
-
convert_base(byte_string.unpack("C*"), 256, @base).map { |d|
|
15
|
-
@chars[d]
|
16
|
-
}.join('')
|
17
|
-
end
|
18
|
-
|
19
|
-
def decode(encoded)
|
20
|
-
convert_base(encoded.split('').map { |c|
|
21
|
-
@values[c]
|
22
|
-
}, @base, 256).pack("C*")
|
23
|
-
end
|
24
|
-
|
25
|
-
def convert_base(digits, from_base, to_base)
|
26
|
-
bignum = 0
|
27
|
-
digits.each { |digit| bignum = bignum * from_base + digit }
|
28
|
-
converted = []
|
29
|
-
until bignum.zero?
|
30
|
-
bignum, digit = bignum.divmod to_base
|
31
|
-
converted.push digit
|
32
|
-
end
|
33
|
-
converted.reverse
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
data/lib/more/facets/bbcode.rb
DELETED
@@ -1,397 +0,0 @@
|
|
1
|
-
# = BBCode
|
2
|
-
#
|
3
|
-
# = Synopsis
|
4
|
-
#
|
5
|
-
# The BBCode module helps ease the separation of core and frontend with the
|
6
|
-
# core (or submodules) being still able to say, what colors shall be used
|
7
|
-
# in it's responses. This is achieved by encoding formatting information
|
8
|
-
# using the BBCode tokens. This enables you to "pipe" layout information
|
9
|
-
# such as colors, style, fonttype, size and alignment through the core to
|
10
|
-
# the frontend.
|
11
|
-
#
|
12
|
-
# Additionally it converts markups/codes between ANSI, HTML and BBCode
|
13
|
-
# almost freely ;)
|
14
|
-
#
|
15
|
-
# == Usage
|
16
|
-
#
|
17
|
-
# # Converting a bbcode string to ANSI and XHTML
|
18
|
-
#
|
19
|
-
# str = "this is [COLOR=red]red[/COLOR], this is [B]bold[/B]"
|
20
|
-
# print( BBCode.bbcode_to_ansi(str) )
|
21
|
-
# print( BBCode.bbcode_to_html(str) )
|
22
|
-
#
|
23
|
-
# == Authors
|
24
|
-
#
|
25
|
-
# * Thomas-Ivo Heinen
|
26
|
-
#
|
27
|
-
# == Copying
|
28
|
-
#
|
29
|
-
# Copyright (c) 2002 Thomas-Ivo Heinen
|
30
|
-
#
|
31
|
-
# Ruby License
|
32
|
-
#
|
33
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
34
|
-
# software under the same terms as Ruby.
|
35
|
-
#
|
36
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
37
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
38
|
-
# FOR A PARTICULAR PURPOSE.
|
39
|
-
|
40
|
-
# = BBCode
|
41
|
-
#
|
42
|
-
# The BBCode module helps ease the separation of core and frontend with the
|
43
|
-
# core (or submodules) being still able to say, what colors shall be used
|
44
|
-
# in it's responses. This is achieved by encoding formatting information
|
45
|
-
# using the BBCode tokens. This enables you to "pipe" layout information
|
46
|
-
# such as colors, style, fonttype, size and alignment through the core to
|
47
|
-
# the frontend.
|
48
|
-
#
|
49
|
-
# Additionally it converts markups/codes between ANSI, HTML and BBCode
|
50
|
-
# almost freely ;)
|
51
|
-
#
|
52
|
-
# == Usage
|
53
|
-
#
|
54
|
-
# # Converting a bbcode string to ANSI and XHTML
|
55
|
-
#
|
56
|
-
# str = "this is [COLOR=red]red[/COLOR], this is [B]bold[/B]"
|
57
|
-
# print( BBCode.bbcode_to_ansi(str) )
|
58
|
-
# print( BBCode.bbcode_to_html(str) )
|
59
|
-
#
|
60
|
-
module BBCode
|
61
|
-
|
62
|
-
## ANSIname => ANSIcode LUT
|
63
|
-
ANSINAME2CODE= { "reset" => "\e[0m", "bold" => "\e[1m",
|
64
|
-
"underline" => "\e[4m", "blink" => "\e[5m",
|
65
|
-
"reverse" => "\e[7m", "invisible" => "\e[8m",
|
66
|
-
"black" => "\e[0;30m", "darkgrey" => "\e[1;30m",
|
67
|
-
"red" => "\e[0;31m", "lightred" => "\e[1;31m",
|
68
|
-
"green" => "\e[0;32m", "lightgreen" => "\e[1;32m",
|
69
|
-
"brown" => "\e[0;33m", "yellow" => "\e[1;33m",
|
70
|
-
"blue" => "\e[0;34m", "lightblue" => "\e[1;34m",
|
71
|
-
"purple" => "\e[0;35m", "magenta" => "\e[1;35m",
|
72
|
-
"cyan" => "\e[1;36m", "lightcyan" => "\e[1;36m",
|
73
|
-
"grey" => "\e[0;37m", "white" => "\e[1;37m",
|
74
|
-
"bgblack" => "\e[40m", "bgred" => "\e[41m",
|
75
|
-
"bggreen" => "\e[42m", "bgyellow" => "\e[43m",
|
76
|
-
"bgblue" => "\e[44m", "bgmagenta" => "\e[45m",
|
77
|
-
"bgcyan" => "\e[46m", "bgwhite" => "\e[47m"
|
78
|
-
}
|
79
|
-
|
80
|
-
## BBColor => ANSIname LUT
|
81
|
-
BBCOLOR2ANSI = { "skyblue" => "blue", "royalblue" => "blue",
|
82
|
-
"blue" => "blue", "darkblue" => "blue",
|
83
|
-
"orange" => "red", "orangered" => "red",
|
84
|
-
"crimson" => "red", "red" => "lightred",
|
85
|
-
"firebrick" => "red", "darkred" => "red",
|
86
|
-
"green" => "green", "limegreen" => "green",
|
87
|
-
"seagreen" => "green", "darkgreen" => "green",
|
88
|
-
"deeppink" => "magenta", "tomato" => "red",
|
89
|
-
"coral" => "cyan", "purple" => "purple",
|
90
|
-
"indigo" => "blue", "burlywood" => "red",
|
91
|
-
"sandybrown"=> "red", "sierra" => "sierra",
|
92
|
-
"chocolate" => "brown", "teal" => "teal",
|
93
|
-
"silver" => "white",
|
94
|
-
"black" => "black", "yellow" => "yellow",
|
95
|
-
"magenta" => "magenta", "cyan" => "cyan",
|
96
|
-
"white" => "white"
|
97
|
-
}
|
98
|
-
|
99
|
-
## ANSInames => BBCode LUT
|
100
|
-
ANSINAME2BBCODE = { "bold" => "B", "underline" => "U", "reverse" => "I",
|
101
|
-
|
102
|
-
"red" => "COLOR=red", "blue" => "COLOR=blue",
|
103
|
-
"green" => "COLOR=green", "cyan" => "COLOR=cyan",
|
104
|
-
"magenta"=> "COLOR=deeppink", "purple" => "COLOR=purple",
|
105
|
-
"black" => "COLOR=black", "white" => "COLOR=white",
|
106
|
-
"yellow" => "COLOR=yellow", "brown" => "COLOR=chocolate"
|
107
|
-
}
|
108
|
-
|
109
|
-
## Needed for alignments
|
110
|
-
@@width = 80
|
111
|
-
|
112
|
-
|
113
|
-
# ---------------------------
|
114
|
-
|
115
|
-
# Returns the ANSI sequence for given color, if existant
|
116
|
-
def BBCode.ansi(colorname)
|
117
|
-
colorname.strip!
|
118
|
-
return ANSINAME2CODE[ colorname.downcase ]
|
119
|
-
end
|
120
|
-
|
121
|
-
# --- strip_bbcode( string )
|
122
|
-
# Will strip any BBCode tags from the given string.
|
123
|
-
def BBCode.strip_bbcode(string)
|
124
|
-
string.strip!
|
125
|
-
return string.gsub(/\[[A-Za-z0-9\/=]+\]/, "")
|
126
|
-
end
|
127
|
-
|
128
|
-
# Returns the string with all ansi escape sequences converted to BBCodes
|
129
|
-
def BBCode.ansi_to_bbcode(string)
|
130
|
-
return "" if string.nil? || string.to_s.strip.empty?
|
131
|
-
result = ""
|
132
|
-
tagstack = []
|
133
|
-
|
134
|
-
## Iterate over input lines
|
135
|
-
string.split("\n").each do |line|
|
136
|
-
ansi = line.scan(/\e\[[0-9;]+m/)
|
137
|
-
continue if ansi.nil? || ansi.empty?
|
138
|
-
|
139
|
-
## Iterate over found ansi sequences
|
140
|
-
ansi.each do |seq|
|
141
|
-
ansiname = ANSINAME2CODE.invert["#{seq}"]
|
142
|
-
|
143
|
-
## Pop last tag and form closing tag
|
144
|
-
if ansiname == "reset"
|
145
|
-
lasttag = tagstack.pop
|
146
|
-
bbname = "/" + String.new( lasttag.split("=")[0] )
|
147
|
-
|
148
|
-
## Get corresponding BBCode tag + Push to stack
|
149
|
-
else
|
150
|
-
bbname = ANSINAME2BBCODE[ansiname]
|
151
|
-
tagstack.push(bbname)
|
152
|
-
end
|
153
|
-
|
154
|
-
## Replace ansi sequence by BBCode tag
|
155
|
-
replace = sprintf("[%s]", bbname)
|
156
|
-
line.sub!("#{Regexp.quote(seq)}", replace)
|
157
|
-
end
|
158
|
-
|
159
|
-
## Append converted line
|
160
|
-
result << sprintf("%s\n", line)
|
161
|
-
end
|
162
|
-
|
163
|
-
|
164
|
-
## Some tags are unclosed
|
165
|
-
while !tagstack.empty?
|
166
|
-
result << sprintf("[/%s]", String.new(tagstack.pop.split("=")[0]) )
|
167
|
-
end
|
168
|
-
|
169
|
-
return result
|
170
|
-
end
|
171
|
-
|
172
|
-
# Converts a BBCode string to one with ANSI sequences.
|
173
|
-
# Returns the string with all formatting instructions in BBCodes converted
|
174
|
-
# to ANSI code sequences / aligned with spaces to specified width.
|
175
|
-
def BBCode.bbcode_to_ansi(string, usecolors = true)
|
176
|
-
return "" if string.nil? || string.to_s.strip.empty?
|
177
|
-
result = ""
|
178
|
-
|
179
|
-
return BBCode.strip_bbcode(string) if !usecolors
|
180
|
-
|
181
|
-
## Iterate over lines
|
182
|
-
string.split("\n").each do |line|
|
183
|
-
|
184
|
-
## TODO: stacking? other styles!
|
185
|
-
ANSINAME2BBCODE.each do |key,val|
|
186
|
-
line.gsub!(/\[#{val}\]/, ANSINAME2CODE[key])
|
187
|
-
line.gsub!(/\[\/#{val}\]/, ANSINAME2CODE["reset"])
|
188
|
-
end
|
189
|
-
|
190
|
-
## Fonttypes and sizes not available
|
191
|
-
line.gsub!(/\[SIZE=\d\]/, "")
|
192
|
-
line.gsub!(/\[\/SIZE\]/, "")
|
193
|
-
line.gsub!(/\[FONT=[^\]]*\]/, "")
|
194
|
-
line.gsub!(/\[\/FONT\]/, "")
|
195
|
-
|
196
|
-
## Color-mapping
|
197
|
-
colors = line.scan(/\[COLOR=(.*?)\]/i)
|
198
|
-
colors = colors.collect{|s| s[0].to_s} if !colors.nil?
|
199
|
-
colors.each do |col|
|
200
|
-
name = BBCOLOR2ANSI[col.downcase]
|
201
|
-
name = BBCOLOR2ANSI["white"] if name.nil?
|
202
|
-
code = ANSINAME2CODE[name]
|
203
|
-
|
204
|
-
line.gsub!(/\[COLOR=#{col}\]/i, code)
|
205
|
-
end
|
206
|
-
line.gsub!(/\[\/COLOR\]/, ANSINAME2CODE["reset"])
|
207
|
-
|
208
|
-
## TODO: Alignment
|
209
|
-
## TODO: IMGs
|
210
|
-
## TODO: EMAILs
|
211
|
-
## TODO: URLs
|
212
|
-
## TODO: QUOTEs
|
213
|
-
## TODO: LISTs
|
214
|
-
|
215
|
-
result << sprintf("%s\n", line)
|
216
|
-
end
|
217
|
-
|
218
|
-
return result
|
219
|
-
end
|
220
|
-
|
221
|
-
# Converts a HTML string into one with BBCode markup (TODO)
|
222
|
-
# Returns the (X)HTML markup string as BBCode
|
223
|
-
def BBCode.html_to_bbcode(string)
|
224
|
-
return "" if string.nil? || string.to_s.strip.empty?
|
225
|
-
result = ""
|
226
|
-
|
227
|
-
## Iterate over lines
|
228
|
-
string.split(/<br *\/?>/i).each do |line|
|
229
|
-
styles = { "strong" => "b", "b" => "b",
|
230
|
-
"em" => "i", "i" => "i",
|
231
|
-
"u" => "u" }
|
232
|
-
|
233
|
-
## preserve B, I, U
|
234
|
-
styles.each do |html,code|
|
235
|
-
line.gsub!(/<#{html}>/i, "[#{code.upcase}]")
|
236
|
-
line.gsub!(/<\/#{html}>/i, "[/#{code.upcase}]")
|
237
|
-
end
|
238
|
-
|
239
|
-
## TODO: COLORs
|
240
|
-
## TODO: SIZEs
|
241
|
-
## TODO: FONTs
|
242
|
-
|
243
|
-
## EMAIL
|
244
|
-
line.gsub!(/<a +href *= *\"mailto:(.*?)\".*?>.*?<\/a>/i, "[EMAIL]\\1[/EMAIL]")
|
245
|
-
|
246
|
-
## URL
|
247
|
-
line.gsub!(/<a +href *= *\"((?:https?|ftp):\/\/.*?)\".*?>(.*?)<\/a>/i, "[URL=\\1]\\2[/URL]")
|
248
|
-
|
249
|
-
## Other refs + closing tags => throw away
|
250
|
-
line.gsub!(/<a +href *= *\".*?\".*?>/i, "")
|
251
|
-
line.gsub!(/<\/a>/i, "")
|
252
|
-
|
253
|
-
## IMG
|
254
|
-
#line.gsub!(/<img +src *= *\"(.*?)\".*?\/?>/i, "[IMG=\\1]")
|
255
|
-
line.gsub!(/<img +src *= *\"(.*?)\".*?\/?>/i, "[IMG]\\1[/IMG]")
|
256
|
-
|
257
|
-
## CENTER (right/left??)
|
258
|
-
line.gsub!(/<center>/i, "[ALIGN=center]")
|
259
|
-
line.gsub!(/<\/center>/i, "[/ALIGN]")
|
260
|
-
|
261
|
-
## QUOTE
|
262
|
-
line.gsub!(/<(?:xmp|pre)>/i, "[QUOTE]")
|
263
|
-
line.gsub!(/<\/(?:xmp|pre)>/i, "[/QUOTE]")
|
264
|
-
|
265
|
-
## LIST
|
266
|
-
line.gsub!(/<ul>/i, "\n[LIST]\n")
|
267
|
-
line.gsub!(/<\/ul>/i, "\n[/LIST]\n")
|
268
|
-
line.gsub!(/<li *\/?> */i, "\n[*] ")
|
269
|
-
|
270
|
-
## Unkown tags => throw away
|
271
|
-
line.gsub!(/<.*? *\/?>/, "")
|
272
|
-
|
273
|
-
result << sprintf("%s<br />\n", line)
|
274
|
-
end
|
275
|
-
|
276
|
-
return result.gsub!(/<br *\/?>/i, "\n")
|
277
|
-
end
|
278
|
-
|
279
|
-
# Converts a BBCode string to one with HTML markup.
|
280
|
-
# Returns the string with all formatting instructions in
|
281
|
-
# BBCodes converted to XHTML markups.
|
282
|
-
def BBCode.bbcode_to_html(string)
|
283
|
-
return "" if string.nil? || string.to_s.strip.empty?
|
284
|
-
result = ""
|
285
|
-
quote = 0
|
286
|
-
|
287
|
-
## Iterate over lines
|
288
|
-
string.split("\n").each do |line|
|
289
|
-
styles = { "b" => "strong", "i" => "em", "u" => "u" }
|
290
|
-
|
291
|
-
## preserve B, I, U
|
292
|
-
styles.each do |code,html|
|
293
|
-
line.gsub!(/\[#{code}\]/i, "<#{html}>")
|
294
|
-
line.gsub!(/\[\/#{code}\]/i, "</#{html}>")
|
295
|
-
end
|
296
|
-
|
297
|
-
## COLOR => font color=... (TODO: should be numeric!)
|
298
|
-
line.gsub!(/\[COLOR=(.*?)\]/i, "<font color=\"\\1\">")
|
299
|
-
line.gsub!(/\[\/COLOR\]/i, "</font>")
|
300
|
-
|
301
|
-
## SIZE => font size=...
|
302
|
-
line.gsub!(/\[SIZE=(.*?)\]/i, "<font size=\"\\1\">")
|
303
|
-
line.gsub!(/\[\/SIZE\]/i, "</font>")
|
304
|
-
|
305
|
-
## URL
|
306
|
-
line.gsub!(/\[URL\]([^\[]+?)\[\/URL\]/i, "<a href=\"\\1\">\\1</a>")
|
307
|
-
line.gsub!(/\[URL=(.*?)\](.+?)\[\/URL\]/i, "<a href=\"\\1\">\\2</a>")
|
308
|
-
|
309
|
-
## IMG
|
310
|
-
line.gsub!(/\[IMG=(.*?)\]/i, "<img src=\"\\1\" />")
|
311
|
-
|
312
|
-
## ALIGN=center (TODO: right, left)
|
313
|
-
line.gsub!(/\[ALIGN=center\]/i, "<center>")
|
314
|
-
line.gsub!(/\[ALIGN=right\]/i, "<center>")
|
315
|
-
line.gsub!(/\[ALIGN=left\]/i, "<center>")
|
316
|
-
line.gsub!(/\[\/ALIGN\]/i, "</center>")
|
317
|
-
|
318
|
-
## QUOTE
|
319
|
-
quote+=1 if line =~ /\[QUOTE\]/i
|
320
|
-
quote-=1 if (line =~ /\[\/QUOTE\]/i) && (quote > -1)
|
321
|
-
line.gsub!(/\[QUOTE\]/i, "<pre>\n")
|
322
|
-
line.gsub!(/\[\/QUOTE\]/i, "</pre>\n")
|
323
|
-
line.gsub!(/^/, ">"*quote) if quote > 0
|
324
|
-
|
325
|
-
## EMAIL
|
326
|
-
line.gsub!(/\[EMAIL\](.*?)\[\/EMAIL\]/i, "<a href=\"mailto:\\1\">\\1</a>")
|
327
|
-
|
328
|
-
## LIST (TODO: LIST=1, LIST=A)
|
329
|
-
line.gsub!(/\[LIST(?:=(.*?))?\]/i, "\n<ul>\n")
|
330
|
-
line.gsub!(/\[\/LIST\]/i, "\n</ul>\n")
|
331
|
-
line.gsub!(/\[\*\]/i, "\n<li />")
|
332
|
-
|
333
|
-
## FONT => font ??????
|
334
|
-
## ?BLUR?, FADE?
|
335
|
-
|
336
|
-
result << sprintf("%s<br />\n", line)
|
337
|
-
end
|
338
|
-
|
339
|
-
return result
|
340
|
-
end
|
341
|
-
|
342
|
-
|
343
|
-
# -- Transitive methods ---------------
|
344
|
-
|
345
|
-
# Converts a ANSI string to one with HTML markup.
|
346
|
-
# Returns the string with ANSI code sequences converted to XHTML markup.
|
347
|
-
def BBCode.ansi_to_html(string)
|
348
|
-
bbcoded = BBCode.ansi_to_bbcode(string )
|
349
|
-
htmled = BBCode.bbcode_to_html(bbcoded)
|
350
|
-
|
351
|
-
return htmled
|
352
|
-
end
|
353
|
-
|
354
|
-
# Returns the (X)HTML markup code as ANSI sequences
|
355
|
-
def BBCode.html_to_ansi(string)
|
356
|
-
bbcoded = BBCode.html_to_bbcode(string )
|
357
|
-
ansied = BBCode.bbcode_to_ansi(bbcoded)
|
358
|
-
|
359
|
-
return ansied
|
360
|
-
end
|
361
|
-
|
362
|
-
end #module BBCode
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
# _____ _
|
367
|
-
# |_ _|__ ___| |_
|
368
|
-
# | |/ _ \/ __| __|
|
369
|
-
# | | __/\__ \ |_
|
370
|
-
# |_|\___||___/\__|
|
371
|
-
#
|
372
|
-
|
373
|
-
=begin testing
|
374
|
-
|
375
|
-
require 'test/unit'
|
376
|
-
|
377
|
-
class TC_BBCode < Test::Unit::TestCase
|
378
|
-
|
379
|
-
def test_to_ansi
|
380
|
-
str = "this is [COLOR=red]red[/COLOR], this is [B]bold[/B]"
|
381
|
-
out = "this is \e[0;31mred\e[0m, this is \e[1mbold\e[0m\n"
|
382
|
-
assert_equal( out, BBCode.bbcode_to_ansi(str) )
|
383
|
-
end
|
384
|
-
|
385
|
-
def test_to_html
|
386
|
-
str = "this is [COLOR=red]red[/COLOR], this is [B]bold[/B]"
|
387
|
-
out = "this is <font color=\"red\">red</font>, this is <strong>bold</strong><br />\n"
|
388
|
-
assert_equal( out, BBCode.bbcode_to_html(str) )
|
389
|
-
end
|
390
|
-
|
391
|
-
end
|
392
|
-
|
393
|
-
=end
|
394
|
-
|
395
|
-
|
396
|
-
# CREDIT Thomas-Ivo Heinen
|
397
|
-
|