who-needs-wp 0.6.1 → 0.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.
@@ -53,11 +53,21 @@ Choice.options do
53
53
  desc 'Upload the output to an FTP address.'
54
54
  end
55
55
 
56
- option :remote_addr do
57
- long '--remote-addr=username'
56
+ option :upload_url do
57
+ long '--upload-url=SCP address'
58
58
  desc "Location to upload the output. To enable specify the --upload option. (Default: \"#{options[:ftp]}\")"
59
59
  end
60
60
 
61
+ option :use_term_extractor do
62
+ long '--use-term-extractor'
63
+ desc "Generate tags for each post / page using the Yahoo Term Extractor API."
64
+ end
65
+
66
+ option :index_page do
67
+ long '--index-page=filename'
68
+ desc "Override the default index page for the site. If not set then the first page in the site is used."
69
+ end
70
+
61
71
  option :help do
62
72
  long '--help'
63
73
  desc 'Show this message'
@@ -4,12 +4,17 @@ require 'rdiscount'
4
4
  require 'haml'
5
5
  require 'open-uri'
6
6
  require 'sass'
7
- require 'makers-mark'
7
+ require 'kramdown'
8
8
  require 'logger'
9
9
  require 'rss/maker'
10
10
  require 'net/ssh'
11
11
  require 'net/sftp'
12
+ require 'rexml/document'
13
+ require 'net/http'
14
+
12
15
  require 'who-needs-wp/css.rb'
16
+ require 'who-needs-wp/keywords.rb'
17
+ require 'who-needs-wp/sitemap.rb'
13
18
  require 'who-needs-wp/Content.rb'
14
19
  require 'who-needs-wp/content/Page.rb'
15
20
  require 'who-needs-wp/content/Post.rb'
@@ -18,6 +23,7 @@ require 'who-needs-wp/sidebar/twitter.rb'
18
23
  require 'who-needs-wp/sidebar/delicious.rb'
19
24
  require 'who-needs-wp/sidebar/recentposts.rb'
20
25
  require 'who-needs-wp/sidebar/pageindex.rb'
26
+ require 'who-needs-wp/sidebar/latitude.rb'
21
27
  require 'who-needs-wp/templates.rb'
22
28
 
23
29
  module WhoNeedsWP
@@ -47,6 +53,9 @@ module WhoNeedsWP
47
53
  if @options[:delicious]
48
54
  delicious = Delicious.new(@options[:delicious][:user])
49
55
  end
56
+ if @options[:latitude]
57
+ Latitude.new(@options[:latitude])
58
+ end
50
59
  Page.load
51
60
  Post.load
52
61
  if Post.all.length > 0
@@ -62,6 +71,7 @@ module WhoNeedsWP
62
71
  Post.index
63
72
  self.index
64
73
  self.css
74
+ self.sitemap
65
75
 
66
76
  if @options[:upload]
67
77
  self.upload
@@ -74,19 +84,30 @@ module WhoNeedsWP
74
84
 
75
85
  # Generate the index page for the blog
76
86
  def self.index
87
+ keywords = []
77
88
  contents = ""
78
89
  if Post.all.length > 0
79
90
  Post.all[0..3].each do |post|
80
91
  contents << post.html
92
+ keywords = keywords + post.tags
81
93
  end
82
94
  else
83
- contents << Page.all.first.html
95
+ index_page = Page.all.first
96
+ if @options[:index_page]
97
+ Page.all.each do |page|
98
+ if page.filename[:original] == @options[:index_page]
99
+ index_page = page
100
+ break
101
+ end
102
+ end
103
+ end
104
+ contents = index_page.html
84
105
  end
85
- self.render_html("index.html", "index", contents)
106
+ self.render_html("index.html", "index", contents, "", keywords, @options[:index_summary])
86
107
  end
87
108
 
88
109
  def self.upload
89
- match = @options[:remote_addr].match(/(.*)@(.*):(.*)/)
110
+ match = @options[:upload_url].match(/(.*)@(.*):(.*)/)
90
111
  username = match[1]
91
112
  host = match[2]
92
113
  remote_path = match[3]
@@ -19,8 +19,9 @@ module WhoNeedsWP
19
19
  attr_accessor :summary
