polites 0.1.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.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +18 -0
  5. data/.tool-versions +1 -0
  6. data/.travis.yml +6 -0
  7. data/.yardopts +1 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +15 -0
  10. data/Gemfile.lock +128 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +70 -0
  13. data/Rakefile +9 -0
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/exe/polites +8 -0
  17. data/lib/polites.rb +33 -0
  18. data/lib/polites/block.rb +65 -0
  19. data/lib/polites/block/blockquote.rb +8 -0
  20. data/lib/polites/block/code_block.rb +18 -0
  21. data/lib/polites/block/divider.rb +8 -0
  22. data/lib/polites/block/heading.rb +8 -0
  23. data/lib/polites/block/heading1.rb +8 -0
  24. data/lib/polites/block/heading2.rb +8 -0
  25. data/lib/polites/block/heading3.rb +8 -0
  26. data/lib/polites/block/heading4.rb +8 -0
  27. data/lib/polites/block/heading5.rb +8 -0
  28. data/lib/polites/block/heading6.rb +8 -0
  29. data/lib/polites/block/list.rb +14 -0
  30. data/lib/polites/block/ordered_list.rb +8 -0
  31. data/lib/polites/block/paragraph.rb +8 -0
  32. data/lib/polites/block/unordered_list.rb +8 -0
  33. data/lib/polites/cli.rb +52 -0
  34. data/lib/polites/convert.rb +29 -0
  35. data/lib/polites/doc/_index.html +85 -0
  36. data/lib/polites/doc/class_list.html +51 -0
  37. data/lib/polites/doc/css/common.css +1 -0
  38. data/lib/polites/doc/css/full_list.css +58 -0
  39. data/lib/polites/doc/css/style.css +496 -0
  40. data/lib/polites/doc/file_list.html +51 -0
  41. data/lib/polites/doc/frames.html +17 -0
  42. data/lib/polites/doc/index.html +85 -0
  43. data/lib/polites/doc/js/app.js +314 -0
  44. data/lib/polites/doc/js/full_list.js +216 -0
  45. data/lib/polites/doc/js/jquery.js +4 -0
  46. data/lib/polites/doc/method_list.html +51 -0
  47. data/lib/polites/doc/top-level-namespace.html +100 -0
  48. data/lib/polites/file.rb +67 -0
  49. data/lib/polites/html_formatter.rb +119 -0
  50. data/lib/polites/list_indenter.rb +34 -0
  51. data/lib/polites/markup.rb +31 -0
  52. data/lib/polites/nanoc.rb +46 -0
  53. data/lib/polites/nanoc/data_source.rb +93 -0
  54. data/lib/polites/nanoc/embedded_images_filter.rb +22 -0
  55. data/lib/polites/nanoc/extract_file_filter.rb +21 -0
  56. data/lib/polites/node.rb +28 -0
  57. data/lib/polites/parser.rb +174 -0
  58. data/lib/polites/plist.rb +28 -0
  59. data/lib/polites/range_tag.rb +29 -0
  60. data/lib/polites/settings.rb +35 -0
  61. data/lib/polites/sheet.rb +63 -0
  62. data/lib/polites/simple_tag.rb +22 -0
  63. data/lib/polites/span.rb +60 -0
  64. data/lib/polites/span/annotation.rb +18 -0
  65. data/lib/polites/span/code.rb +8 -0
  66. data/lib/polites/span/delete.rb +8 -0
  67. data/lib/polites/span/emph.rb +8 -0
  68. data/lib/polites/span/footnote.rb +18 -0
  69. data/lib/polites/span/image.rb +29 -0
  70. data/lib/polites/span/link.rb +21 -0
  71. data/lib/polites/span/mark.rb +8 -0
  72. data/lib/polites/span/strong.rb +8 -0
  73. data/lib/polites/tag.rb +20 -0
  74. data/lib/polites/text.rb +20 -0
  75. data/lib/polites/version.rb +5 -0
  76. data/polites-nanoc.gemspec +31 -0
  77. data/polites.gemspec +33 -0
  78. metadata +153 -0
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../polites'
4
+ require_relative './node'
5
+
6
+ module Polites
7
+ # A block represents a structural element in a Polites document, mapping to
8
+ # block-level elements in HTML. Examples include paragraphs and headings.
9
+ #
10
+ # Blocks may technically contain other blocks, as well as {Text} and {Span}
11
+ # elements.
12
+ class Block < Node
13
+ # Build the proper kind of span from the given arguments.
14
+ #
15
+ # @param [Array<Node>] children
16
+ # @param [String] kind the type Polites has given to this node.
17
+ # @param [Fixnum] level the indentation level used by list items.
18
+ # @param [String] syntax the syntax attribute used in code blocks.
19
+ # @raise [ParseError] when encountering unexpected `kind`
20
+ # @return [Span]
21
+ def self.build(children = [], kind: 'paragraph', level: 0, syntax: nil)
22
+ case kind
23
+ when 'heading1'
24
+ Heading1.new(children)
25
+ when 'heading2'
26
+ Heading2.new(children)
27
+ when 'heading3'
28
+ Heading3.new(children)
29
+ when 'heading4'
30
+ Heading4.new(children)
31
+ when 'heading5'
32
+ Heading5.new(children)
33
+ when 'heading6'
34
+ Heading6.new(children)
35
+ when 'paragraph'
36
+ Paragraph.new(children)
37
+ when 'unorderedList'
38
+ UnorderedList.new(children, level)
39
+ when 'orderedList'
40
+ OrderedList.new(children, level)
41
+ when 'blockquote'
42
+ Blockquote.new(children)
43
+ when 'divider'
44
+ Divider.new(children)
45
+ when 'codeblock'
46
+ CodeBlock.new(children, syntax)
47
+ else
48
+ raise ParseError, "unknown block type #{kind.inspect}"
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ require_relative './block/heading1'
55
+ require_relative './block/heading2'
56
+ require_relative './block/heading3'
57
+ require_relative './block/heading4'
58
+ require_relative './block/heading5'
59
+ require_relative './block/heading6'
60
+ require_relative './block/paragraph'
61
+ require_relative './block/ordered_list'
62
+ require_relative './block/unordered_list'
63
+ require_relative './block/blockquote'
64
+ require_relative './block/divider'
65
+ require_relative './block/code_block'
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::Blockquote < Block
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::CodeBlock < Block
7
+ attr_reader :syntax
8
+
9
+ def initialize(children, syntax)
10
+ @syntax = syntax
11
+ super(children)
12
+ end
13
+
14
+ def eql?(other)
15
+ super && syntax == other.syntax
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::Divider < Block
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::Heading < Block
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading1 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading2 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading3 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading4 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading5 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './heading'
4
+
5
+ module Polites
6
+ class Block::Heading6 < Block::Heading
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::List < Block
7
+ attr_reader :level
8
+
9
+ def initialize(children, level)
10
+ super(children)
11
+ @level = level
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './list'
4
+
5
+ module Polites
6
+ class Block::OrderedList < Block::List
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../block'
4
+
5
+ module Polites
6
+ class Block::Paragraph < Block
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './list'
4
+
5
+ module Polites
6
+ class Block::UnorderedList < Block::List
7
+ end
8
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+ require_relative './convert'
5
+ require_relative './version'
6
+
7
+ module Polites
8
+ # Provides the implentation of the command-line interface, exposing functions
9
+ # to be called from a shell or other programs.
10
+ #
11
+ # @example
12
+ # Cli.new(stdin: $stdin, $stdout: stdout).call(ARGV)
13
+ class Cli
14
+ # @param [IO] stdin to read input from
15
+ # @param [IO] stdout to write output to
16
+ # @param [Hash] options default options
17
+ def initialize(stdin:, stdout:, options: {})
18
+ @stdin = stdin
19
+ @stdout = stdout
20
+ @options = options
21
+ end
22
+
23
+ # Invoke the program with some options.
24
+ #
25
+ # @param [Array<String>] args arguments given to the program invocation.
26
+ # @return [nil]
27
+ def call(args)
28
+ filenames = option_parser.parse(args, into: @options)
29
+ if @options[:help]
30
+ @stdout.puts option_parser
31
+ elsif @options[:version]
32
+ @stdout.puts Polites::VERSION
33
+ elsif filenames.any?
34
+ filenames.each do |filename|
35
+ @stdout.puts Convert.new.call(filename)
36
+ end
37
+ end
38
+ nil
39
+ end
40
+
41
+ private
42
+
43
+ def option_parser
44
+ @option_parser ||=
45
+ OptionParser.new do |o|
46
+ o.banner = 'Usage: polites [options] FILE'
47
+ o.on_tail '-v', '--version', 'Show current version'
48
+ o.on_tail '-h', '--help', 'Show this message'
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './parser'
4
+ require_relative './html_formatter'
5
+ require_relative './file'
6
+
7
+ module Polites
8
+ # Convert a Polites file to another format.
9
+ class Convert
10
+ # @param [Polites::Parser] parser
11
+ # @param [Polites::HtmlFormatter] formatter
12
+ def initialize(parser: Polites::Parser.new, formatter: Polites::HtmlFormatter.new)
13
+ @parser = parser
14
+ @formatter = formatter
15
+ end
16
+
17
+ # Convert the contents of `filename` to HTML and return the result as a String.
18
+ #
19
+ # @param [#to_s, #to_path] filename
20
+ # @return [String]
21
+ def call(filename)
22
+ File.open(filename) do |f|
23
+ f.content
24
+ .then { |c| @parser.parse_sheet(c) }
25
+ .then { |c| @formatter.call(c) }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,85 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Documentation by YARD 0.9.25
8
+
9
+ </title>
10
+
11
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
12
+
13
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
14
+
15
+ <script type="text/javascript">
16
+ pathId = null;
17
+ relpath = '';
18
+ </script>
19
+
20
+
21
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
24
+
25
+
26
+ </head>
27
+ <body>
28
+ <div class="nav_wrap">
29
+ <iframe id="nav" src="class_list.html?1"></iframe>
30
+ <div id="resizer"></div>
31
+ </div>
32
+
33
+ <div id="main" tabindex="-1">
34
+ <div id="header">
35
+ <div id="menu">
36
+
37
+ </div>
38
+
39
+ <div id="search">
40
+
41
+ <a class="full_list_link" id="class_list_link"
42
+ href="class_list.html">
43
+
44
+ <svg width="24" height="24">
45
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
46
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
47
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
48
+ </svg>
49
+ </a>
50
+
51
+ </div>
52
+ <div class="clear"></div>
53
+ </div>
54
+
55
+ <div id="content"><h1 class="noborder title">Documentation by YARD 0.9.25</h1>
56
+ <div id="listing">
57
+ <h1 class="alphaindex">Alphabetic Index</h1>
58
+
59
+ <div class="clear"></div>
60
+ <h2>Namespace Listing A-Z</h2>
61
+
62
+
63
+
64
+
65
+ <table>
66
+ <tr>
67
+ <td valign='top' width="33%">
68
+
69
+ </td>
70
+ </tr>
71
+ </table>
72
+
73
+ </div>
74
+
75
+ </div>
76
+
77
+ <div id="footer">
78
+ Generated on Mon Nov 30 11:14:54 2020 by
79
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
80
+ 0.9.25 (ruby-2.7.2).
81
+ </div>
82
+
83
+ </div>
84
+ </body>
85
+ </html>
@@ -0,0 +1,51 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <title>Class List</title>
19
+ <base id="base_target" target="_parent" />
20
+ </head>
21
+ <body>
22
+ <div id="content">
23
+ <div class="fixed_header">
24
+ <h1 id="full_list_header">Class List</h1>
25
+ <div id="full_list_nav">
26
+
27
+ <span><a target="_self" href="class_list.html">
28
+ Classes
29
+ </a></span>
30
+
31
+ <span><a target="_self" href="method_list.html">
32
+ Methods
33
+ </a></span>
34
+
35
+ <span><a target="_self" href="file_list.html">
36
+ Files
37
+ </a></span>
38
+
39
+ </div>
40
+
41
+ <div id="search">Search: <input type="text" /></div>
42
+ </div>
43
+
44
+ <ul id="full_list" class="class">
45
+ <li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
46
+
47
+
48
+ </ul>
49
+ </div>
50
+ </body>
51
+ </html>
@@ -0,0 +1 @@
1
+ /* Override this file with custom rules */
@@ -0,0 +1,58 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
4
+ font-size: 13px;
5
+ height: 101%;
6
+ overflow-x: hidden;
7
+ background: #fafafa;
8
+ }
9
+
10
+ h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
11
+ .clear { clear: both; }
12
+ .fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; }
13
+ #search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
14
+ #content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
15
+ #full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; }
16
+ #full_list ul { padding: 0; }
17
+ #full_list li { padding: 0; margin: 0; list-style: none; }
18
+ #full_list li .item { padding: 5px 5px 5px 12px; }
19
+ #noresults { padding: 7px 12px; background: #fff; }
20
+ #content.insearch #noresults { margin-left: 7px; }
21
+ li.collapsed ul { display: none; }
22
+ li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
23
+ li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
24
+ li { color: #888; cursor: pointer; }
25
+ li.deprecated { text-decoration: line-through; font-style: italic; }
26
+ li.odd { background: #f0f0f0; }
27
+ li.even { background: #fafafa; }
28
+ .item:hover { background: #ddd; }
29
+ li small:before { content: "("; }
30
+ li small:after { content: ")"; }
31
+ li small.search_info { display: none; }
32
+ a, a:visited { text-decoration: none; color: #05a; }
33
+ li.clicked > .item { background: #05a; color: #ccc; }
34
+ li.clicked > .item a, li.clicked > .item a:visited { color: #eee; }
35
+ li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; }
36
+ li.collapsed.clicked a.toggle { background-position: top right; }
37
+ #search input { border: 1px solid #bbb; border-radius: 3px; }
38
+ #full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; }
39
+ #full_list_nav a, #nav a:visited { color: #358; }
40
+ #full_list_nav a:hover { background: transparent; color: #5af; }
41
+ #full_list_nav span:after { content: ' | '; }
42
+ #full_list_nav span:last-child:after { content: ''; }
43
+
44
+ #content h1 { margin-top: 0; }
45
+ li { white-space: nowrap; cursor: normal; }
46
+ li small { display: block; font-size: 0.8em; }
47
+ li small:before { content: ""; }
48
+ li small:after { content: ""; }
49
+ li small.search_info { display: none; }
50
+ #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
51
+ #content.insearch #search { background-position: center right; }
52
+ #search input { width: 110px; }
53
+
54
+ #full_list.insearch ul { display: block; }
55
+ #full_list.insearch .item { display: none; }
56
+ #full_list.insearch .found { display: block; padding-left: 11px !important; }
57
+ #full_list.insearch li a.toggle { display: none; }
58
+ #full_list.insearch li small.search_info { display: block; }