Skip to content

Commit ae7a5ab

Browse files
TobiasThibaut
authored andcommitted
Add Tcl/Tk documentation
All commands without extension C-API. No fancy style or anything.
1 parent a24a2ce commit ae7a5ab

9 files changed

Lines changed: 173 additions & 0 deletions

File tree

assets/stylesheets/application-dark.css.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
'pages/rust',
7373
'pages/socketio',
7474
'pages/sphinx',
75+
'pages/tcl_tk',
7576
'pages/underscore',
7677
'pages/vagrant',
7778
'pages/vue',

assets/stylesheets/application.css.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
'pages/rust',
7373
'pages/socketio',
7474
'pages/sphinx',
75+
'pages/tcl_tk',
7576
'pages/underscore',
7677
'pages/vagrant',
7778
'pages/vue',
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
._tcl_tk {
2+
/* make content listing more compact */
3+
.description {
4+
margin: 0;
5+
> dd {
6+
margin: 0;
7+
}
8+
}
9+
dl {
10+
margin: 0;
11+
}
12+
.copy {
13+
/* per page copyright */
14+
white-space: pre;
15+
font-size: 80%;
16+
border-top: 1px solid #6A6A6A;
17+
margin-top: 2em;
18+
}
19+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module Docs
2+
class TclTk
3+
class CleanHtmlFilter < Filter
4+
def call
5+
# Page Title
6+
css('h2').remove
7+
# Navigation
8+
css('h3:first-child').remove
9+
# restore breaks in copyright
10+
txt = at_css('div.copy').content
11+
at_css('div.copy').content = txt.gsub! /.Copyright/, "\n\\0"
12+
13+
file = result[:path].split('/')[-1]
14+
re = Regexp.new('^' + Regexp.escape(file) + '(#.*)$')
15+
css('a[name]').each do |node|
16+
if node['href'] then
17+
# useless name
18+
node.remove_attribute 'name'
19+
# make fragments relativ
20+
if node['href'].match re then
21+
node['href'] = node['href'].sub re, '\\1'
22+
end
23+
else
24+
# move name to id
25+
node.parent['id'] = node['name']
26+
node.parent.content = node.content
27+
end
28+
end
29+
30+
# remove keywords headline
31+
css('h3').each do |node|
32+
if node.content == 'KEYWORDS' then
33+
node.remove
34+
end
35+
end
36+
# remove keywords links
37+
css('a').each do |node|
38+
attr = node.attribute('href')
39+
if attr && attr.value.match(/\/Keywords\//) then
40+
# the ','
41+
if node.next_sibling then
42+
node.next_sibling.remove
43+
end
44+
node.remove
45+
end
46+
end
47+
48+
doc
49+
end
50+
end
51+
end
52+
end

lib/docs/filters/tcl_tk/entries.rb

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
module Docs
2+
class TclTk
3+
class EntriesFilter < Docs::EntriesFilter
4+
#def additional_entries
5+
# type = nil
6+
#end
7+
8+
def split_slug
9+
slug.sub! /\.html?/, ''
10+
return *slug.split('/')
11+
end
12+
13+
TYPE_MAP = {
14+
'TclCmd' => 'Tcl',
15+
'TkCmd' => 'Tk',
16+
'ItclCmd' => 'incr',
17+
'SqliteCmd' => 'tdbc',
18+
'TdbcCmd' => 'tdbc',
19+
'TdbcmysqlCmd' => 'tdbc',
20+
'TdbcodbcCmd' => 'tdbc',
21+
'TdbcpostgresCmd' => 'tdbc',
22+
'TdbcsqliteCmd' => 'tdbc',
23+
'ThreadCmd' => 'Thread',
24+
'UserCmd' => 'App'
25+
}
26+
27+
def get_type
28+
type, name = split_slug
29+
type = TYPE_MAP[type] || type
30+
if name == 'contents' then
31+
type = nil
32+
end
33+
type
34+
end
35+
36+
def get_name
37+
type, name = split_slug
38+
name
39+
end
40+
41+
def additional_entries
42+
type, name = split_slug
43+
if type != 'TclCmd' || name != 'library' then
44+
return []
45+
end
46+
# special rule for library page which contains multiple commands at once
47+
entries = []
48+
css('a > b').each do |node|
49+
text = node.content.strip
50+
id = node.parent['href'].sub /^.*#(.*)$/, '\\1'
51+
entries << [text, id, TYPE_MAP[type]]
52+
end
53+
return entries
54+
end
55+
end
56+
end
57+
end

lib/docs/scrapers/tcl_tk.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
module Docs
2+
class TclTk < UrlScraper
3+
self.name = 'Tcl/Tk'
4+
self.type = 'tcl_tk'
5+
self.slug = 'tcl'
6+
self.version = '8.6'
7+
# test URL:
8+
self.base_url = 'http://localhost/tcl/'
9+
# real URL:
10+
#self.base_url = 'http://www.tcl.tk/man/tcl/'
11+
self.root_path = 'contents.htm'
12+
13+
html_filters.push 'tcl_tk/clean_html', 'tcl_tk/entries'
14+
15+
options[:skip_links] = false
16+
17+
options[:trailing_slash] = false
18+
options[:skip] = ['siteinfo.htm']
19+
options[:skip_patterns] = [
20+
# ignore keyword list pages
21+
/^Keywords\//,
22+
# ignore C-API, only required for extension developers
23+
/^TclLib\//,
24+
/^TkLib\//,
25+
/^ItclLib\//,
26+
/^TdbcLib\//
27+
]
28+
29+
# TODO can't figure out howto convert .htm => .html in filenames
30+
# to save as "xyz.html" instead of "xyz.htm.html"
31+
#options[:fix_urls] = ->(url) do
32+
# url.sub! /\.htm($|#)/, '.html\\1'
33+
# url
34+
#end
35+
36+
# Each Page contains a specific list of copyrights, only add the
37+
# overall license link
38+
options[:attribution] = <<-HTML
39+
Licensed under <a href="http://tcl.tk/software/tcltk/license.html">Tcl/Tk Terms</a>
40+
HTML
41+
end
42+
end

public/icons/docs/tcl_tk/16.png

444 Bytes
Loading
992 Bytes
Loading

public/icons/docs/tcl_tk/SOURCE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
https://commons.wikimedia.org/wiki/File:Tcl.svg

0 commit comments

Comments
 (0)