20
20
  # A Hash which contains the original and generated filename
21
21
  attr_accessor :filename
22
-
23
-
22
+ # An array of tags which are associated with this content
23
+ attr_accessor :tags
24
+
24
25
  def initialize(filename)
25
26
  @filename = {
26
27
  :original => filename,
@@ -30,7 +31,7 @@ module WhoNeedsWP
30
31
  @url = WhoNeedsWP::options[:url] + '/' + @filename[:generated]
31
32
  # Set the default author of the content to be the site author
32
33
  @author = WhoNeedsWP::options[:author]
33
-
34
+
34
35
  read_file
35
36
  end
36
37
 
@@ -38,8 +39,10 @@ module WhoNeedsWP
38
39
  def render
39
40
  # Set the summary to be the first paragraph
40
41
  @summary = $1 if @html =~ (/(?:<p>)(.*?)(?:<\/p>)/)
42
+ # Append the full site URL to any links referring to the root folder
43
+ @html.gsub!(/(href|src)=\"\//, '\1="' + WhoNeedsWP::options[:url] + '/')
41
44
  # Render the content HTML within a page
42
- WhoNeedsWP::render_html(@filename[:generated], "page", @html, @title)
45
+ WhoNeedsWP::render_html(@filename[:generated], "page", @html, @title, @tags, @summary)
43
46
  end
44
47
 
45
48
  private
@@ -49,7 +52,15 @@ module WhoNeedsWP
49
52
  content = File.read(@filename[:original])
50
53
  # Remove the author, if there is one from the Markdown
51
54
  content = extract_author(content)
52
- @markdown = MakersMark.generate(content)
55
+ if WhoNeedsWP::options[:use_term_extractor]
56
+ @tags = YahooTermExtractor.generate_keywords(content)
57
+ else
58
+ @tags = []
59
+ end
60
+
61
+ @markdown = Kramdown::Document.new(content)
62
+ #,{:coderay => {:wrap => :div, :line_numbers => :inline,
63
+ #:line_number_start => 1, :tab_width => 8, :bold_every => 10, :css => :style}})
53
64
  end
54
65
 
55
66
  # Return the title of the content, based on the filename
@@ -60,18 +71,17 @@ module WhoNeedsWP
60
71
 
61
72
  # Return the filename which will be use to save rendered content
62
73
  def generate_filename(filename)
63
- File.dirname(filename) + "/" + File.basename(filename, ".markdown") + ".html"
74
+ File.dirname(filename) + "/" + File.basename(filename, ".markdown").gsub(/[?\/]/, '') + ".html"
64
75
  end
65
76
 
66
77
  # Generate a unique ID for this content
67
78
  def generate_id
68
- if self.created_at == nil
69
- raise "Content must have a timestamp before a unique ID can be generated"
79
+ if @created_at != nil
80
+ # Replace the HTTP from the URL with tag:
81
+ @id = (WhoNeedsWP::options[:url] + '/' + @filename[:generated]).gsub(/http:\/\//, 'tag:')
82
+ match = @id.match(/([^\/]*)\/(.*)/)
83
+ @id = "#{match[1]},#{self.created_at.strftime('%Y-%m-%d')}:#{match[2]}" if match
70
84
  end
71
- # Replace the HTTP from the URL with tag:
72
- @id = (WhoNeedsWP::options[:url] + @filename[:generated]).gsub(/http:\/\//, 'tag:')
73
- match = @id.match(/([^\/]*)\/(.*)/)
74
- @id = "#{match[1]},#{self.created_at.strftime('%Y-%m-%d')}:#{match[2]}" if match
75
85
  end
76
86
 
77
87
  # Read the author from the Markdown content. If none exists
@@ -86,4 +96,4 @@ module WhoNeedsWP
86
96
  return content
87
97
  end
88
98
  end
89
- end
99
+ end
@@ -7,6 +7,7 @@ module WhoNeedsWP
7
7
  Dir.glob('pages/*.markdown').each do |filename|
8
8
  @@pages << Page.new(filename)
9
9
  end
10
+ @@pages.sort! { |a, b| a.title <=> b.title }
10
11
  end
11
12
 
12
13
  # See Content.render_content
@@ -6,6 +6,7 @@ module WhoNeedsWP
6
6
  def initialize(filename, created_at)
7
7
  super(filename)
8
8
  @created_at = created_at
9
+ generate_id
9
10
  end
10
11
 
11
12
  # A list of all the pages on the site
@@ -50,9 +51,11 @@ module WhoNeedsWP
50
51
  end
51
52
 
52
53
  def self.index(filename = "posts/index.html")
53
- WhoNeedsWP::render_html(filename, "post_index", WhoNeedsWP::render_template("all_posts", {
54
- :posts => @@posts
55
- }), "All Posts")
54
+ if File.exists?(File.dirname(filename))
55
+ WhoNeedsWP::render_html(filename, "post_index", WhoNeedsWP::render_template("all_posts", {
56
+ :posts => @@posts
57
+ }), "All Posts")
58
+ end
56
59
  end
57
60
 
58
61
  # Generate an RSS feed of all the posts
@@ -0,0 +1,17 @@
1
+
2
+ module WhoNeedsWP
3
+
4
+ class YahooTermExtractor
5
+ @@API_URI = URI.parse('http://api.search.yahoo.com/ContentAnalysisService/V1/termExtraction')
6
+ def self.generate_keywords(text)
7
+ return [] if text.empty?
8
+ keywords = []
9
+ i = Net::HTTP.post_form(@@API_URI, { 'appid' => 'who-needs-wp', 'context' => text } )
10
+ i = REXML::Document.new i.body
11
+ i.each_element("//Result") do |result|
12
+ keywords << result.text
13
+ end
14
+ return keywords
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,3 @@
1
- require 'nokogiri'
2
1
 
3
2
  module WhoNeedsWP
4
3
  class Delicious < Sidebar
@@ -27,12 +26,12 @@ module WhoNeedsWP
27
26
  def get_bookmarks
28
27
  @logger.debug "Fetching bookmarks from Delicious"
29
28
  bookmarks = []
30
- doc = Nokogiri::XML(open("http://feeds.delicious.com/v2/rss/#{@username}?count=5"))
31
- doc.xpath('//channel/item').each do |item|
29
+ doc = REXML::Document.new(open("http://feeds.delicious.com/v2/rss/#{@username}?count=5"))
30
+ doc.each_element('//channel/item') do |item|
32
31
  bookmarks << {
33
- :title => (item/'title').first.content,
34
- :url => (item/'link').first.content,
35
- :date => Date.parse((item/'pubDate').first.content)
32
+ :title => item.get_text('title'),
33
+ :url => item.get_text('link'),
34
+ :date => Date.parse(item.get_text('pubDate').to_s)
36
35
  }
37
36
  end
38
37
  return bookmarks
@@ -0,0 +1,14 @@
1
+ module WhoNeedsWP
2
+ class Latitude < Sidebar
3
+ def initialize(username)
4
+ super()
5
+ @username = username
6
+ end
7
+
8
+ # See Sidebar.render
9
+ def render
10
+ @logger.debug "Rendering Latitude iFrame"
11
+ WhoNeedsWP::render_template("latitude", { :username => @username })
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+
2
+ module WhoNeedsWP
3
+ def self.sitemap
4
+ document = REXML::Document.new
5
+ urlset = document.add_element("urlset", { "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9"})
6
+ Post.all.each do |post|
7
+ url = REXML::Element.new("url")
8
+ urlset.add(url)
9
+ url.add_element("loc").text = post.url
10
+ url.add_element("lastmod").text = post.created_at.strftime('%Y-%m-%d')
11
+ url.add_element("priority").text = "0.5"
12
+ end
13
+ Page.all.each do |page|
14
+ url = REXML::Element.new("url")
15
+ urlset.add(url)
16
+ url.add_element("loc").text = page.url
17
+ url.add_element("priority").text = "0.8"
18
+ end
19
+
20
+ # Generate sitemap for index page
21
+ url = REXML::Element.new("url")
22
+
23
+ url.add_element("loc").text = WhoNeedsWP::options[:url] + "/index.html"
24
+ if Post.all.length > 0
25
+ url.add_element("lastmod").text = Post.all[0].created_at.strftime('%Y-%m-%d')
26
+ end
27
+ url.add_element("priority").text = "1.0"
28
+ urlset.add(url)
29
+
30
+ # Write the XML document to a file
31
+ File.open("sitemap.xml", "w") do |file|
32
+ file.puts document
33
+ end
34
+
35
+ # Create a robots.txt which points to the sitemap.xml
36
+ File.open("robots.txt", "w") do |file|
37
+ file.puts "Sitemap: #{WhoNeedsWP::options[:url]}sitemap.xml"
38
+ end
39
+ end
40
+ end
@@ -1,6 +1,8 @@
1
1
  @import reset-fonts-grids.sass
2
2
  @import base.sass
3
- @import pygments.sass
3
+
4
+ iframe
5
+ border: 0
4
6
 
5
7
  #content.index .navigation
6
8
  display: none
@@ -6,7 +6,7 @@ module WhoNeedsWP
6
6
  end
7
7
 
8
8
  # Render the specified HTML contents within the layout template
9
- def self.render_html(filename, type, contents, title = "")
9
+ def self.render_html(filename, type, contents, title = "", tags = [], summary = "")
10
10
  File.open(filename, "w") do |file|
11
11
  body = @template['body'].render(Object.new, {
12
12
  :content => contents,
@@ -17,7 +17,9 @@ module WhoNeedsWP
17
17
  file.puts @template['layout'].render(Object.new, {
18
18
  :content => body,
19
19
  :options => @options,
20
- :title => title
20
+ :title => title,
21
+ :tags => tags,
22
+ :summary => summary
21
23
  })
22
24
  end
23
25
  end
@@ -1,7 +1,8 @@
1
- %h1 All Posts
2
- %ul
3
- - posts.each do |post|
4
- %li
5
- %span.date= post.created_at.strftime('%Y-%m-%d')
6
- %a.title{:href => "#{post.url}", :title => post.title}= post.title
7
- %p= post.summary
1
+ - if posts.length > 1
2
+ %h1 All Posts
3
+ %ul
4
+ - posts.each do |post|
5
+ %li
6
+ %span.date= post.created_at.strftime('%Y-%m-%d')
7
+ %a.title{:href => "#{post.url}", :title => post.title}= post.title
8
+ %p= post.summary
@@ -0,0 +1 @@
1
+ %iframe{:src => "http://www.google.com/latitude/apps/badge/api?user=#{username}&type=iframe&maptype=terrain", :width => "180", :height => "300"}
@@ -1,10 +1,14 @@
1
- !!! Strict
1
+ !!! 5
2
2
  %html
3
3
  %head
4
4
  - if options[:stylesheet] == nil or options[:stylesheet].empty?
5
5
  %link{:rel => "stylesheet", :type => "text/css", :href => "#{options[:url]}/style.css"}/
6
6
  %link{:rel => "alternate", :type => "application/atom+xml", :href => "#{options[:url]}/posts.atom", :title => "#{options[:title]} - Atom"}/
7
7
  %link{:rel => "alternate", :type => "application/rss+xml", :href => "#{options[:url]}/posts.rss", :title => "#{options[:title]} - RSS"}/
8
+ - if defined? tags and tags != nil and tags.length > 0
9
+ %meta{:name => "keywords", :content => tags.join(' ')}/
10
+ - if defined? summary and summary != nil and !summary.empty?
11
+ %meta{:name => "description", :content => summary.gsub(/<\/?[^>]*>/, "")}/
8
12
  %title
9
13
  = options[:title]
10
14
  - if defined? title and title != nil and not title.empty?
@@ -15,14 +19,16 @@
15
19
  %meta{:"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}/
16
20
  %body
17
21
  = content
22
+ - if options[:google_analytics] != nil and not options[:google_analytics].empty?
23
+ %script{:src => 'http://www.google-analytics.com/ga.js', :type => 'text/javascript'}
24
+ = ""
18
25
 
19
- - if options[:google_analytics] != nil and not options[:google_analytics].empty?
20
- %script{:src => 'http://www.google-analytics.com/ga.js', :type => 'text/javascript'}/
21
- :javascript
22
- try {
23
- var pageTracker = _gat._getTracker("#{options[:google_analytics]}");
24
- pageTracker._trackPageview();
25
- } catch(err) {}
26
+ :javascript
27
+ try {
28
+ var pageTracker = _gat._getTracker("#{options[:google_analytics]}");
29
+ pageTracker._trackPageview();
30
+ } catch(err) {}
31
+
26
32
 
27
33
 
28
34
 
@@ -2,8 +2,9 @@
2
2
  .page
3
3
  %h2.title
4
4
  %a{:href => "#{options[:url]}/#{page.filename[:generated]}"}= page.title
5
- .author
6
- by
7
- = page.author
5
+ - if not page.author.empty?
6
+ .author
7
+ by
8
+ = page.author
8
9
  .content
9
- ~ page.markdown
10
+ ~ page.markdown.to_html
@@ -1,4 +1,4 @@
1
- - if pages.length > 0
1
+ - if pages.length > 1
2
2
  %h2 Pages
3
3
  %ul
4
4
  - pages.each do |page|
@@ -8,7 +8,7 @@
8
8
  by
9
9
  = post.author
10
10
  .content
11
- ~ post.markdown
11
+ ~ post.markdown.to_html
12
12
 
13
13
  - if previous_post or next_post
14
14
  .navigation
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 6
8
- - 1
9
- version: 0.6.1
7
+ - 7
8
+ - 0
9
+ version: 0.7.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Owen Griffin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-29 00:00:00 +01:00
17
+ date: 2010-04-21 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -60,49 +60,49 @@ dependencies:
60
60
  type: :runtime
61
61
  version_requirements: *id003
62
62
  - !ruby/object:Gem::Dependency
63
- name: nokogiri
63
+ name: choice
64
64
  prerelease: false
65
65
  requirement: &id004 !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  segments:
70
+ - 0
70
71
  - 1
71
72
  - 4
72
- - 1
73
- version: 1.4.1
73
+ version: 0.1.4
74
74
  type: :runtime
75
75
  version_requirements: *id004
76
76
  - !ruby/object:Gem::Dependency
77
- name: open4
77
+ name: net-ssh
78
78
  prerelease: false
79
79
  requirement: &id005 !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  segments:
84
- - 1
84
+ - 2
85
85
  - 0
86
- - 1
87
- version: 1.0.1
86
+ - 21
87
+ version: 2.0.21
88
88
  type: :runtime
89
89
  version_requirements: *id005
90
90
  - !ruby/object:Gem::Dependency
91
- name: makers-mark
91
+ name: net-sftp
92
92
  prerelease: false
93
93
  requirement: &id006 !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  segments:
98
+ - 2
98
99
  - 0
99
- - 1
100
- - 1
101
- version: 0.1.1
100
+ - 4
101
+ version: 2.0.4
102
102
  type: :runtime
103
103
  version_requirements: *id006
104
104
  - !ruby/object:Gem::Dependency
105
- name: choice
105
+ name: kramdown
106
106
  prerelease: false
107
107
  requirement: &id007 !ruby/object:Gem::Requirement
108
108
  requirements:
@@ -110,39 +110,25 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  segments:
112
112
  - 0
113
- - 1
114
- - 4
115
- version: 0.1.4
113
+ - 6
114
+ - 0
115
+ version: 0.6.0
116
116
  type: :runtime
117
117
  version_requirements: *id007
118
118
  - !ruby/object:Gem::Dependency
119
- name: net-ssh
119
+ name: coderay
120
120
  prerelease: false
121
121
  requirement: &id008 !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  segments:
126
- - 2
127
126
  - 0
128
- - 21
129
- version: 2.0.21
130
- type: :runtime
131
- version_requirements: *id008
132
- - !ruby/object:Gem::Dependency
133
- name: net-sftp
134
- prerelease: false
135
- requirement: &id009 !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- segments:
127
+ - 9
140
128
  - 2
141
- - 0
142
- - 4
143
- version: 2.0.4
129
+ version: 0.9.2
144
130
  type: :runtime
145
- version_requirements: *id009
131
+ version_requirements: *id008
146
132
  description: A static web site generator.
147
133
  email: owen.griffin@gmail.com
148
134
  executables:
@@ -160,12 +146,14 @@ files:
160
146
  - lib/who-needs-wp/content/Page.rb
161
147
  - lib/who-needs-wp/content/Post.rb
162
148
  - lib/who-needs-wp/css.rb
149
+ - lib/who-needs-wp/keywords.rb
163
150
  - lib/who-needs-wp/sidebar/delicious.rb
151
+ - lib/who-needs-wp/sidebar/latitude.rb
164
152
  - lib/who-needs-wp/sidebar/pageindex.rb
165
153
  - lib/who-needs-wp/sidebar/recentposts.rb
166
154
  - lib/who-needs-wp/sidebar/twitter.rb
155
+ - lib/who-needs-wp/sitemap.rb
167
156
  - lib/who-needs-wp/stylesheets/base.sass
168
- - lib/who-needs-wp/stylesheets/pygments.sass
169
157
  - lib/who-needs-wp/stylesheets/reset-fonts-grids.sass
170
158
  - lib/who-needs-wp/stylesheets/style.sass
171
159
  - lib/who-needs-wp/templates.rb
@@ -173,6 +161,7 @@ files:
173
161
  - lib/who-needs-wp/templates/atom.haml
174
162
  - lib/who-needs-wp/templates/body.haml
175
163
  - lib/who-needs-wp/templates/delicious.haml
164
+ - lib/who-needs-wp/templates/latitude.haml
176
165
  - lib/who-needs-wp/templates/layout.haml
177
166
  - lib/who-needs-wp/templates/page.haml
178
167
  - lib/who-needs-wp/templates/pageindex.haml
@@ -1,140 +0,0 @@
1
- .code
2
- .c
3
- color: #999988
4
- font-style: italic
5
-
6
- .err
7
- color: #a61717
8
- background-color: #e3d2d2
9
-
10
- .k, .o
11
- font-weight: bold
12
-
13
- .cm
14
- color: #999988
15
- font-style: italic
16
-
17
- .cp
18
- color: #999999
19
- font-weight: bold
20
-
21
- .c1
22
- color: #999988
23
- font-style: italic
24
-
25
- .cs
26
- color: #999999
27
- font-weight: bold
28
- font-style: italic
29
-
30
- .gd
31
- color: #000000
32
- background-color: #ffdddd
33
-
34
- .x
35
- color: #000000
36
- background-color: #ffaaaa
37
-
38
- .ge
39
- font-style: italic
40
-
41
- .gr
42
- color: #aa0000
43
-
44
- .gh
45
- color: #999999
46
-
47
- .gi
48
- color: #000000
49
- background-color: #ddffdd
50
-
51
- .x
52
- color: #000000
53
- background-color: #aaffaa
54
-
55
- .go
56
- color: #888888
57
-
58
- .gp
59
- color: #555555
60
-
61
- .gs
62
- font-weight: bold
63
-
64
- .gu
65
- color: #aaaaaa
66
-
67
- .gt
68
- color: #aa0000
69
-
70
- .kc, .kd, .kp, .kr
71
- font-weight: bold
72
-
73
- .kt
74
- color: #445588
75
- font-weight: bold
76
-
77
- .m
78
- color: #009999
79
-
80
- .s
81
- color: #d14
82
-
83
- .na
84
- color: #008080
85
-
86
- .nb
87
- color: #0086B3
88
-
89
- .nc
90
- color: #445588
91
- font-weight: bold
92
-
93
- .no
94
- color: #008080
95
-
96
- .ni
97
- color: #800080
98
-
99
- .ne, .nf
100
- color: #990000
101
- font-weight: bold
102
-
103
- .nn
104
- color: #555555
105
-
106
- .nt
107
- color: #000080
108
-
109
- .nv
110
- color: #008080
111
-
112
- .ow
113
- font-weight: bold
114
-
115
- .w
116
- color: #bbbbbb
117
-
118
- .mf, .mh, .mi, .mo
119
- color: #009999
120
-
121
- .sb, .sc, .sd, .s2, .se, .sh, .si, .sx
122
- color: #d14
123
-
124
- .sr
125
- color: #009926
126
-
127
- .s1
128
- color: #d14
129
-
130
- .ss
131
- color: #990073
132
-
133
- .bp
134
- color: #999999
135
-
136
- .vc, .vg, .vi
137
- color: #008080
138
-
139
- .il
140
- color: #009999