harvester 0.8.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +45 -0
- data/README.rdoc +74 -0
- data/Rakefile +28 -0
- data/bin/harvester +13 -0
- data/bin/harvester-chart +5 -0
- data/bin/harvester-clock +35 -0
- data/bin/harvester-db +15 -0
- data/bin/harvester-fetch +5 -0
- data/bin/harvester-generate +5 -0
- data/bin/harvester-jabber +6 -0
- data/bin/harvester-new +25 -0
- data/bin/harvester-post +5 -0
- data/bin/harvester-run +14 -0
- data/collections.yaml +15 -0
- data/config.yaml +13 -0
- data/data/ent/HTMLlat1.ent +194 -0
- data/data/ent/HTMLspecial.ent +77 -0
- data/data/ent/HTMLsymbol.ent +241 -0
- data/data/sql/dbd-mysql-isotime.diff +11 -0
- data/data/sql/harvester-0.6-mysql.diff +59 -0
- data/data/sql/harvester-0.7-mysql.diff +39 -0
- data/data/sql/mysql/chart.sql +1 -0
- data/data/sql/mysql/create.table.enclosures.sql +9 -0
- data/data/sql/mysql/create.table.items.sql +8 -0
- data/data/sql/mysql/create.table.jabbersettings.sql +5 -0
- data/data/sql/mysql/create.table.jabbersubscriptions.sql +5 -0
- data/data/sql/mysql/create.table.sources.sql +9 -0
- data/data/sql/mysql/create.view.last48hours.sql +1 -0
- data/data/sql/postgresql/chart.sql +1 -0
- data/data/sql/postgresql/create.table.enclosures.sql +9 -0
- data/data/sql/postgresql/create.table.items.sql +8 -0
- data/data/sql/postgresql/create.table.jabbersettings.sql +5 -0
- data/data/sql/postgresql/create.table.jabbersubscriptions.sql +5 -0
- data/data/sql/postgresql/create.table.sources.sql +9 -0
- data/data/sql/postgresql/create.view.last48hours.sql +1 -0
- data/data/sql/sqlite3/chart.sql +1 -0
- data/data/sql/sqlite3/create.table.enclosures.sql +9 -0
- data/data/sql/sqlite3/create.table.items.sql +8 -0
- data/data/sql/sqlite3/create.table.jabbersettings.sql +5 -0
- data/data/sql/sqlite3/create.table.jabbersubscriptions.sql +5 -0
- data/data/sql/sqlite3/create.table.sources.sql +9 -0
- data/data/sql/sqlite3/create.view.last48hours.sql +1 -0
- data/data/templates/atom-all.xml +88 -0
- data/data/templates/atom.xml +88 -0
- data/data/templates/index.html +412 -0
- data/data/templates/rss-all.rdf +86 -0
- data/data/templates/rss.rdf +85 -0
- data/data/templates/static/harvester.css +365 -0
- data/data/templates/static/harvester.gif +0 -0
- data/data/templates/static/harvester_ie7.css +15 -0
- data/data/templates/static/harvester_lte_ie6.css +27 -0
- data/harvester.gemspec +35 -0
- data/lib/harvester.rb +132 -0
- data/lib/harvester/chart.rb +72 -0
- data/lib/harvester/db.rb +123 -0
- data/lib/harvester/fetch.rb +96 -0
- data/lib/harvester/generate.rb +152 -0
- data/lib/harvester/generator/entity_translator.rb +46 -0
- data/lib/harvester/generator/link_absolutizer.rb +39 -0
- data/lib/harvester/jabber.rb +443 -0
- data/lib/harvester/mrss.rb +355 -0
- data/lib/harvester/post.rb +19 -0
- metadata +237 -0
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
= Changelog
|
2
|
+
|
3
|
+
== 0.8
|
4
|
+
* ...
|
5
|
+
|
6
|
+
== 0.7
|
7
|
+
* XSLT templates
|
8
|
+
* Reworked MRSS
|
9
|
+
* HTML entity replacement
|
10
|
+
* Transactional database handling
|
11
|
+
* Favicon, style, photos
|
12
|
+
* Microformats in HTML template
|
13
|
+
* Chart timeline
|
14
|
+
* Jabberbot fixes
|
15
|
+
* HTTPS support optional
|
16
|
+
|
17
|
+
== 0.6
|
18
|
+
* Complete rewrite (excl. MRSS)
|
19
|
+
* YAML configuration
|
20
|
+
* Database backend (PostgreSQL)
|
21
|
+
* Fetcher is not using wget anymore and supports SSL, HTTP authentication and If-Modified-Since
|
22
|
+
* Fetcher operates threaded to request feeds parallelized
|
23
|
+
* Minor template variables renaming
|
24
|
+
|
25
|
+
== 0.5
|
26
|
+
* Fixed a syntax error ;-)
|
27
|
+
* Multiple further fixes
|
28
|
+
* The Jabber-bot
|
29
|
+
* ATOM support by Neingeist
|
30
|
+
|
31
|
+
== 0.4
|
32
|
+
* Blog variables available in <tmpl:iter-item/>
|
33
|
+
* index.html Template readability improvements, CSS now in extra
|
34
|
+
file
|
35
|
+
|
36
|
+
== 0.3.2
|
37
|
+
* All template elements are now escaped by default. Use
|
38
|
+
escape="false" if you really don't want to escape HTML-Tags and
|
39
|
+
such...
|
40
|
+
== 0.3.1
|
41
|
+
* Fixed bug where incorrect encoded feeds won't be displayed when
|
42
|
+
parsed for the first time
|
43
|
+
|
44
|
+
== 0.3
|
45
|
+
* Major overhaul
|
data/README.rdoc
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
= Harvester 0.8
|
2
|
+
The Harvester is a web-based Feed-Aggregator
|
3
|
+
|
4
|
+
A running instance can be seen at:
|
5
|
+
http://astroblog.spaceboyz.net/harvester/
|
6
|
+
|
7
|
+
The Harvester eats the feeds you want and produces a static html/feed page that aggregates all those.
|
8
|
+
|
9
|
+
== Installation
|
10
|
+
|
11
|
+
Install the harvester with
|
12
|
+
|
13
|
+
gem install harvester
|
14
|
+
|
15
|
+
You can now create a new harvester project with
|
16
|
+
|
17
|
+
harvester new <project_directory>
|
18
|
+
|
19
|
+
Then you will need to configure <tt>config.yaml</tt>, <tt>collections.yaml</tt> and the templates to suit your needs (see below). You also have to run <tt>harvester db create</tt> (in that directory) to create your initial database structure.
|
20
|
+
|
21
|
+
== Configuration
|
22
|
+
|
23
|
+
<tt>config.yaml</tt> contains general configuration, like paths, logs and timeouts. You can also configure your database there. The default database backend is SQLite3, but all the following ones are supported:
|
24
|
+
* SQLite3
|
25
|
+
* PostgreSQL
|
26
|
+
* MySQL
|
27
|
+
|
28
|
+
The <tt>collections.yaml</tt> file contains the links to your desired feeds.
|
29
|
+
|
30
|
+
== Todo
|
31
|
+
* Still some things broken after update
|
32
|
+
* Improve/fix feed parsing
|
33
|
+
* Tidy up templates
|
34
|
+
* Security issues
|
35
|
+
* Optimize performance
|
36
|
+
* Fix jabberbot
|
37
|
+
* Implement some kind of tag filters
|
38
|
+
|
39
|
+
== Usage
|
40
|
+
|
41
|
+
Then run
|
42
|
+
|
43
|
+
harvester run
|
44
|
+
|
45
|
+
in the project directory or run
|
46
|
+
|
47
|
+
harvester run -c path/to/config.yaml
|
48
|
+
|
49
|
+
This will create the output files. That's it ;).
|
50
|
+
|
51
|
+
Usually, you want to run this command automatically every x seconds/minutes. You can use a program like <tt>cron</tt> or simply run
|
52
|
+
|
53
|
+
harvester clock
|
54
|
+
|
55
|
+
to start a simple scheduler.
|
56
|
+
|
57
|
+
There some more harvester commands to explore. Run
|
58
|
+
|
59
|
+
harvester --help
|
60
|
+
|
61
|
+
to get a command list.
|
62
|
+
|
63
|
+
== Customizing the templates
|
64
|
+
|
65
|
+
...
|
66
|
+
|
67
|
+
== Credits
|
68
|
+
|
69
|
+
* {Astro}[https://github.com/astro] (2005-2008)
|
70
|
+
* Neingeist
|
71
|
+
* Tigion
|
72
|
+
* Josef Spillner
|
73
|
+
* {J-_-L}[https://github.com/janlelis]
|
74
|
+
* Others (MySQL patch)
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
GEMSPEC = 'harvester.gemspec'
|
3
|
+
|
4
|
+
def gemspec
|
5
|
+
@gemspec ||= eval(File.read( GEMSPEC ), binding, GEMSPEC)
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Build the gem"
|
9
|
+
task :gem => :gemspec do
|
10
|
+
sh "gem build #{GEMSPEC}"
|
11
|
+
FileUtils.mkdir_p 'pkg'
|
12
|
+
FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Install the gem locally (without docs)"
|
16
|
+
task :install => :gem do
|
17
|
+
sh %{gem install pkg/#{gemspec.name}-#{gemspec.version} --no-rdoc --no-ri}
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Generate the gemspec"
|
21
|
+
task :generate do
|
22
|
+
puts gemspec.to_ruby
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Validate the gemspec"
|
26
|
+
task :gemspec do
|
27
|
+
gemspec.validate
|
28
|
+
end
|
data/bin/harvester
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
# call sub-command executable
|
5
|
+
if ARGV[0] !~ /^-/ && sub_command = ARGV.shift
|
6
|
+
exec "#{ File.dirname(__FILE__) }/harvester-#{ sub_command }", *ARGV
|
7
|
+
end
|
8
|
+
|
9
|
+
ARGV << '--help' # if nothing else is set...
|
10
|
+
|
11
|
+
# check for options like --version or --help
|
12
|
+
require_relative '../lib/harvester'
|
13
|
+
Harvester.new_from_argv
|
data/bin/harvester-chart
ADDED
data/bin/harvester-clock
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require_relative '../lib/harvester'
|
5
|
+
# see https://github.com/adamwiggins/clockwork/
|
6
|
+
# https://github.com/adamwiggins/clockwork/blob/master/bin/clockwork
|
7
|
+
require 'clockwork'
|
8
|
+
include Clockwork
|
9
|
+
|
10
|
+
# TODO monkey patch logger instead of puts
|
11
|
+
|
12
|
+
# # # # #
|
13
|
+
|
14
|
+
STDERR.sync = STDOUT.sync = true
|
15
|
+
|
16
|
+
harve = Harvester.new_from_argv
|
17
|
+
harve.logger.info 'CLOCK'
|
18
|
+
|
19
|
+
# get interval
|
20
|
+
if ARGV.first
|
21
|
+
interval = ARGV.shift.to_i
|
22
|
+
else
|
23
|
+
interval = harve.settings['interval'] || 2.minutes
|
24
|
+
end
|
25
|
+
|
26
|
+
harve.logger.info "[start] invoke harvester-run every #{ interval } seconds"
|
27
|
+
|
28
|
+
handler do |job|
|
29
|
+
# harve.logger.info '[start] invoke harvester'
|
30
|
+
spawn File.dirname(__FILE__) + '/harvester-run'
|
31
|
+
end
|
32
|
+
|
33
|
+
every interval, 'run'
|
34
|
+
|
35
|
+
run
|
data/bin/harvester-db
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require_relative '../lib/harvester/db'
|
5
|
+
harve = Harvester.new_from_argv
|
6
|
+
|
7
|
+
case action = ARGV.shift
|
8
|
+
when 'create'
|
9
|
+
harve.create!
|
10
|
+
when 'maintenance'
|
11
|
+
harve.maintenance!
|
12
|
+
else
|
13
|
+
puts '[DB] Do nothing...'
|
14
|
+
end
|
15
|
+
|
data/bin/harvester-fetch
ADDED
data/bin/harvester-new
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'fileutils'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
if ARGV.empty?
|
8
|
+
puts "USAGE: harvester new <project_dir>"
|
9
|
+
exit
|
10
|
+
end
|
11
|
+
|
12
|
+
new = File.expand_path ARGV[0]
|
13
|
+
source = File.expand_path File.dirname(__FILE__) + '/..'
|
14
|
+
|
15
|
+
FileUtils.mkdir_p new
|
16
|
+
FileUtils.cp_r source + '/data/templates', new + '/templates'
|
17
|
+
FileUtils.cp source + '/collections.yaml', new + '/collections.yaml'
|
18
|
+
FileUtils.cp source + '/README.rdoc', new + '/README'
|
19
|
+
|
20
|
+
# edit default options
|
21
|
+
c = YAML::load_file source + '/config.yaml'
|
22
|
+
c['settings']['templates'] = 'templates'
|
23
|
+
File.open(new + '/config.yaml', 'w'){|out| YAML.dump(c, out) }
|
24
|
+
|
25
|
+
puts 'Created new harvester project at ' + ARGV[0]
|
data/bin/harvester-post
ADDED
data/bin/harvester-run
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
# run a complete harvester update :)
|
5
|
+
require_relative '../lib/harvester/fetch'
|
6
|
+
require_relative '../lib/harvester/generate'
|
7
|
+
require_relative '../lib/harvester/chart'
|
8
|
+
require_relative '../lib/harvester/post'
|
9
|
+
|
10
|
+
harve = Harvester.new_from_argv
|
11
|
+
harve.fetch!
|
12
|
+
harve.generate!
|
13
|
+
harve.chart! unless harve.settings['no-chart']
|
14
|
+
harve.post!
|
data/collections.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
# this file contains all feed urls
|
3
|
+
blogs: # main feeds
|
4
|
+
#-
|
5
|
+
ticker: # the ticker only shows headlines
|
6
|
+
#-
|
7
|
+
projects: # e.g. github
|
8
|
+
#- http://github.com/feeds/astro/commits/harvester/blog-harvester.de
|
9
|
+
links: # e.g. delicious
|
10
|
+
#- http://feeds.delicious.com/rss/YYYYYYYYYYYYYY
|
11
|
+
photos: # e.g. flickr
|
12
|
+
#- "http://api.flickr.com/services/feeds/photos_public.gne?id=XXXXXXXX@N00&format=atom"
|
13
|
+
microblogs: # twitter & identi.ca
|
14
|
+
#- http://twitter.com/statuses/user_timeline/XXXXXXXX.rss
|
15
|
+
#- http://identi.ca/api/statuses/user_timeline/YYYYYYYYYYY.atom
|
data/config.yaml
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
<!-- Portions (C) International Organization for Standardization 1986
|
2
|
+
Permission to copy in any form is granted for use with
|
3
|
+
conforming SGML systems and applications as defined in
|
4
|
+
ISO 8879, provided this notice is included in all copies.
|
5
|
+
-->
|
6
|
+
<!-- Character entity set. Typical invocation:
|
7
|
+
<!ENTITY % HTMLlat1 PUBLIC
|
8
|
+
"-//W3C//ENTITIES Latin 1//EN//HTML">
|
9
|
+
%HTMLlat1;
|
10
|
+
-->
|
11
|
+
|
12
|
+
<!ENTITY nbsp CDATA " " -- no-break space = non-breaking space,
|
13
|
+
U+00A0 ISOnum -->
|
14
|
+
<!ENTITY iexcl CDATA "¡" -- inverted exclamation mark, U+00A1 ISOnum -->
|
15
|
+
<!ENTITY cent CDATA "¢" -- cent sign, U+00A2 ISOnum -->
|
16
|
+
<!ENTITY pound CDATA "£" -- pound sign, U+00A3 ISOnum -->
|
17
|
+
<!ENTITY curren CDATA "¤" -- currency sign, U+00A4 ISOnum -->
|
18
|
+
<!ENTITY yen CDATA "¥" -- yen sign = yuan sign, U+00A5 ISOnum -->
|
19
|
+
<!ENTITY brvbar CDATA "¦" -- broken bar = broken vertical bar,
|
20
|
+
U+00A6 ISOnum -->
|
21
|
+
<!ENTITY sect CDATA "§" -- section sign, U+00A7 ISOnum -->
|
22
|
+
<!ENTITY uml CDATA "¨" -- diaeresis = spacing diaeresis,
|
23
|
+
U+00A8 ISOdia -->
|
24
|
+
<!ENTITY copy CDATA "©" -- copyright sign, U+00A9 ISOnum -->
|
25
|
+
<!ENTITY ordf CDATA "ª" -- feminine ordinal indicator, U+00AA ISOnum -->
|
26
|
+
<!ENTITY laquo CDATA "«" -- left-pointing double angle quotation mark
|
27
|
+
= left pointing guillemet, U+00AB ISOnum -->
|
28
|
+
<!ENTITY not CDATA "¬" -- not sign, U+00AC ISOnum -->
|
29
|
+
<!ENTITY shy CDATA "­" -- soft hyphen = discretionary hyphen,
|
30
|
+
U+00AD ISOnum -->
|
31
|
+
<!ENTITY reg CDATA "®" -- registered sign = registered trade mark sign,
|
32
|
+
U+00AE ISOnum -->
|
33
|
+
<!ENTITY macr CDATA "¯" -- macron = spacing macron = overline
|
34
|
+
= APL overbar, U+00AF ISOdia -->
|
35
|
+
<!ENTITY deg CDATA "°" -- degree sign, U+00B0 ISOnum -->
|
36
|
+
<!ENTITY plusmn CDATA "±" -- plus-minus sign = plus-or-minus sign,
|
37
|
+
U+00B1 ISOnum -->
|
38
|
+
<!ENTITY sup2 CDATA "²" -- superscript two = superscript digit two
|
39
|
+
= squared, U+00B2 ISOnum -->
|
40
|
+
<!ENTITY sup3 CDATA "³" -- superscript three = superscript digit three
|
41
|
+
= cubed, U+00B3 ISOnum -->
|
42
|
+
<!ENTITY acute CDATA "´" -- acute accent = spacing acute,
|
43
|
+
U+00B4 ISOdia -->
|
44
|
+
<!ENTITY micro CDATA "µ" -- micro sign, U+00B5 ISOnum -->
|
45
|
+
<!ENTITY para CDATA "¶" -- pilcrow sign = paragraph sign,
|
46
|
+
U+00B6 ISOnum -->
|
47
|
+
<!ENTITY middot CDATA "·" -- middle dot = Georgian comma
|
48
|
+
= Greek middle dot, U+00B7 ISOnum -->
|
49
|
+
<!ENTITY cedil CDATA "¸" -- cedilla = spacing cedilla, U+00B8 ISOdia -->
|
50
|
+
<!ENTITY sup1 CDATA "¹" -- superscript one = superscript digit one,
|
51
|
+
U+00B9 ISOnum -->
|
52
|
+
<!ENTITY ordm CDATA "º" -- masculine ordinal indicator,
|
53
|
+
U+00BA ISOnum -->
|
54
|
+
<!ENTITY raquo CDATA "»" -- right-pointing double angle quotation mark
|
55
|
+
= right pointing guillemet, U+00BB ISOnum -->
|
56
|
+
<!ENTITY frac14 CDATA "¼" -- vulgar fraction one quarter
|
57
|
+
= fraction one quarter, U+00BC ISOnum -->
|
58
|
+
<!ENTITY frac12 CDATA "½" -- vulgar fraction one half
|
59
|
+
= fraction one half, U+00BD ISOnum -->
|
60
|
+
<!ENTITY frac34 CDATA "¾" -- vulgar fraction three quarters
|
61
|
+
= fraction three quarters, U+00BE ISOnum -->
|
62
|
+
<!ENTITY iquest CDATA "¿" -- inverted question mark
|
63
|
+
= turned question mark, U+00BF ISOnum -->
|
64
|
+
<!ENTITY Agrave CDATA "À" -- latin capital letter A with grave
|
65
|
+
= latin capital letter A grave,
|
66
|
+
U+00C0 ISOlat1 -->
|
67
|
+
<!ENTITY Aacute CDATA "Á" -- latin capital letter A with acute,
|
68
|
+
U+00C1 ISOlat1 -->
|
69
|
+
<!ENTITY Acirc CDATA "Â" -- latin capital letter A with circumflex,
|
70
|
+
U+00C2 ISOlat1 -->
|
71
|
+
<!ENTITY Atilde CDATA "Ã" -- latin capital letter A with tilde,
|
72
|
+
U+00C3 ISOlat1 -->
|
73
|
+
<!ENTITY Auml CDATA "Ä" -- latin capital letter A with diaeresis,
|
74
|
+
U+00C4 ISOlat1 -->
|
75
|
+
<!ENTITY Aring CDATA "Å" -- latin capital letter A with ring above
|
76
|
+
= latin capital letter A ring,
|
77
|
+
U+00C5 ISOlat1 -->
|
78
|
+
<!ENTITY AElig CDATA "Æ" -- latin capital letter AE
|
79
|
+
= latin capital ligature AE,
|
80
|
+
U+00C6 ISOlat1 -->
|
81
|
+
<!ENTITY Ccedil CDATA "Ç" -- latin capital letter C with cedilla,
|
82
|
+
U+00C7 ISOlat1 -->
|
83
|
+
<!ENTITY Egrave CDATA "È" -- latin capital letter E with grave,
|
84
|
+
U+00C8 ISOlat1 -->
|
85
|
+
<!ENTITY Eacute CDATA "É" -- latin capital letter E with acute,
|
86
|
+
U+00C9 ISOlat1 -->
|
87
|
+
<!ENTITY Ecirc CDATA "Ê" -- latin capital letter E with circumflex,
|
88
|
+
U+00CA ISOlat1 -->
|
89
|
+
<!ENTITY Euml CDATA "Ë" -- latin capital letter E with diaeresis,
|
90
|
+
U+00CB ISOlat1 -->
|
91
|
+
<!ENTITY Igrave CDATA "Ì" -- latin capital letter I with grave,
|
92
|
+
U+00CC ISOlat1 -->
|
93
|
+
<!ENTITY Iacute CDATA "Í" -- latin capital letter I with acute,
|
94
|
+
U+00CD ISOlat1 -->
|
95
|
+
<!ENTITY Icirc CDATA "Î" -- latin capital letter I with circumflex,
|
96
|
+
U+00CE ISOlat1 -->
|
97
|
+
<!ENTITY Iuml CDATA "Ï" -- latin capital letter I with diaeresis,
|
98
|
+
U+00CF ISOlat1 -->
|
99
|
+
<!ENTITY ETH CDATA "Ð" -- latin capital letter ETH, U+00D0 ISOlat1 -->
|
100
|
+
<!ENTITY Ntilde CDATA "Ñ" -- latin capital letter N with tilde,
|
101
|
+
U+00D1 ISOlat1 -->
|
102
|
+
<!ENTITY Ograve CDATA "Ò" -- latin capital letter O with grave,
|
103
|
+
U+00D2 ISOlat1 -->
|
104
|
+
<!ENTITY Oacute CDATA "Ó" -- latin capital letter O with acute,
|
105
|
+
U+00D3 ISOlat1 -->
|
106
|
+
<!ENTITY Ocirc CDATA "Ô" -- latin capital letter O with circumflex,
|
107
|
+
U+00D4 ISOlat1 -->
|
108
|
+
<!ENTITY Otilde CDATA "Õ" -- latin capital letter O with tilde,
|
109
|
+
U+00D5 ISOlat1 -->
|
110
|
+
<!ENTITY Ouml CDATA "Ö" -- latin capital letter O with diaeresis,
|
111
|
+
U+00D6 ISOlat1 -->
|
112
|
+
<!ENTITY times CDATA "×" -- multiplication sign, U+00D7 ISOnum -->
|
113
|
+
<!ENTITY Oslash CDATA "Ø" -- latin capital letter O with stroke
|
114
|
+
= latin capital letter O slash,
|
115
|
+
U+00D8 ISOlat1 -->
|
116
|
+
<!ENTITY Ugrave CDATA "Ù" -- latin capital letter U with grave,
|
117
|
+
U+00D9 ISOlat1 -->
|
118
|
+
<!ENTITY Uacute CDATA "Ú" -- latin capital letter U with acute,
|
119
|
+
U+00DA ISOlat1 -->
|
120
|
+
<!ENTITY Ucirc CDATA "Û" -- latin capital letter U with circumflex,
|
121
|
+
U+00DB ISOlat1 -->
|
122
|
+
<!ENTITY Uuml CDATA "Ü" -- latin capital letter U with diaeresis,
|
123
|
+
U+00DC ISOlat1 -->
|
124
|
+
<!ENTITY Yacute CDATA "Ý" -- latin capital letter Y with acute,
|
125
|
+
U+00DD ISOlat1 -->
|
126
|
+
<!ENTITY THORN CDATA "Þ" -- latin capital letter THORN,
|
127
|
+
U+00DE ISOlat1 -->
|
128
|
+
<!ENTITY szlig CDATA "ß" -- latin small letter sharp s = ess-zed,
|
129
|
+
U+00DF ISOlat1 -->
|
130
|
+
<!ENTITY agrave CDATA "à" -- latin small letter a with grave
|
131
|
+
= latin small letter a grave,
|
132
|
+
U+00E0 ISOlat1 -->
|
133
|
+
<!ENTITY aacute CDATA "á" -- latin small letter a with acute,
|
134
|
+
U+00E1 ISOlat1 -->
|
135
|
+
<!ENTITY acirc CDATA "â" -- latin small letter a with circumflex,
|
136
|
+
U+00E2 ISOlat1 -->
|
137
|
+
<!ENTITY atilde CDATA "ã" -- latin small letter a with tilde,
|
138
|
+
U+00E3 ISOlat1 -->
|
139
|
+
<!ENTITY auml CDATA "ä" -- latin small letter a with diaeresis,
|
140
|
+
U+00E4 ISOlat1 -->
|
141
|
+
<!ENTITY aring CDATA "å" -- latin small letter a with ring above
|
142
|
+
= latin small letter a ring,
|
143
|
+
U+00E5 ISOlat1 -->
|
144
|
+
<!ENTITY aelig CDATA "æ" -- latin small letter ae
|
145
|
+
= latin small ligature ae, U+00E6 ISOlat1 -->
|
146
|
+
<!ENTITY ccedil CDATA "ç" -- latin small letter c with cedilla,
|
147
|
+
U+00E7 ISOlat1 -->
|
148
|
+
<!ENTITY egrave CDATA "è" -- latin small letter e with grave,
|
149
|
+
U+00E8 ISOlat1 -->
|
150
|
+
<!ENTITY eacute CDATA "é" -- latin small letter e with acute,
|
151
|
+
U+00E9 ISOlat1 -->
|
152
|
+
<!ENTITY ecirc CDATA "ê" -- latin small letter e with circumflex,
|
153
|
+
U+00EA ISOlat1 -->
|
154
|
+
<!ENTITY euml CDATA "ë" -- latin small letter e with diaeresis,
|
155
|
+
U+00EB ISOlat1 -->
|
156
|
+
<!ENTITY igrave CDATA "ì" -- latin small letter i with grave,
|
157
|
+
U+00EC ISOlat1 -->
|
158
|
+
<!ENTITY iacute CDATA "í" -- latin small letter i with acute,
|
159
|
+
U+00ED ISOlat1 -->
|
160
|
+
<!ENTITY icirc CDATA "î" -- latin small letter i with circumflex,
|
161
|
+
U+00EE ISOlat1 -->
|
162
|
+
<!ENTITY iuml CDATA "ï" -- latin small letter i with diaeresis,
|
163
|
+
U+00EF ISOlat1 -->
|
164
|
+
<!ENTITY eth CDATA "ð" -- latin small letter eth, U+00F0 ISOlat1 -->
|
165
|
+
<!ENTITY ntilde CDATA "ñ" -- latin small letter n with tilde,
|
166
|
+
U+00F1 ISOlat1 -->
|
167
|
+
<!ENTITY ograve CDATA "ò" -- latin small letter o with grave,
|
168
|
+
U+00F2 ISOlat1 -->
|
169
|
+
<!ENTITY oacute CDATA "ó" -- latin small letter o with acute,
|
170
|
+
U+00F3 ISOlat1 -->
|
171
|
+
<!ENTITY ocirc CDATA "ô" -- latin small letter o with circumflex,
|
172
|
+
U+00F4 ISOlat1 -->
|
173
|
+
<!ENTITY otilde CDATA "õ" -- latin small letter o with tilde,
|
174
|
+
U+00F5 ISOlat1 -->
|
175
|
+
<!ENTITY ouml CDATA "ö" -- latin small letter o with diaeresis,
|
176
|
+
U+00F6 ISOlat1 -->
|
177
|
+
<!ENTITY divide CDATA "÷" -- division sign, U+00F7 ISOnum -->
|
178
|
+
<!ENTITY oslash CDATA "ø" -- latin small letter o with stroke,
|
179
|
+
= latin small letter o slash,
|
180
|
+
U+00F8 ISOlat1 -->
|
181
|
+
<!ENTITY ugrave CDATA "ù" -- latin small letter u with grave,
|
182
|
+
U+00F9 ISOlat1 -->
|
183
|
+
<!ENTITY uacute CDATA "ú" -- latin small letter u with acute,
|
184
|
+
U+00FA ISOlat1 -->
|
185
|
+
<!ENTITY ucirc CDATA "û" -- latin small letter u with circumflex,
|
186
|
+
U+00FB ISOlat1 -->
|
187
|
+
<!ENTITY uuml CDATA "ü" -- latin small letter u with diaeresis,
|
188
|
+
U+00FC ISOlat1 -->
|
189
|
+
<!ENTITY yacute CDATA "ý" -- latin small letter y with acute,
|
190
|
+
U+00FD ISOlat1 -->
|
191
|
+
<!ENTITY thorn CDATA "þ" -- latin small letter thorn,
|
192
|
+
U+00FE ISOlat1 -->
|
193
|
+
<!ENTITY yuml CDATA "ÿ" -- latin small letter y with diaeresis,
|
194
|
+
U+00FF ISOlat1 -->
|