libxslt-ruby 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +16 -37
- data/ext/libxslt/extconf.rb +18 -0
- data/ext/libxslt/libxslt.c +3 -0
- data/ext/libxslt/libxslt.h +1 -1
- data/ext/libxslt/ruby_xslt_stylesheet.c +6 -6
- data/ext/libxslt/version.h +3 -3
- data/ext/mingw/Rakefile +18 -32
- data/ext/vc/libxslt_ruby.vcproj +2 -2
- data/test/files/commentary.dtd +34 -0
- data/{lib/text.xml → test/files/fuzface.xml} +154 -129
- data/test/files/fuzface.xsl +4 -0
- data/test/files/params.xml +2 -0
- data/test/files/params.xsl +11 -0
- data/test/files/ramblings.xsl +46 -0
- data/test/test_deprecated.rb +97 -0
- data/test/test_libxslt.rb +21 -0
- data/test/test_stylesheet.rb +108 -0
- data/test/test_suite.rb +3 -0
- metadata +14 -33
- data/doc/classes/LibXSLT.html +0 -126
- data/doc/classes/LibXSLT/XSLT.html +0 -196
- data/doc/classes/LibXSLT/XSLT/Stylesheet.html +0 -250
- data/doc/classes/LibXSLT/XSLT/TransformContext.html +0 -117
- data/doc/classes/LibXSLT/XSLTError.html +0 -131
- data/doc/classes/XSLT.html +0 -125
- data/doc/created.rid +0 -1
- data/doc/files/CHANGES.html +0 -204
- data/doc/files/LICENSE.html +0 -133
- data/doc/files/README.html +0 -302
- data/doc/files/ext/libxslt/libxslt_c.html +0 -101
- data/doc/files/ext/libxslt/ruby_xslt_stylesheet_c.html +0 -101
- data/doc/files/ext/libxslt/ruby_xslt_transform_context_c.html +0 -101
- data/doc/files/lib/libxslt/deprecated_rb.html +0 -101
- data/doc/files/lib/libxslt_rb.html +0 -116
- data/doc/files/lib/xslt_rb.html +0 -135
- data/doc/fr_class_index.html +0 -32
- data/doc/fr_file_index.html +0 -35
- data/doc/fr_method_index.html +0 -28
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ FILES = FileList[
|
|
18
18
|
'ext/mingw/Rakefile',
|
19
19
|
'ext/vc/*.sln',
|
20
20
|
'ext/vc/*.vcproj',
|
21
|
-
'
|
21
|
+
'test/**/*'
|
22
22
|
]
|
23
23
|
|
24
24
|
# Default GEM Specification
|
@@ -42,7 +42,7 @@ default_spec = Gem::Specification.new do |spec|
|
|
42
42
|
|
43
43
|
spec.author = "Charlie Savage"
|
44
44
|
spec.email = "libxml-devel@rubyforge.org"
|
45
|
-
spec.add_dependency('libxml-ruby','>=0.
|
45
|
+
spec.add_dependency('libxml-ruby','>=0.9.0')
|
46
46
|
spec.platform = Gem::Platform::RUBY
|
47
47
|
spec.require_paths = ["lib", "ext/libxslt"]
|
48
48
|
|
@@ -62,39 +62,22 @@ end
|
|
62
62
|
Rake::GemPackageTask.new(default_spec) do |pkg|
|
63
63
|
pkg.package_dir = 'admin/pkg'
|
64
64
|
pkg.need_tar = true
|
65
|
-
pkg.need_zip = true
|
66
65
|
end
|
67
66
|
|
68
|
-
# ------- Windows
|
69
|
-
|
70
|
-
|
67
|
+
# ------- Windows GEM ----------
|
68
|
+
if RUBY_PLATFORM.match(/win32/)
|
69
|
+
binaries = (FileList['ext/mingw/*.so',
|
70
|
+
'ext/mingw/*.dll*'])
|
71
71
|
|
72
|
-
# Windows specification
|
73
|
-
win_spec = default_spec.clone
|
74
|
-
win_spec.extensions = []
|
75
|
-
win_spec.platform = Gem::Platform::CURRENT
|
76
|
-
win_spec.files += binaries.
|
72
|
+
# Windows specification
|
73
|
+
win_spec = default_spec.clone
|
74
|
+
win_spec.extensions = ['ext/mingw/Rakefile']
|
75
|
+
win_spec.platform = Gem::Platform::CURRENT
|
76
|
+
win_spec.files += binaries.to_a
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
# since there are no dependencies of msvcr80.dll
|
82
|
-
current_dir = File.expand_path(File.dirname(__FILE__))
|
83
|
-
|
84
|
-
binaries.each do |binaryname|
|
85
|
-
target = File.join(current_dir, 'lib', File.basename(binaryname))
|
86
|
-
cp(binaryname, target)
|
87
|
-
end
|
88
|
-
|
89
|
-
# Create the gem, then move it to pkg
|
90
|
-
Gem::Builder.new(win_spec).build
|
91
|
-
gem_file = "#{win_spec.name}-#{win_spec.version}-#{win_spec.platform}.gem"
|
92
|
-
mv(gem_file, "admin/pkg/#{gem_file}")
|
93
|
-
|
94
|
-
# Remove win extension from top level directory
|
95
|
-
binaries.each do |binaryname|
|
96
|
-
target = File.join(current_dir, 'lib', File.basename(binaryname))
|
97
|
-
rm(target)
|
78
|
+
# Rake task to build the windows package
|
79
|
+
Rake::GemPackageTask.new(win_spec) do |pkg|
|
80
|
+
pkg.package_dir = 'admin/pkg'
|
98
81
|
end
|
99
82
|
end
|
100
83
|
|
@@ -115,15 +98,11 @@ Rake::RDocTask.new("rdoc") do |rdoc|
|
|
115
98
|
'LICENSE')
|
116
99
|
end
|
117
100
|
|
118
|
-
task :package => :rdoc
|
119
|
-
task :package => :create_win32_gem
|
120
|
-
task :default => :package
|
121
101
|
|
122
102
|
Rake::TestTask.new do |t|
|
123
103
|
t.libs << "test"
|
124
104
|
t.libs << "ext"
|
125
105
|
end
|
126
106
|
|
127
|
-
|
128
|
-
|
129
|
-
end
|
107
|
+
task :package => :rdoc
|
108
|
+
task :default => :package
|
data/ext/libxslt/extconf.rb
CHANGED
@@ -85,6 +85,24 @@ need libxslt.
|
|
85
85
|
EOL
|
86
86
|
end
|
87
87
|
|
88
|
+
unless (have_library('exslt','exsltLibexsltVersion') or
|
89
|
+
find_library('exslt', 'exsltLibexsltVersion', '/opt/lib', '/usr/local/lib', '/usr/lib')) and
|
90
|
+
(have_header('exslt.h') or
|
91
|
+
find_header('exslt.h',
|
92
|
+
'/opt/include/libexslt',
|
93
|
+
'/usr/local/include/libexslt',
|
94
|
+
'/usr/include/libexslt'))
|
95
|
+
crash(<<EOL)
|
96
|
+
need libexslt.
|
97
|
+
|
98
|
+
Install the library or try one of the following options to extconf.rb:
|
99
|
+
|
100
|
+
--with-exslt-dir=/path/to/libexslt
|
101
|
+
--with-exslt-lib=/path/to/libexslt/lib
|
102
|
+
--with-exslt-include=/path/to/libexslt/include
|
103
|
+
EOL
|
104
|
+
end
|
105
|
+
|
88
106
|
unless have_header('libxml/ruby_libxml.h') and
|
89
107
|
have_header('libxml/ruby_xml_document.h')
|
90
108
|
crash(<<EOL)
|
data/ext/libxslt/libxslt.c
CHANGED
data/ext/libxslt/libxslt.h
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
#include "ruby_xslt_stylesheet.h"
|
20
20
|
#include "ruby_xslt_transform_context.h"
|
21
21
|
|
22
|
-
#include "version.h"
|
22
|
+
#include "version.h"
|
23
23
|
|
24
24
|
#if ((RUBY_LIBXML_VER_MAJ != RUBY_LIBXSLT_VER_MAJ) || (RUBY_LIBXML_VER_MIN != RUBY_LIBXSLT_VER_MIN))
|
25
25
|
#error "Incompatible LibXML-Ruby headers - please install same major/micro version"
|
@@ -50,7 +50,7 @@ ruby_xslt_stylesheet_alloc(VALUE klass) {
|
|
50
50
|
*/
|
51
51
|
VALUE
|
52
52
|
ruby_xslt_stylesheet_initialize(VALUE self, VALUE document) {
|
53
|
-
|
53
|
+
xmlDocPtr xdoc;
|
54
54
|
xmlDocPtr xcopy;
|
55
55
|
xsltStylesheetPtr xstylesheet;
|
56
56
|
|
@@ -65,8 +65,8 @@ ruby_xslt_stylesheet_initialize(VALUE self, VALUE document) {
|
|
65
65
|
* has to be updated to always check and see if the document is
|
66
66
|
* still valid. That's all doable, but seems like a pain, so
|
67
67
|
* just copy the document for now. */
|
68
|
-
Data_Get_Struct(document,
|
69
|
-
xcopy = xmlCopyDoc(
|
68
|
+
Data_Get_Struct(document, xmlDoc, xdoc);
|
69
|
+
xcopy = xmlCopyDoc(xdoc, 1);
|
70
70
|
xstylesheet = xsltParseStylesheetDoc(xcopy);
|
71
71
|
xstylesheet->_private = (void *)self;
|
72
72
|
DATA_PTR(self) = xstylesheet;
|
@@ -122,7 +122,7 @@ ruby_xslt_coerce_params(VALUE params) {
|
|
122
122
|
*/
|
123
123
|
VALUE
|
124
124
|
ruby_xslt_stylesheet_apply(int argc, VALUE *argv, VALUE self) {
|
125
|
-
|
125
|
+
xmlDocPtr xdoc;
|
126
126
|
xsltStylesheetPtr xstylesheet;
|
127
127
|
xmlDocPtr result;
|
128
128
|
VALUE document;
|
@@ -145,10 +145,10 @@ ruby_xslt_stylesheet_apply(int argc, VALUE *argv, VALUE self) {
|
|
145
145
|
rb_funcall(params, rb_intern("flatten!"), 0);
|
146
146
|
pParams = ruby_xslt_coerce_params(params);
|
147
147
|
|
148
|
-
Data_Get_Struct(document,
|
148
|
+
Data_Get_Struct(document, xmlDoc, xdoc);
|
149
149
|
Data_Get_Struct(self, xsltStylesheet, xstylesheet);
|
150
150
|
|
151
|
-
result = xsltApplyStylesheet(xstylesheet,
|
151
|
+
result = xsltApplyStylesheet(xstylesheet, xdoc, (const char**)pParams);
|
152
152
|
|
153
153
|
if (!result)
|
154
154
|
rb_raise(eXSLTError, "Transformation failed");
|
data/ext/libxslt/version.h
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#define RUBY_LIBXSLT_VERSION "0.
|
1
|
+
#define RUBY_LIBXSLT_VERSION "0.9.0"
|
2
2
|
#define RUBY_LIBXSLT_VERNUM 0
|
3
3
|
#define RUBY_LIBXSLT_VER_MAJ 0
|
4
|
-
#define RUBY_LIBXSLT_VER_MIN
|
5
|
-
#define RUBY_LIBXSLT_VER_MIC
|
4
|
+
#define RUBY_LIBXSLT_VER_MIN 9
|
5
|
+
#define RUBY_LIBXSLT_VER_MIC 0
|
data/ext/mingw/Rakefile
CHANGED
@@ -3,40 +3,26 @@
|
|
3
3
|
# built with VC++ while here we want to build
|
4
4
|
# with MingW. So just roll our own...
|
5
5
|
|
6
|
-
require '
|
7
|
-
require 'rake/clean'
|
6
|
+
require 'fileutils'
|
8
7
|
require 'rbconfig'
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
SRC = FileList['../libxslt/*.c']
|
27
|
-
OBJ = SRC.collect do |file_name|
|
28
|
-
File.basename(file_name).ext('o')
|
29
|
-
end
|
30
|
-
|
31
|
-
SRC.each do |srcfile|
|
32
|
-
objfile = File.basename(srcfile).ext('o')
|
33
|
-
file objfile => srcfile do
|
34
|
-
command = "gcc -c -fPIC -O2 -Wall -o #{objfile} -I/usr/local/include -I../../rlibxml/ext #{srcfile} -I#{LIBXML_RUBY_DIR}/ext -I#{RUBY_INCLUDE_DIR}"
|
35
|
-
sh "sh -c '#{command}'"
|
9
|
+
EXTENSION_NAME = "libxslt_ruby.#{Config::CONFIG["DLEXT"]}"
|
10
|
+
|
11
|
+
# This is called when the Windows GEM is installed!
|
12
|
+
task :install do
|
13
|
+
# Gems will pass these two environment variables:
|
14
|
+
# RUBYARCHDIR=#{dest_path}
|
15
|
+
# RUBYLIBDIR=#{dest_path}
|
16
|
+
|
17
|
+
dest_path = ENV['RUBYLIBDIR']
|
18
|
+
|
19
|
+
# Copy the extension
|
20
|
+
cp(EXTENSION_NAME, dest_path)
|
21
|
+
|
22
|
+
# Copy dllss
|
23
|
+
Dir.glob('*.dll').each do |dll|
|
24
|
+
cp(dll, dest_path)
|
36
25
|
end
|
37
26
|
end
|
38
27
|
|
39
|
-
|
40
|
-
command = "gcc -shared -o #{EXTENSION_NAME} -L#{LIBXML_RUBY_DIR}/lib -L/usr/local/lib #{OBJ} -lxml_ruby -lxslt -lxml2 #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
|
41
|
-
sh "sh -c '#{command}'"
|
42
|
-
end
|
28
|
+
task :default => :install
|
data/ext/vc/libxslt_ruby.vcproj
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
<Configurations>
|
19
19
|
<Configuration
|
20
20
|
Name="Debug|Win32"
|
21
|
-
OutputDirectory="C:\Development\ruby\lib\ruby\gems\1.8\gems\
|
21
|
+
OutputDirectory="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.8.2-x86-mswin32-60\lib"
|
22
22
|
IntermediateDirectory="$(ConfigurationName)"
|
23
23
|
ConfigurationType="2"
|
24
24
|
CharacterSet="1"
|
@@ -63,7 +63,7 @@
|
|
63
63
|
<Tool
|
64
64
|
Name="VCLinkerTool"
|
65
65
|
AdditionalDependencies="msvcrt-ruby18.lib libxml2.lib libxslt.lib libexslt.lib"
|
66
|
-
OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.
|
66
|
+
OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.8.3-x86-mswin32-60\lib\$(ProjectName).so"
|
67
67
|
LinkIncremental="2"
|
68
68
|
AdditionalLibraryDirectories="C:\Development\ruby\lib;C:\Development\msys\local\lib"
|
69
69
|
GenerateDebugInformation="true"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<!ELEMENT commentary (meta, body)>
|
2
|
+
<!ELEMENT meta (author, version, date, id, title, subtitle?)>
|
3
|
+
|
4
|
+
<!-- Metadata about the requirements -->
|
5
|
+
<!ENTITY % string "#PCDATA">
|
6
|
+
<!ENTITY % character "#PCDATA">
|
7
|
+
<!ENTITY % letter "#PCDATA">
|
8
|
+
<!ENTITY % number_att "CDATA">
|
9
|
+
|
10
|
+
|
11
|
+
<!ELEMENT author (first_name, last_name, email)>
|
12
|
+
|
13
|
+
<!ELEMENT first_name (%string;)>
|
14
|
+
<!ELEMENT last_name (%string;)>
|
15
|
+
<!ELEMENT email (%string;)>
|
16
|
+
|
17
|
+
<!ELEMENT version (#PCDATA)>
|
18
|
+
<!ELEMENT date (#PCDATA)>
|
19
|
+
<!ELEMENT id (#PCDATA)>
|
20
|
+
<!ELEMENT title (#PCDATA)>
|
21
|
+
<!ELEMENT subtitle (#PCDATA)>
|
22
|
+
|
23
|
+
<!ELEMENT body (para+)>
|
24
|
+
|
25
|
+
|
26
|
+
<!ELEMENT para (#PCDATA|thought|url|ol)*>
|
27
|
+
<!ATTLIST para
|
28
|
+
style (default|ps) "default">
|
29
|
+
|
30
|
+
<!ELEMENT ol (li+)>
|
31
|
+
<!ELEMENT li (#PCDATA)>
|
32
|
+
<!ELEMENT url (#PCDATA)>
|
33
|
+
<!ELEMENT thought (#PCDATA)>
|
34
|
+
|
@@ -1,129 +1,154 @@
|
|
1
|
-
<?xml version="1.0"?>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
<
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<?xml-stylesheet href="fuzface.xsl" type="text/xsl"?>
|
3
|
+
|
4
|
+
<!DOCTYPE commentary SYSTEM "commentary.dtd">
|
5
|
+
|
6
|
+
<commentary>
|
7
|
+
<meta>
|
8
|
+
<author>
|
9
|
+
<first_name>Sean</first_name>
|
10
|
+
<last_name>Chittenden</last_name>
|
11
|
+
<email>sean@chittenden.org</email>
|
12
|
+
</author>
|
13
|
+
<version>$Version$</version>
|
14
|
+
<date>$Date: 2008-07-09 23:35:19 -0600 (Wed, 09 Jul 2008) $</date>
|
15
|
+
<id>$Id: fuzface.xml 58 2008-07-10 05:35:19Z cfis $</id>
|
16
|
+
<title>Fuzface...</title>
|
17
|
+
<subtitle>The Internet's a big place and here's some proof...</subtitle>
|
18
|
+
</meta>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<para>
|
22
|
+
I think it's a tragedy that I'm going to start off my new
|
23
|
+
commentary by talking about facial hair and the Internet.
|
24
|
+
Something about that just screams pathetic, but whatever: it's
|
25
|
+
humor and that's life.
|
26
|
+
</para>
|
27
|
+
|
28
|
+
<para>
|
29
|
+
I've been working at home for a while now, which has been great.
|
30
|
+
I've been doing a lot of reading, good work, contributing to the
|
31
|
+
FreeBSD project, and living life at my own pace. The problem?
|
32
|
+
I don't have to interact with people, so I've let my appearance
|
33
|
+
slide a bit, most notably I've gone two weeks without shaving
|
34
|
+
and I have an awful hairy face.
|
35
|
+
</para>
|
36
|
+
|
37
|
+
<para>
|
38
|
+
Nothing is worse than going for a hard run, coming back, and
|
39
|
+
then bending your head down so that the hairs under your chin
|
40
|
+
touch the hairs on your neck. This has to be one of the most
|
41
|
+
disgusting/gross feelings I've experienced in a while. While
|
42
|
+
today wasn't the first time I'd experienced such a slimy tangled
|
43
|
+
mess, it is the first time I seriously considered shaving part
|
44
|
+
of my face, but not all of it: I was considering a beard.
|
45
|
+
</para>
|
46
|
+
|
47
|
+
<para>
|
48
|
+
Alright, so it's 5pm and I'm a sweaty post-run mess (it was 110
|
49
|
+
degrees in direct sunlight according to my thermometer) and
|
50
|
+
considering the possibility of growing a beard. Swifty nift?
|
51
|
+
Maybe. This is something I'd never done before, let alone
|
52
|
+
seriously consider. Normally I'd call my dad for such manly
|
53
|
+
advice, but he is: a) normally in another state, and; b) in
|
54
|
+
another country right now probably growing a beard (he's
|
55
|
+
notorious for coming back from a trip with a gnarly unshaven
|
56
|
+
face, sometimes he'll shape it into a decent beard). So, what's
|
57
|
+
a tech-junkie to do? Hop on the Internet and see if Google's
|
58
|
+
able to provide me with some inspiration.
|
59
|
+
</para>
|
60
|
+
|
61
|
+
<para>
|
62
|
+
Sure enough, I typed in "pictures of bearded men" and I was able
|
63
|
+
to find something: 14,000 pages of something to be exact.
|
64
|
+
Anyway, so most of these were rinky dink sites, a few of them
|
65
|
+
had some promise. One guy was trying to start a tradition where
|
66
|
+
everyone grows a beard for New Years. As I was scrolling down
|
67
|
+
the page trying to find some pictures, my mind was having the
|
68
|
+
following thought process: <thought>This seems like a dumb
|
69
|
+
idea... New Years provides a perfectly good excuse to kiss some
|
70
|
+
total stranger that you've had your eye on for the duration of a
|
71
|
+
New Years party. Why waste such an opportunity with a crappy
|
72
|
+
kiss?</thought> And at about this point I said this page sucks,
|
73
|
+
and flipped back to my search results.
|
74
|
+
</para>
|
75
|
+
|
76
|
+
<para>
|
77
|
+
Since I'd never done this before, I didn't know what was
|
78
|
+
fashionably correct in terms of where a guy should shave under
|
79
|
+
his neck, or what the deal was... I knew there were lots of
|
80
|
+
styles out there, just none that I could picture in my mind
|
81
|
+
(save maybe Santa Claus and a few really gnarly beards that are
|
82
|
+
long enough to be used as full-body covering. Oooh! And don't
|
83
|
+
forget the Russian and Amish beards, those stand out in my mind
|
84
|
+
too.). Google, being pretty comprehensive, and the Internet
|
85
|
+
being huge, found the exact screwball page I was looking for:
|
86
|
+
<url>http://fuzface-gallery.tripod.com/</url>
|
87
|
+
</para>
|
88
|
+
|
89
|
+
<para>
|
90
|
+
I don't know if I really should be amazed at the sheer number of
|
91
|
+
entries that Google returned, or that the Internet is big enough
|
92
|
+
to house such random gallery of crap, but it is and it never
|
93
|
+
ceases to amaze me... it's almost as amazing as the fact that
|
94
|
+
some bozo spent the time to create such a page. Don't people
|
95
|
+
have lives? Oh wait, I just visited his page... so back to my
|
96
|
+
diatribe...
|
97
|
+
</para>
|
98
|
+
|
99
|
+
<para>
|
100
|
+
There were tons of faces, lots of men, lots of hair, and plenty
|
101
|
+
of styles to choose from. Page after page of faces and hair.
|
102
|
+
Ugh. This wasn't getting any where and I was now entertaining
|
103
|
+
the rebound though of shaving my head. Time to close my browser
|
104
|
+
and hop in the shower: I reak. So what'd I do? Well, after
|
105
|
+
looking through enough of those pictures, I decided a few
|
106
|
+
things:
|
107
|
+
</para>
|
108
|
+
|
109
|
+
<para>
|
110
|
+
<ol>
|
111
|
+
<li>
|
112
|
+
I'm amazed that the Internet is big enough to foster the
|
113
|
+
creation of such random and utterly useless information. Then
|
114
|
+
again, I've been on and using the Net since '95, so this
|
115
|
+
shouldn't surprise me that much.
|
116
|
+
</li>
|
117
|
+
|
118
|
+
<li>
|
119
|
+
There are a lot of guys out there with varying tastes in,
|
120
|
+
shall we say, "facial hair styles," most of which I find
|
121
|
+
pretty unappealing.
|
122
|
+
</li>
|
123
|
+
|
124
|
+
<li>
|
125
|
+
I don't like beards. After one clogged drain, two
|
126
|
+
reapplications of shaving cream, and a few pases with the
|
127
|
+
razor, it took me about 5-10 minutes to get a nice cleanly
|
128
|
+
shaven face.
|
129
|
+
</li>
|
130
|
+
|
131
|
+
<li>
|
132
|
+
<crass comment>And - back me up here fellas, you can
|
133
|
+
sympathize with this feeling after you get done looking
|
134
|
+
through a magazine for a hair-cut style (ladies.. just smile
|
135
|
+
and nod and pretend you care) - after looking at a few dozen
|
136
|
+
pictures of men, I was able to safely reaffirm my desire for
|
137
|
+
heterosexual relations (translation from Bill Clintonese: have
|
138
|
+
sex with a woman). And with that thought in mind, I began to
|
139
|
+
pine for the college porn collection of old. Mmmm,
|
140
|
+
Playboy.</crass comment>
|
141
|
+
</li>
|
142
|
+
</ol>
|
143
|
+
</para>
|
144
|
+
|
145
|
+
<para>
|
146
|
+
::grin:: Until next time. -Sean
|
147
|
+
</para>
|
148
|
+
|
149
|
+
<para style="ps">
|
150
|
+
P.S. To the guys out there with beards, this is just my
|
151
|
+
opinion: take it with a grain of salt.
|
152
|
+
</para>
|
153
|
+
</body>
|
154
|
+
</commentary>
|