From 2dc946c3bcd68c0eab81fed7d6dbe3dc999a3f80 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Thu, 18 Mar 2021 11:03:41 +0900 Subject: [PATCH 01/14] First gh-pages commit --- README.md | 1 + _config.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 README.md create mode 100644 _config.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..57a1ecb --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# UnicodePlot diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..0bd0d70 --- /dev/null +++ b/_config.yml @@ -0,0 +1,2 @@ +include: + - README.md From 46e85c8120cdcb289b66e2a9c0aa8c72ecf094b1 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Fri, 19 Mar 2021 14:53:41 +0900 Subject: [PATCH 02/14] Add blank layout --- _layouts/default.html | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 _layouts/default.html diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..37ef9c6 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,9 @@ + + + + UnicodePlot + + + {{ content }} + + From b101facbfab02ff8f45dfe7d693b965183270c31 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Sat, 20 Mar 2021 11:34:02 +0900 Subject: [PATCH 03/14] Prepare document generation environment --- .gitignore | 3 +++ .yardopts | 9 +++++++++ Gemfile | 5 +++++ yard-helper.rb | 28 ++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 .gitignore create mode 100644 .yardopts create mode 100644 Gemfile create mode 100644 yard-helper.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cafeacf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.yardoc +Gemfile.lock +/src diff --git a/.yardopts b/.yardopts new file mode 100644 index 0000000..a78a3db --- /dev/null +++ b/.yardopts @@ -0,0 +1,9 @@ +--asset src/img:img +--load yard-helper.rb +--markup markdown +--no-private +--readme src/README.md +src/lib/**/*.rb +- +src/CHANGES.md +src/LICENSE.txt diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..d6f717c --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source "https://rubygems.org/" + +gem "yard", github: "mrkn/yard", branch: "module_function_decorator" +gem "kramdown" +gem "kramdown-parser-gfm" diff --git a/yard-helper.rb b/yard-helper.rb new file mode 100644 index 0000000..b865903 --- /dev/null +++ b/yard-helper.rb @@ -0,0 +1,28 @@ +# See https://stackoverflow.com/a/63683511/4924735 +require "kramdown" +require "kramdown-parser-gfm" + +# Custom markup provider class that always renders Kramdown using GFM (Github +# Flavored Markdown). You could add additional customizations here, or even +# call a different Markdown library altogether, like `commonmarker`. +# The only requirement is that your class supports: +# - `#initialize(markdown_text, options_hash)` +# - `#to_html()`, which just returns the converted HTML source +class KramdownGfmDocument < Kramdown::Document + def initialize(source, options={}) + options[:input] ||= "GFM" + super(source, options) + end +end + +# Register the new provider as the highest priority option for Markdown. +# Unfortunately there's no nice interface for registering your provider; you +# just have to insert it directly at the front of the array. :\ +# See also: +# - https://github.com/lsegal/yard/issues/1157 +# - https://github.com/lsegal/yard/issues/1017 +# - https://github.com/lsegal/yard/blob/main/lib/yard/templates/helpers/markup_helper.rb +YARD::Templates::Helpers::MarkupHelper::MARKUP_PROVIDERS[:markdown].insert( + 0, + { const: "KramdownGfmDocument" } +) From 03473a93455305bd1bc54c60225af08ad5645b50 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Sun, 21 Mar 2021 15:52:02 +0900 Subject: [PATCH 04/14] Add Rakefile --- Rakefile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Rakefile diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..97fba6f --- /dev/null +++ b/Rakefile @@ -0,0 +1,31 @@ +require "bundler/setup" + +def clean(version) + FileUtils.rm_rf("src") + FileUtils.rm_rf(version) +end + +def clone(version) + system("git", "clone", "-b", "v#{version}", "--", ".", "src") +end + +def yard(version) + system("yard", "-o", version) +end + +def update_readme(version) + File.open("README.md", "a") do |f| + f.puts "- [#{version}](#{version})" + end +end + +task :yard, [:version] do |t, args| + unless (version = args[:version]) + $stderr.puts "version is required" + abort + end + clean(version) + clone(version) + yard(version) + update_readme(version) +end From 95ae84a97e0101284abd28e63c9b5aa3583f6062 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Sun, 21 Mar 2021 16:11:31 +0900 Subject: [PATCH 05/14] Update jekyll config on document generation --- Rakefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Rakefile b/Rakefile index 97fba6f..8bc52f0 100644 --- a/Rakefile +++ b/Rakefile @@ -19,6 +19,28 @@ def update_readme(version) end end +def update_jekyll_config(version) + content = File.read("_config.yml") + File.write("_config.yml.orig", content) # backup + + include_section = false + File.open("_config.yml", "w") do |f| + content.each_line do |line| + if include_section + case line + when /\A -/ + # do nothing + else + f.puts " - #{version}" + end + elsif line =~ /\Ainclude:/ + include_section = true + end + f.print line + end + end +end + task :yard, [:version] do |t, args| unless (version = args[:version]) $stderr.puts "version is required" @@ -28,4 +50,5 @@ task :yard, [:version] do |t, args| clone(version) yard(version) update_readme(version) + update_jekyll_config(version) end From 6a81fd1c14e1825e06bda817f744f3b2d1723ffd Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 15:49:11 +0900 Subject: [PATCH 06/14] Add document for version 0.0.4 --- 0.0.4/UnicodePlot.html | 1352 ++++++++++++++++ 0.0.4/UnicodePlot/AsciiCanvas.html | 482 ++++++ 0.0.4/UnicodePlot/Barplot.html | 780 ++++++++++ 0.0.4/UnicodePlot/BorderMaps.html | 158 ++ 0.0.4/UnicodePlot/BorderPrinter.html | 263 ++++ 0.0.4/UnicodePlot/Boxplot.html | 786 ++++++++++ 0.0.4/UnicodePlot/BrailleCanvas.html | 460 ++++++ 0.0.4/UnicodePlot/Canvas.html | 1715 +++++++++++++++++++++ 0.0.4/UnicodePlot/DensityCanvas.html | 461 ++++++ 0.0.4/UnicodePlot/DotCanvas.html | 417 +++++ 0.0.4/UnicodePlot/GridPlot.html | 861 +++++++++++ 0.0.4/UnicodePlot/Lineplot.html | 187 +++ 0.0.4/UnicodePlot/LookupCanvas.html | 425 ++++++ 0.0.4/UnicodePlot/Plot.html | 1862 +++++++++++++++++++++++ 0.0.4/UnicodePlot/Renderer.html | 525 +++++++ 0.0.4/UnicodePlot/Scatterplot.html | 187 +++ 0.0.4/UnicodePlot/StyledPrinter.html | 421 +++++ 0.0.4/UnicodePlot/Utils.html | 613 ++++++++ 0.0.4/UnicodePlot/ValueTransformer.html | 317 ++++ 0.0.4/UnicodePlot/Version.html | 121 ++ 0.0.4/_index.html | 329 ++++ 0.0.4/class_list.html | 51 + 0.0.4/css/common.css | 1 + 0.0.4/css/full_list.css | 58 + 0.0.4/css/style.css | 497 ++++++ 0.0.4/file.CHANGES.html | 98 ++ 0.0.4/file.LICENSE.html | 70 + 0.0.4/file.README.html | 160 ++ 0.0.4/file_list.html | 66 + 0.0.4/frames.html | 17 + 0.0.4/img/barplot.png | Bin 0 -> 17868 bytes 0.0.4/img/boxplot.png | Bin 0 -> 20279 bytes 0.0.4/img/densityplot.png | Bin 0 -> 86990 bytes 0.0.4/img/histogram.png | Bin 0 -> 51631 bytes 0.0.4/img/lineplot.png | Bin 0 -> 37632 bytes 0.0.4/img/scatterplot.png | Bin 0 -> 39042 bytes 0.0.4/index.html | 160 ++ 0.0.4/js/app.js | 314 ++++ 0.0.4/js/full_list.js | 216 +++ 0.0.4/js/jquery.js | 4 + 0.0.4/method_list.html | 971 ++++++++++++ 0.0.4/top-level-namespace.html | 110 ++ README.md | 2 + _config.yml | 1 + 44 files changed, 15518 insertions(+) create mode 100644 0.0.4/UnicodePlot.html create mode 100644 0.0.4/UnicodePlot/AsciiCanvas.html create mode 100644 0.0.4/UnicodePlot/Barplot.html create mode 100644 0.0.4/UnicodePlot/BorderMaps.html create mode 100644 0.0.4/UnicodePlot/BorderPrinter.html create mode 100644 0.0.4/UnicodePlot/Boxplot.html create mode 100644 0.0.4/UnicodePlot/BrailleCanvas.html create mode 100644 0.0.4/UnicodePlot/Canvas.html create mode 100644 0.0.4/UnicodePlot/DensityCanvas.html create mode 100644 0.0.4/UnicodePlot/DotCanvas.html create mode 100644 0.0.4/UnicodePlot/GridPlot.html create mode 100644 0.0.4/UnicodePlot/Lineplot.html create mode 100644 0.0.4/UnicodePlot/LookupCanvas.html create mode 100644 0.0.4/UnicodePlot/Plot.html create mode 100644 0.0.4/UnicodePlot/Renderer.html create mode 100644 0.0.4/UnicodePlot/Scatterplot.html create mode 100644 0.0.4/UnicodePlot/StyledPrinter.html create mode 100644 0.0.4/UnicodePlot/Utils.html create mode 100644 0.0.4/UnicodePlot/ValueTransformer.html create mode 100644 0.0.4/UnicodePlot/Version.html create mode 100644 0.0.4/_index.html create mode 100644 0.0.4/class_list.html create mode 100644 0.0.4/css/common.css create mode 100644 0.0.4/css/full_list.css create mode 100644 0.0.4/css/style.css create mode 100644 0.0.4/file.CHANGES.html create mode 100644 0.0.4/file.LICENSE.html create mode 100644 0.0.4/file.README.html create mode 100644 0.0.4/file_list.html create mode 100644 0.0.4/frames.html create mode 100644 0.0.4/img/barplot.png create mode 100644 0.0.4/img/boxplot.png create mode 100644 0.0.4/img/densityplot.png create mode 100644 0.0.4/img/histogram.png create mode 100644 0.0.4/img/lineplot.png create mode 100644 0.0.4/img/scatterplot.png create mode 100644 0.0.4/index.html create mode 100644 0.0.4/js/app.js create mode 100644 0.0.4/js/full_list.js create mode 100644 0.0.4/js/jquery.js create mode 100644 0.0.4/method_list.html create mode 100644 0.0.4/top-level-namespace.html diff --git a/0.0.4/UnicodePlot.html b/0.0.4/UnicodePlot.html new file mode 100644 index 0000000..1fff8e4 --- /dev/null +++ b/0.0.4/UnicodePlot.html @@ -0,0 +1,1352 @@ + + + + + + + Module: UnicodePlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot + + + +

+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/plot.rb,
+ src/lib/unicode_plot/utils.rb,
src/lib/unicode_plot/canvas.rb,
src/lib/unicode_plot/barplot.rb,
src/lib/unicode_plot/boxplot.rb,
src/lib/unicode_plot/version.rb,
src/lib/unicode_plot/lineplot.rb,
src/lib/unicode_plot/renderer.rb,
src/lib/unicode_plot/grid_plot.rb,
src/lib/unicode_plot/histogram.rb,
src/lib/unicode_plot/dot_canvas.rb,
src/lib/unicode_plot/densityplot.rb,
src/lib/unicode_plot/scatterplot.rb,
src/lib/unicode_plot/ascii_canvas.rb,
src/lib/unicode_plot/lookup_canvas.rb,
src/lib/unicode_plot/braille_canvas.rb,
src/lib/unicode_plot/density_canvas.rb,
src/lib/unicode_plot/styled_printer.rb,
src/lib/unicode_plot/value_transformer.rb
+
+
+ +
+ +

Defined Under Namespace

+

+ + + Modules: BorderMaps, BorderPrinter, StyledPrinter, Utils, ValueTransformer, Version + + + + Classes: AsciiCanvas, Barplot, Boxplot, BrailleCanvas, Canvas, DensityCanvas, DotCanvas, GridPlot, Lineplot, LookupCanvas, Plot, Renderer, Scatterplot + + +

+ + +

+ Constant Summary + collapse +

+ +
+ +
VERSION = + +
+
"0.0.4"
+ +
BORDER_MAP = + +
+
{
+  solid:   BorderMaps::BORDER_SOLID,
+  corners: BorderMaps::BORDER_CORNERS,
+  barplot: BorderMaps::BORDER_BARPLOT,
+}.freeze
+ +
+ + + + + + + + + +

+ Class Method Summary + collapse +

+ + + + + + +
+

Class Method Details

+ + +
+

+ + .barplot(*args, width: Plot::DEFAULT_WIDTH, color: Barplot::DEFAULT_COLOR, symbol: Barplot::DEFAULT_SYMBOL, border: :barplot, xscale: nil, xlabel: nil, data: nil, **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 72
+
+module_function def barplot(*args,
+                            width: Plot::DEFAULT_WIDTH,
+                            color: Barplot::DEFAULT_COLOR,
+                            symbol: Barplot::DEFAULT_SYMBOL,
+                            border: :barplot,
+                            xscale: nil,
+                            xlabel: nil,
+                            data: nil,
+                            **kw)
+  case args.length
+  when 0
+    data = Hash(data)
+    keys = data.keys.map(&:to_s)
+    heights = data.values
+  when 2
+    keys = Array(args[0])
+    heights = Array(args[1])
+  else
+    raise ArgumentError, "invalid arguments"
+  end
+
+  unless keys.length == heights.length
+    raise ArgumentError, "The given vectors must be of the same length"
+  end
+  unless heights.min >= 0
+    raise ArgumentError, "All values have to be positive. Negative bars are not supported."
+  end
+
+  xlabel ||= ValueTransformer.transform_name(xscale)
+  plot = Barplot.new(heights, width, color, symbol, xscale,
+                     border: border, xlabel: xlabel,
+                     **kw)
+  keys.each_with_index do |key, i|
+    plot.annotate_row!(:l, i, key)
+  end
+
+  plot
+end
+
+
+ +
+

+ + .barplot!(plot, *args, data: nil, **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 111
+
+module_function def barplot!(plot,
+                             *args,
+                             data: nil,
+                             **kw)
+  case args.length
+  when 0
+    data = Hash(data)
+    keys = data.keys.map(&:to_s)
+    heights = data.values
+  when 2
+    keys = Array(args[0])
+    heights = Array(args[1])
+  else
+    raise ArgumentError, "invalid arguments"
+  end
+
+  unless keys.length == heights.length
+    raise ArgumentError, "The given vectors must be of the same length"
+  end
+  if keys.empty?
+    raise ArgumentError, "Can't append empty array to barplot"
+  end
+
+  cur_idx = plot.n_rows
+  plot.add_row!(heights)
+  keys.each_with_index do |key, i|
+    plot.annotate_row!(:l, cur_idx + i, key)
+  end
+  plot
+end
+
+
+ +
+

+ + .boxplot(*args, data: nil, border: :corners, color: Boxplot::DEFAULT_COLOR, width: Plot::DEFAULT_WIDTH, xlim: [0, 0], **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 94
+
+module_function def boxplot(*args,
+                            data: nil,
+                            border: :corners,
+                            color: Boxplot::DEFAULT_COLOR,
+                            width: Plot::DEFAULT_WIDTH,
+                            xlim: [0, 0],
+                            **kw)
+  case args.length
+  when 0
+    data = Hash(data)
+    text = data.keys
+    data = data.values
+  when 1
+    data = args[0]
+  when 2
+    text = Array(args[0])
+    data = args[1]
+  else
+    raise ArgumentError, "wrong number of arguments"
+  end
+
+  case data[0]
+  when Numeric
+    data = [data]
+  when Array
+    # do nothing
+  else
+    data = data.to_ary
+  end
+  text ||= Array.new(data.length, "")
+
+  unless text.length == data.length
+    raise ArgumentError, "wrong number of text"
+  end
+
+  unless xlim.length == 2
+    raise ArgumentError, "xlim must be a length 2 array"
+  end
+
+  min_x, max_x = Utils.extend_limits(data.map(&:minmax).flatten, xlim)
+  width = [width, Boxplot::MIN_WIDTH].max
+
+  plot = Boxplot.new(data[0], width, color, min_x, max_x,
+                     border: border, **kw)
+  (1 ... data.length).each do |i|
+    plot.add_series!(data[i])
+  end
+
+  mean_x = (min_x + max_x) / 2.0
+  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
+  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
+  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
+  plot.annotate!(:bl, min_x_str, color: :light_black)
+  plot.annotate!(:b,  mean_x_str, color: :light_black)
+  plot.annotate!(:br, max_x_str, color: :light_black)
+
+  text.each_with_index do |name, i|
+    plot.annotate_row!(:l, i*3+1, name) if name.length > 0
+  end
+
+  plot
+end
+
+
+ +
+

+ + .boxplot!(plot, *args, **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 157
+
+module_function def boxplot!(plot, *args, **kw)
+  case args.length
+  when 1
+    data = args[0]
+    name = kw[:name] || ""
+  when 2
+    name = args[0]
+    data = args[1]
+  else
+    raise ArgumentError, "worng number of arguments"
+  end
+
+  if data.empty?
+    raise ArgumentError, "Can't append empty array to boxplot"
+  end
+
+  plot.add_series!(data)
+
+  plot.annotate_row!(:l, (plot.n_data - 1)*3+1, name) if name && name != ""
+
+  min_x = plot.min_x
+  max_x = plot.max_x
+  mean_x = (min_x + max_x) / 2.0
+  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
+  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
+  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
+  plot.annotate!(:bl, min_x_str, color: :light_black)
+  plot.annotate!(:b,  mean_x_str, color: :light_black)
+  plot.annotate!(:br, max_x_str, color: :light_black)
+
+  plot
+end
+
+
+ +
+

+ + .densityplot(x, y, color: :auto, grid: false, name: "", **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+2
+3
+4
+5
+
+
# File 'src/lib/unicode_plot/densityplot.rb', line 2
+
+module_function def densityplot(x, y, color: :auto, grid: false, name: "", **kw)
+  plot = GridPlot.new(x, y, :density, grid: grid, **kw)
+  scatterplot!(plot, x, y, color: color, name: name)
+end
+
+
+ +
+

+ + .densityplot!(plot, x, y, **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+7
+8
+9
+
+
# File 'src/lib/unicode_plot/densityplot.rb', line 7
+
+module_function def densityplot!(plot, x, y, **kw)
+  scatterplot!(plot, x, y, **kw)
+end
+
+
+ +
+

+ + .histogram(x, nbins: nil, closed: :left, symbol: "▇", **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/histogram.rb', line 4
+
+module_function def histogram(x,
+                              nbins: nil,
+                              closed: :left,
+                              symbol: "",
+                              **kw)
+  hist = x.histogram(*[nbins].compact, closed: closed)
+  edge, counts = hist.edge, hist.weights
+  labels = []
+  bin_width = edge[1] - edge[0]
+  pad_left, pad_right = 0, 0
+  (0 ... edge.length).each do |i|
+    val1 = Utils.float_round_log10(edge[i], bin_width)
+    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
+    a1 = val1.to_s.split('.', 2).map(&:length)
+    a2 = val2.to_s.split('.', 2).map(&:length)
+    pad_left  = [pad_left,  a1[0], a2[0]].max
+    pad_right = [pad_right, a1[1], a2[1]].max
+  end
+  l_str = hist.closed == :right ? "(" : "["
+  r_str = hist.closed == :right ? "]" : ")"
+  counts.each_with_index do |n, i|
+    val1 = Utils.float_round_log10(edge[i], bin_width)
+    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
+    a1 = val1.to_s.split('.', 2).map(&:length)
+    a2 = val2.to_s.split('.', 2).map(&:length)
+    labels[i] = "\e[90m#{l_str}\e[0m" +
+                (" " * (pad_left - a1[0])) +
+                val1.to_s +
+                (" " * (pad_right - a1[1])) +
+                "\e[90m, \e[0m" +
+                (" " * (pad_left - a2[0])) +
+                val2.to_s +
+                (" " * (pad_right - a2[1])) +
+                "\e[90m#{r_str}\e[0m"
+  end
+  xscale = kw.delete(:xscale)
+  xlabel = kw.delete(:xlabel) ||
+           ValueTransformer.transform_name(xscale, "Frequency")
+  barplot(labels, counts,
+          symbol: symbol,
+          xscale: xscale,
+          xlabel: xlabel,
+          **kw)
+end
+
+
+ +
+

+ + .lineplot(*args, canvas: :braille, color: :auto, name: "", **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/lineplot.rb', line 7
+
+module_function def lineplot(*args,
+                             canvas: :braille,
+                             color: :auto,
+                             name: "",
+                             **kw)
+  case args.length
+  when 1
+    # y only
+    y = Array(args[0])
+    x = Array(1 .. y.length)
+  when 2
+    # x and y
+    x = Array(args[0])
+    y = Array(args[1])
+  else
+    raise ArgumentError, "wrong number of arguments"
+  end
+
+  case x[0]
+  when Time, Date
+    if x[0].is_a? Time
+      d = x.map(&:to_f)
+    else
+      origin = Date.new(1, 1, 1)
+      d = x.map {|xi| xi - origin }
+    end
+    plot = lineplot(d, y, canvas: canvas, color: color, name: name, **kw)
+    xmin, xmax = x.minmax
+    plot.annotate!(:bl, xmin.to_s, color: :light_black)
+    plot.annotate!(:br, xmax.to_s, color: :light_black)
+    plot
+  else
+    plot = Lineplot.new(x, y, canvas, **kw)
+    lineplot!(plot, x, y, color: color, name: name)
+  end
+end
+
+
+ +
+

+ + .lineplot!(plot, *args, color: :auto, name: "") ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/lineplot.rb', line 44
+
+module_function def lineplot!(plot,
+                              *args,
+                              color: :auto,
+                              name: "")
+  case args.length
+  when 1
+    # y only
+    y = Array(args[0])
+    x = Array(1 .. y.length)
+  when 2
+    # x and y
+    x = Array(args[0])
+    y = Array(args[1])
+
+    if x.length == 1 && y.length == 1
+      # intercept and slope
+      intercept = x[0]
+      slope = y[0]
+      xmin = plot.origin_x
+      xmax = plot.origin_x + plot.plot_width
+      ymin = plot.origin_y
+      ymax = plot.origin_y + plot.plot_height
+      x = [xmin, xmax]
+      y = [intercept + xmin*slope, intercept + xmax*slope]
+    end
+  else
+    raise ArgumentError, "wrong number of arguments"
+  end
+
+  case x[0]
+  when Time, Date
+    if x[0].is_a? Time
+      d = x.map(&:to_f)
+    else
+      origin = Date.new(1, 1, 1)
+      d = x.map {|xi| xi - origin }
+    end
+    lineplot!(plot, d, y, color: color, name: name)
+  else
+    color = color == :auto ? plot.next_color : color
+    plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
+    plot.lines!(x, y, color)
+  end
+  plot
+end
+
+
+ +
+

+ + .scatterplot(*args, canvas: :braille, color: :auto, name: "", **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
+
# File 'src/lib/unicode_plot/scatterplot.rb', line 5
+
+module_function def scatterplot(*args,
+                                canvas: :braille,
+                                color: :auto,
+                                name: "",
+                                **kw)
+  case args.length
+  when 1
+    # y only
+    y = Array(args[0])
+    x = Array(1 .. y.length)
+  when 2
+    # x and y
+    x = Array(args[0])
+    y = Array(args[1])
+  else
+    raise ArgumentError, "worng number of arguments"
+  end
+
+  plot = Scatterplot.new(x, y, canvas, **kw)
+  scatterplot!(plot, x, y, color: color, name: name)
+end
+
+
+ +
+

+ + .scatterplot!(plot, *args, color: :auto, name: "") ⇒ Object + + + + + +

+ + + + +
+
+
+
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+
+
# File 'src/lib/unicode_plot/scatterplot.rb', line 27
+
+module_function def scatterplot!(plot,
+                                 *args,
+                                 color: :auto,
+                                 name: "")
+  case args.length
+  when 1
+    # y only
+    y = Array(args[0])
+    x = Array(1 .. y.length)
+  when 2
+    # x and y
+    x = Array(args[0])
+    y = Array(args[1])
+  else
+    raise ArgumentError, "worng number of arguments"
+  end
+
+  color = color == :auto ? plot.next_color : color
+  plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
+  plot.points!(x, y, color)
+  plot
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/AsciiCanvas.html b/0.0.4/UnicodePlot/AsciiCanvas.html new file mode 100644 index 0000000..9016bd9 --- /dev/null +++ b/0.0.4/UnicodePlot/AsciiCanvas.html @@ -0,0 +1,482 @@ + + + + + + + Class: UnicodePlot::AsciiCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::AsciiCanvas + + + +

+
+ +
+
Inherits:
+
+ LookupCanvas + + + show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/ascii_canvas.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
ASCII_SIGNS = + +
+
[
+  [ 0b100_000_000, 0b000_100_000, 0b000_000_100 ].freeze,
+  [ 0b010_000_000, 0b000_010_000, 0b000_000_010 ].freeze,
+  [ 0b001_000_000, 0b000_001_000, 0b000_000_001 ].freeze
+].freeze
+ +
ASCII_LOOKUP = + +
+
{
+  0b101_000_000 => '"',
+  0b111_111_111 => '@',
+ #0b011_110_011 => '$',
+  0b010_000_000 => '\'',
+  0b010_100_010 => '(',
+  0b010_001_010 => ')',
+  0b000_010_000 => '*',
+  0b010_111_010 => '+',
+  0b000_010_010 => ',',
+  0b000_100_100 => ',',
+  0b000_001_001 => ',',
+  0b000_111_000 => '-',
+  0b000_000_010 => '.',
+  0b000_000_100 => '.',
+  0b000_000_001 => '.',
+  0b001_010_100 => '/',
+  0b010_100_000 => '/',
+  0b001_010_110 => '/',
+  0b011_010_010 => '/',
+  0b001_010_010 => '/',
+  0b110_010_111 => '1',
+ #0b111_010_100 => '7',
+  0b010_000_010 => ':',
+  0b111_000_111 => '=',
+ #0b010_111_101 => 'A',
+ #0b011_100_011 => 'C',
+ #0b110_101_110 => 'D',
+ #0b111_110_100 => 'F',
+ #0b011_101_011 => 'G',
+ #0b101_111_101 => 'H',
+  0b111_010_111 => 'I',
+ #0b011_001_111 => 'J',
+ #0b101_110_101 => 'K',
+  0b100_100_111 => 'L',
+ #0b111_111_101 => 'M',
+ #0b101_101_101 => 'N',
+ #0b111_101_111 => 'O',
+ #0b111_111_100 => 'P',
+  0b111_010_010 => 'T',
+ #0b101_101_111 => 'U',
+  0b101_101_010 => 'V',
+ #0b101_111_111 => 'W',
+  0b101_010_101 => 'X',
+  0b101_010_010 => 'Y',
+  0b110_100_110 => '[',
+  0b010_001_000 => '\\',
+  0b100_010_001 => '\\',
+  0b110_010_010 => '\\',
+  0b100_010_011 => '\\',
+  0b100_010_010 => '\\',
+  0b011_001_011 => ']',
+  0b010_101_000 => '^',
+  0b000_000_111 => '_',
+  0b100_000_000 => '`',
+ #0b000_111_111 => 'a',
+ #0b100_111_111 => 'b',
+ #0b001_111_111 => 'd',
+ #0b001_111_010 => 'f',
+ #0b100_111_101 => 'h',
+ #0b100_101_101 => 'k',
+  0b110_010_011 => 'l',
+ #0b000_111_101 => 'n',
+  0b000_111_100 => 'r',
+ #0b000_101_111 => 'u',
+  0b000_101_010 => 'v',
+  0b011_110_011 => '{',
+  0b010_010_010 => '|',
+  0b100_100_100 => '|',
+  0b001_001_001 => '|',
+  0b110_011_110 => '}',
+}.freeze
+ +
ASCII_DECODE = + +
+
[' ']
+ +
PIXEL_PER_CHAR = + +
+
3
+ +
+ + + + + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Canvas

+

#height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from LookupCanvas

+

#pixel!, #print_row

+ + + + + + + + + +

Methods inherited from Canvas

+

#char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

+ + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, **kw) ⇒ AsciiCanvas + + + + + +

+
+

Returns a new instance of AsciiCanvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+106
+107
+108
+109
+110
+
+
# File 'src/lib/unicode_plot/ascii_canvas.rb', line 106
+
+def initialize(width, height, **kw)
+  super(width, height,
+        PIXEL_PER_CHAR, PIXEL_PER_CHAR,
+        **kw)
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #lookup_decode(code) ⇒ Object + + + + + +

+ + + + +
+
+
+
+116
+117
+118
+
+
# File 'src/lib/unicode_plot/ascii_canvas.rb', line 116
+
+def lookup_decode(code)
+  ASCII_DECODE[code]
+end
+
+
+ +
+

+ + #lookup_encode(x, y) ⇒ Object + + + + + +

+ + + + +
+
+
+
+112
+113
+114
+
+
# File 'src/lib/unicode_plot/ascii_canvas.rb', line 112
+
+def lookup_encode(x, y)
+  ASCII_SIGNS[x][y]
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Barplot.html b/0.0.4/UnicodePlot/Barplot.html new file mode 100644 index 0000000..0d2e7ad --- /dev/null +++ b/0.0.4/UnicodePlot/Barplot.html @@ -0,0 +1,780 @@ + + + + + + + Class: UnicodePlot::Barplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Barplot + + + +

+
+ +
+
Inherits:
+
+ Plot + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + +
+
Includes:
+
ValueTransformer
+
+ + + + + + +
+
Defined in:
+
src/lib/unicode_plot/barplot.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
MIN_WIDTH = + +
+
10
+ +
DEFAULT_COLOR = + +
+
:green
+ +
DEFAULT_SYMBOL = + +
+
""
+ +
+ + + + + + +

Constants included + from ValueTransformer

+

ValueTransformer::PREDEFINED_TRANSFORM_FUNCTIONS

+ + + +

Constants inherited + from Plot

+

Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

+ + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + +

Instance Attribute Summary collapse

+
    + +
  • + + + #max_freq ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute max_freq.

    +
    + +
  • + + +
  • + + + #max_len ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute max_len.

    +
    + +
  • + + +
  • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute width.

    +
    + +
  • + + +
+ + + + + +

Attributes inherited from Plot

+

#border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods included from ValueTransformer

+

transform_name, #transform_values

+ + + + + + + + + +

Methods inherited from Plot

+

#annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(bars, width, color, symbol, transform, **kw) ⇒ Barplot + + + + + +

+
+

Returns a new instance of Barplot.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 9
+
+def initialize(bars, width, color, symbol, transform, **kw)
+  if symbol.length > 1
+    raise ArgumentError, "symbol must be a single character"
+  end
+  @bars = bars
+  @symbol = symbol
+  @max_freq, i = find_max(transform_values(transform, bars))
+  @max_len = bars[i].to_s.length
+  @width = [width, max_len + 7, MIN_WIDTH].max
+  @color = color
+  @symbol = symbol
+  @transform = transform
+  super(**kw)
+end
+
+
+ +
+ +
+

Instance Attribute Details

+ + + +
+

+ + #max_freqObject (readonly) + + + + + +

+
+

Returns the value of attribute max_freq.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+24
+25
+26
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 24
+
+def max_freq
+  @max_freq
+end
+
+
+ + + +
+

+ + #max_lenObject (readonly) + + + + + +

+
+

Returns the value of attribute max_len.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+25
+26
+27
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 25
+
+def max_len
+  @max_len
+end
+
+
+ + + +
+

+ + #widthObject (readonly) + + + + + +

+
+

Returns the value of attribute width.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+26
+27
+28
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 26
+
+def width
+  @width
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #add_row!(bars) ⇒ Object + + + + + +

+ + + + +
+
+
+
+36
+37
+38
+39
+40
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 36
+
+def add_row!(bars)
+  @bars.concat(bars)
+  @max_freq, i = find_max(transform_values(@transform, bars))
+  @max_len = @bars[i].to_s.length
+end
+
+
+ +
+

+ + #n_columnsObject + + + + + +

+ + + + +
+
+
+
+32
+33
+34
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 32
+
+def n_columns
+  @width
+end
+
+
+ +
+

+ + #n_rowsObject + + + + + +

+ + + + +
+
+
+
+28
+29
+30
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 28
+
+def n_rows
+  @bars.length
+end
+
+
+ +
+ + + + + +
+
+
+
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+
+
# File 'src/lib/unicode_plot/barplot.rb', line 42
+
+def print_row(out, row_index)
+  check_row_index(row_index)
+  bar = @bars[row_index]
+  max_bar_width = [width - 2 - max_len, 1].max
+  val = transform_values(@transform, bar)
+  bar_len = max_freq > 0 ?
+    ([val, 0].max.fdiv(max_freq) * max_bar_width).round :
+    0
+  bar_str = max_freq > 0 ? @symbol * bar_len : ""
+  bar_lbl = bar.to_s
+  print_styled(out, bar_str, color: @color)
+  print_styled(out, " ", bar_lbl, color: :normal)
+  pan_len = [max_bar_width + 1 + max_len - bar_len - bar_lbl.length, 0].max
+  pad = " " * pan_len.round
+  out.print(pad)
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/BorderMaps.html b/0.0.4/UnicodePlot/BorderMaps.html new file mode 100644 index 0000000..2d53939 --- /dev/null +++ b/0.0.4/UnicodePlot/BorderMaps.html @@ -0,0 +1,158 @@ + + + + + + + Module: UnicodePlot::BorderMaps + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::BorderMaps + + + +

+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/renderer.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
BORDER_SOLID = + +
+
{
+  tl: "",
+  tr: "",
+  bl: "",
+  br: "",
+  t:  "",
+  l:  "",
+  b:  "",
+  r:  ""
+}.freeze
+ +
BORDER_CORNERS = + +
+
{
+  tl: "",
+  tr: "",
+  bl: "",
+  br: "",
+  t:  " ",
+  l:  " ",
+  b:  " ",
+  r:  " ",
+}.freeze
+ +
BORDER_BARPLOT = + +
+
{
+  tl: "",
+  tr: "",
+  bl: "",
+  br: "",
+  t:  " ",
+  l:  "",
+  b:  " ",
+  r:  " ",
+}.freeze
+ +
+ + + + + + + + + + +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/BorderPrinter.html b/0.0.4/UnicodePlot/BorderPrinter.html new file mode 100644 index 0000000..c46d6ed --- /dev/null +++ b/0.0.4/UnicodePlot/BorderPrinter.html @@ -0,0 +1,263 @@ + + + + + + + Module: UnicodePlot::BorderPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::BorderPrinter + + + +

+
+ + + + + + +
+
Includes:
+
StyledPrinter
+
+ + + + +
+
Included in:
+
Canvas, Renderer
+
+ + + +
+
Defined in:
+
src/lib/unicode_plot/renderer.rb
+
+ +
+ + + + +

Constant Summary

+ +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+ + +
+

Instance Method Details

+ + +
+ + + + + +
+
+
+
+52
+53
+54
+55
+56
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 52
+
+def print_border_bottom(out, padding, length, border=:solid, color: :light_black)
+  return if border == :none
+  b = BORDER_MAP[border]
+  print_styled(out, padding, b[:bl], b[:b] * length, b[:br], color: color)
+end
+
+
+ +
+ + + + + +
+
+
+
+46
+47
+48
+49
+50
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 46
+
+def print_border_top(out, padding, length, border=:solid, color: :light_black)
+  return if border == :none
+  b = BORDER_MAP[border]
+  print_styled(out, padding, b[:tl], b[:t] * length, b[:tr], color: color)
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Boxplot.html b/0.0.4/UnicodePlot/Boxplot.html new file mode 100644 index 0000000..2b850da --- /dev/null +++ b/0.0.4/UnicodePlot/Boxplot.html @@ -0,0 +1,786 @@ + + + + + + + Class: UnicodePlot::Boxplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Boxplot + + + +

+
+ +
+
Inherits:
+
+ Plot + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/boxplot.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
MIN_WIDTH = + +
+
10
+ +
DEFAULT_COLOR = + +
+
:green
+ +
+ + + + + + +

Constants inherited + from Plot

+

Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

+ + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + +

Instance Attribute Summary collapse

+
    + +
  • + + + #max_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute max_x.

    +
    + +
  • + + +
  • + + + #min_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute min_x.

    +
    + +
  • + + +
+ + + + + +

Attributes inherited from Plot

+

#border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from Plot

+

#annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(data, width, color, min_x, max_x, **kw) ⇒ Boxplot + + + + + +

+
+

Returns a new instance of Boxplot.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 8
+
+def initialize(data, width, color, min_x, max_x, **kw)
+  if min_x == max_x
+    min_x -= 1
+    max_x += 1
+  end
+  width = [width, MIN_WIDTH].max
+  @data = [data.percentile([0, 25, 50, 75, 100])]
+  @color = color
+  @width = [width, MIN_WIDTH].max
+  @min_x = min_x
+  @max_x = max_x
+  super(**kw)
+end
+
+
+ +
+ +
+

Instance Attribute Details

+ + + +
+

+ + #max_xObject (readonly) + + + + + +

+
+

Returns the value of attribute max_x.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+23
+24
+25
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 23
+
+def max_x
+  @max_x
+end
+
+
+ + + +
+

+ + #min_xObject (readonly) + + + + + +

+
+

Returns the value of attribute min_x.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+22
+23
+24
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 22
+
+def min_x
+  @min_x
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #add_series!(data) ⇒ Object + + + + + +

+ + + + +
+
+
+
+37
+38
+39
+40
+41
+42
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 37
+
+def add_series!(data)
+  mi, ma = data.minmax
+  @data << data.percentile([0, 25, 50, 75, 100])
+  @min_x = [mi, @min_x].min
+  @max_x = [ma, @max_x].max
+end
+
+
+ +
+

+ + #n_columnsObject + + + + + +

+ + + + +
+
+
+
+33
+34
+35
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 33
+
+def n_columns
+  @width
+end
+
+
+ +
+

+ + #n_dataObject + + + + + +

+ + + + +
+
+
+
+25
+26
+27
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 25
+
+def n_data
+  @data.length
+end
+
+
+ +
+

+ + #n_rowsObject + + + + + +

+ + + + +
+
+
+
+29
+30
+31
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 29
+
+def n_rows
+  3 * @data.length
+end
+
+
+ +
+ + + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/boxplot.rb', line 44
+
+def print_row(out, row_index)
+  check_row_index(row_index)
+  series = @data[(row_index / 3.0).to_i]
+
+  series_row = row_index % 3
+
+  min_char       = ['', '' , ''][series_row]
+  line_char      = [' ', '' , ' '][series_row]
+  left_box_char  = ['', '' , ''][series_row]
+  line_box_char  = ['', ' ' , ''][series_row]
+  median_char    = ['', '' , ''][series_row]
+  right_box_char = ['', '' , ''][series_row]
+  max_char       = ['', '' , ''][series_row]
+
+  line = (0 ... @width).map { ' ' }
+
+  # Draw shapes first - this is most important,
+  # so they'll always be drawn even if there's not enough space
+
+  transformed = transform(series)
+  line[transformed[0] - 1] = min_char
+  line[transformed[1] - 1] = left_box_char
+  line[transformed[2] - 1] = median_char
+  line[transformed[3] - 1] = right_box_char
+  line[transformed[4] - 1] = max_char
+
+  (transformed[0] ... (transformed[1] - 1)).each do |i|
+    line[i] = line_char
+  end
+  (transformed[1] ... (transformed[2] - 1)).each do |i|
+    line[i] = line_box_char
+  end
+  (transformed[2] ... (transformed[3] - 1)).each do |i|
+    line[i] = line_box_char
+  end
+  (transformed[3] ... (transformed[4] - 1)).each do |i|
+    line[i] = line_char
+  end
+
+  print_styled(out, line.join(''), color: @color)
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/BrailleCanvas.html b/0.0.4/UnicodePlot/BrailleCanvas.html new file mode 100644 index 0000000..91d2316 --- /dev/null +++ b/0.0.4/UnicodePlot/BrailleCanvas.html @@ -0,0 +1,460 @@ + + + + + + + Class: UnicodePlot::BrailleCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::BrailleCanvas + + + +

+
+ +
+
Inherits:
+
+ Canvas + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/braille_canvas.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
X_PIXEL_PER_CHAR = + +
+
2
+ +
Y_PIXEL_PER_CHAR = + +
+
4
+ +
BRAILLE_SIGNS = + +
+
[
+  [
+    0x2801,
+    0x2802,
+    0x2804,
+    0x2840,
+  ].freeze,
+  [
+    0x2808,
+    0x2810,
+    0x2820,
+    0x2880
+  ].freeze
+].freeze
+ +
+ + + + + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Canvas

+

#height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from Canvas

+

#char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

+ + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, **kw) ⇒ BrailleCanvas + + + + + +

+
+

Returns a new instance of BrailleCanvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+21
+22
+23
+24
+25
+26
+27
+28
+29
+
+
# File 'src/lib/unicode_plot/braille_canvas.rb', line 21
+
+def initialize(width, height, **kw)
+  super(width, height,
+        width * X_PIXEL_PER_CHAR,
+        height * Y_PIXEL_PER_CHAR,
+        "\u{2800}",
+        x_pixel_per_char: X_PIXEL_PER_CHAR,
+        y_pixel_per_char: Y_PIXEL_PER_CHAR,
+        **kw)
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+
+
# File 'src/lib/unicode_plot/braille_canvas.rb', line 31
+
+def pixel!(pixel_x, pixel_y, color)
+  unless 0 <= pixel_x && pixel_x <= pixel_width &&
+         0 <= pixel_y && pixel_y <= pixel_height
+    return color
+  end
+  pixel_x -= 1 unless pixel_x < pixel_width
+  pixel_y -= 1 unless pixel_y < pixel_height
+  tx = pixel_x.fdiv(pixel_width) * width
+  char_x = tx.floor + 1
+  char_x_off = pixel_x % X_PIXEL_PER_CHAR + 1
+  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
+
+  char_y = (pixel_y.fdiv(pixel_height) * height).floor + 1
+  char_y_off = pixel_y % Y_PIXEL_PER_CHAR + 1
+
+  index = index_at(char_x - 1, char_y - 1)
+  if index
+    @grid[index] = (@grid[index].ord | BRAILLE_SIGNS[char_x_off - 1][char_y_off - 1]).chr(Encoding::UTF_8)
+    @colors[index] |= COLOR_ENCODE[color]
+  end
+  color
+end
+
+
+ +
+ + + + + +
+
+
+
+54
+55
+56
+57
+58
+59
+60
+61
+62
+
+
# File 'src/lib/unicode_plot/braille_canvas.rb', line 54
+
+def print_row(out, row_index)
+  unless 0 <= row_index && row_index < height
+    raise ArgumentError, "row_index out of bounds"
+  end
+  y = row_index
+  (0 ... width).each do |x|
+    print_color(out, color_at(x, y), char_at(x, y))
+  end
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Canvas.html b/0.0.4/UnicodePlot/Canvas.html new file mode 100644 index 0000000..12e13f3 --- /dev/null +++ b/0.0.4/UnicodePlot/Canvas.html @@ -0,0 +1,1715 @@ + + + + + + + Class: UnicodePlot::Canvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Canvas + + + +

+
+ +
+
Inherits:
+
+ Object + +
    +
  • Object
  • + + + +
+ show all + +
+
+ + + + + + +
+
Includes:
+
BorderPrinter
+
+ + + + + + +
+
Defined in:
+
src/lib/unicode_plot/canvas.rb
+
+ +
+ +
+

Direct Known Subclasses

+

BrailleCanvas, DensityCanvas, LookupCanvas

+
+ + + +

Constant Summary

+ +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + +

Instance Attribute Summary collapse

+
    + +
  • + + + #height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute height.

    +
    + +
  • + + +
  • + + + #origin_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute origin_x.

    +
    + +
  • + + +
  • + + + #origin_y ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute origin_y.

    +
    + +
  • + + +
  • + + + #pixel_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute pixel_height.

    +
    + +
  • + + +
  • + + + #pixel_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute pixel_width.

    +
    + +
  • + + +
  • + + + #plot_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute plot_height.

    +
    + +
  • + + +
  • + + + #plot_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute plot_width.

    +
    + +
  • + + +
  • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute width.

    +
    + +
  • + + +
  • + + + #x_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute x_pixel_per_char.

    +
    + +
  • + + +
  • + + + #y_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute y_pixel_per_char.

    +
    + +
  • + + +
+ + + + + +

+ Class Method Summary + collapse +

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, pixel_width, pixel_height, fill_char, origin_x: 0, origin_y: 0, plot_width: 1, plot_height: 1, x_pixel_per_char: 1, y_pixel_per_char: 1) ⇒ Canvas + + + + + +

+
+

Returns a new instance of Canvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 20
+
+def initialize(width, height, pixel_width, pixel_height, fill_char,
+               origin_x: 0,
+               origin_y: 0,
+               plot_width: 1,
+               plot_height: 1,
+               x_pixel_per_char: 1,
+               y_pixel_per_char: 1)
+  @width = width
+  @height = height
+  @pixel_width = check_positive(pixel_width, :pixel_width)
+  @pixel_height = check_positive(pixel_height, :pixel_height)
+  @origin_x = origin_x
+  @origin_y = origin_y
+  @plot_width = plot_width
+  @plot_height = plot_height
+  @x_pixel_per_char = x_pixel_per_char
+  @y_pixel_per_char = y_pixel_per_char
+  @grid = Array.new(@width * @height, fill_char)
+  @colors = Array.new(@width * @height, COLOR_ENCODE[:normal])
+end
+
+
+ +
+ +
+

Instance Attribute Details

+ + + +
+

+ + #heightObject (readonly) + + + + + +

+
+

Returns the value of attribute height.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+42
+43
+44
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 42
+
+def height
+  @height
+end
+
+
+ + + +
+

+ + #origin_xObject (readonly) + + + + + +

+
+

Returns the value of attribute origin_x.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+45
+46
+47
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 45
+
+def origin_x
+  @origin_x
+end
+
+
+ + + +
+

+ + #origin_yObject (readonly) + + + + + +

+
+

Returns the value of attribute origin_y.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+46
+47
+48
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 46
+
+def origin_y
+  @origin_y
+end
+
+
+ + + +
+

+ + #pixel_heightObject (readonly) + + + + + +

+
+

Returns the value of attribute pixel_height.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+44
+45
+46
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 44
+
+def pixel_height
+  @pixel_height
+end
+
+
+ + + +
+

+ + #pixel_widthObject (readonly) + + + + + +

+
+

Returns the value of attribute pixel_width.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+43
+44
+45
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 43
+
+def pixel_width
+  @pixel_width
+end
+
+
+ + + +
+

+ + #plot_heightObject (readonly) + + + + + +

+
+

Returns the value of attribute plot_height.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+48
+49
+50
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 48
+
+def plot_height
+  @plot_height
+end
+
+
+ + + +
+

+ + #plot_widthObject (readonly) + + + + + +

+
+

Returns the value of attribute plot_width.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+47
+48
+49
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 47
+
+def plot_width
+  @plot_width
+end
+
+
+ + + +
+

+ + #widthObject (readonly) + + + + + +

+
+

Returns the value of attribute width.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+41
+42
+43
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 41
+
+def width
+  @width
+end
+
+
+ + + +
+

+ + #x_pixel_per_charObject (readonly) + + + + + +

+
+

Returns the value of attribute x_pixel_per_char.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+49
+50
+51
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 49
+
+def x_pixel_per_char
+  @x_pixel_per_char
+end
+
+
+ + + +
+

+ + #y_pixel_per_charObject (readonly) + + + + + +

+
+

Returns the value of attribute y_pixel_per_char.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+50
+51
+52
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 50
+
+def y_pixel_per_char
+  @y_pixel_per_char
+end
+
+
+ +
+ + +
+

Class Method Details

+ + +
+

+ + .create(canvas_type, width, height, **kw) ⇒ Object + + + + + +

+ + + + +
+
+
+
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 5
+
+def self.create(canvas_type, width, height, **kw)
+  case canvas_type
+  when :ascii
+    AsciiCanvas.new(width, height, **kw)
+  when :braille
+    BrailleCanvas.new(width, height, **kw)
+  when :density
+    DensityCanvas.new(width, height, **kw)
+  when :dot
+    DotCanvas.new(width, height, **kw)
+  else
+    raise ArgumentError, "unknown canvas type: #{canvas_type}"
+  end
+end
+
+
+ +
+ +
+

Instance Method Details

+ + +
+

+ + #char_at(x, y) ⇒ Object + + + + + +

+ + + + +
+
+
+
+74
+75
+76
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 74
+
+def char_at(x, y)
+  @grid[index_at(x, y)]
+end
+
+
+ +
+

+ + #color_at(x, y) ⇒ Object + + + + + +

+ + + + +
+
+
+
+78
+79
+80
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 78
+
+def color_at(x, y)
+  @colors[index_at(x, y)]
+end
+
+
+ +
+

+ + #index_at(x, y) ⇒ Object + + + + + +

+ + + + +
+
+
+
+82
+83
+84
+85
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 82
+
+def index_at(x, y)
+  return nil unless 0 <= x && x < width && 0 <= y && y < height
+  y * width + x
+end
+
+
+ +
+

+ + #line!(x1, y1, x2, y2, color) ⇒ Object + + + + + +

+
+

digital differential analyzer algorithm

+ + +
+
+
+ + +
+ + + + +
+
+
+
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 115
+
+def line!(x1, y1, x2, y2, color)
+  if (x1 < origin_x && x2 < origin_x) ||
+      (x1 > origin_x + plot_width && x2 > origin_x + plot_width)
+    return color
+  end
+  if (y1 < origin_y && y2 < origin_y) ||
+      (y1 > origin_y + plot_height && y2 > origin_y + plot_height)
+    return color
+  end
+
+  toff = x1 - origin_x
+  px1 = toff.fdiv(plot_width) * pixel_width
+  toff = x2 - origin_x
+  px2 = toff.fdiv(plot_width) * pixel_width
+
+  toff = y1 - origin_y
+  py1 = pixel_height - toff.fdiv(plot_height) * pixel_height
+  toff = y2 - origin_y
+  py2 = pixel_height - toff.fdiv(plot_height) * pixel_height
+
+  dx = px2 - px1
+  dy = py2 - py1
+  nsteps = dx.abs > dy.abs ? dx.abs : dy.abs
+  inc_x = dx.fdiv(nsteps)
+  inc_y = dy.fdiv(nsteps)
+
+  cur_x = px1
+  cur_y = py1
+  pixel!(cur_x.floor, cur_y.floor, color)
+  1.upto(nsteps) do |i|
+    cur_x += inc_x
+    cur_y += inc_y
+    pixel!(cur_x.floor, cur_y.floor, color)
+  end
+  color
+end
+
+
+ +
+

+ + #lines!(x, y, color = :normal) ⇒ Object + + + + + +

+ + + + +
+
+
+
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 152
+
+def lines!(x, y, color = :normal)
+  if x.length != y.length
+    raise ArgumentError, "x and y must be the same length"
+  end
+  unless x.length > 0
+    raise ArgumentError, "x and y must not be empty"
+  end
+  (0 ... (x.length - 1)).each do |i|
+    line!(x[i], y[i], x[i+1], y[i+1], color)
+  end
+end
+
+
+ +
+

+ + #point!(x, y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 87
+
+def point!(x, y, color)
+  unless origin_x <= x && x <= origin_x + plot_width &&
+         origin_y <= y && y <= origin_y + plot_height
+    return color
+  end
+
+  plot_offset_x = x - origin_x
+  pixel_x = plot_offset_x.fdiv(plot_width) * pixel_width
+
+  plot_offset_y = y - origin_y
+  pixel_y = pixel_height - plot_offset_y.fdiv(plot_height) * pixel_height
+
+  pixel!(pixel_x.floor, pixel_y.floor, color)
+end
+
+
+ +
+

+ + #points!(x, y, color = :normal) ⇒ Object + + + + + +

+ + + + +
+
+
+
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 102
+
+def points!(x, y, color = :normal)
+  if x.length != y.length
+    raise ArgumentError, "x and y must be the same length"
+  end
+  unless x.length > 0
+    raise ArgumentError, "x and y must not be empty"
+  end
+  (0 ... x.length).each do |i|
+    point!(x[i], y[i], color)
+  end
+end
+
+
+ +
+ + + + + +
+
+
+
+67
+68
+69
+70
+71
+72
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 67
+
+def print(out)
+  (0 ... height).each do |row_index|
+    print_row(out, row_index)
+    out.puts if row_index < height - 1
+  end
+end
+
+
+ +
+

+ + #show(out) ⇒ Object + + + + + +

+ + + + +
+
+
+
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+
+
# File 'src/lib/unicode_plot/canvas.rb', line 52
+
+def show(out)
+  b = BorderMaps::BORDER_SOLID
+  border_length = width
+
+  print_border_top(out, "", border_length, :solid, color: :light_black)
+  out.puts
+  (0 ... height).each do |row_index|
+    print_styled(out, b[:l], color: :light_black)
+    print_row(out, row_index)
+    print_styled(out, b[:r], color: :light_black)
+    out.puts
+  end
+  print_border_bottom(out, "", border_length, :solid, color: :light_black)
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/DensityCanvas.html b/0.0.4/UnicodePlot/DensityCanvas.html new file mode 100644 index 0000000..5b9bcc9 --- /dev/null +++ b/0.0.4/UnicodePlot/DensityCanvas.html @@ -0,0 +1,461 @@ + + + + + + + Class: UnicodePlot::DensityCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::DensityCanvas + + + +

+
+ +
+
Inherits:
+
+ Canvas + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/density_canvas.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
DENSITY_SIGNS = + +
+
[" ", "", "", "", ""].freeze
+ +
MIN_WIDTH = + +
+
5
+ +
MIN_HEIGHT = + +
+
5
+ +
X_PIXEL_PER_CHAR = + +
+
1
+ +
Y_PIXEL_PER_CHAR = + +
+
2
+ +
+ + + + + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Canvas

+

#height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from Canvas

+

#char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

+ + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, **kw) ⇒ DensityCanvas + + + + + +

+
+

Returns a new instance of DensityCanvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+
+
# File 'src/lib/unicode_plot/density_canvas.rb', line 11
+
+def initialize(width, height, **kw)
+  width = [width, MIN_WIDTH].max
+  height = [height, MIN_HEIGHT].max
+  @max_density = 1
+  super(width, height,
+        width * X_PIXEL_PER_CHAR,
+        height * Y_PIXEL_PER_CHAR,
+        0,
+        x_pixel_per_char: X_PIXEL_PER_CHAR,
+        y_pixel_per_char: Y_PIXEL_PER_CHAR,
+        **kw)
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+
+
# File 'src/lib/unicode_plot/density_canvas.rb', line 24
+
+def pixel!(pixel_x, pixel_y, color)
+  unless 0 <= pixel_x && pixel_x <= pixel_width &&
+         0 <= pixel_y && pixel_y <= pixel_height
+    return color
+  end
+
+  pixel_x -= 1 unless pixel_x < pixel_width
+  pixel_y -= 1 unless pixel_y < pixel_height
+
+  char_x = (pixel_x.fdiv(pixel_width) * width).floor
+  char_y = (pixel_y.fdiv(pixel_height) * height).floor
+
+  index = index_at(char_x, char_y)
+  @grid[index] += 1
+  @max_density = [@max_density, @grid[index]].max
+  @colors[index] |= COLOR_ENCODE[color]
+  color
+end
+
+
+ +
+ + + + + +
+
+
+
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+
+
# File 'src/lib/unicode_plot/density_canvas.rb', line 43
+
+def print_row(out, row_index)
+  unless 0 <= row_index && row_index < height
+    raise ArgumentError, "row_index out of bounds"
+  end
+  y = row_index
+  den_sign_count = DENSITY_SIGNS.length
+  val_scale = (den_sign_count - 1).fdiv(@max_density)
+  (0 ... width).each do |x|
+    den_index = (char_at(x, y) * val_scale).round
+    print_color(out, color_at(x, y), DENSITY_SIGNS[den_index])
+  end
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/DotCanvas.html b/0.0.4/UnicodePlot/DotCanvas.html new file mode 100644 index 0000000..16fb28d --- /dev/null +++ b/0.0.4/UnicodePlot/DotCanvas.html @@ -0,0 +1,417 @@ + + + + + + + Class: UnicodePlot::DotCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::DotCanvas + + + +

+
+ +
+
Inherits:
+
+ LookupCanvas + + + show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/dot_canvas.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
DOT_SIGNS = + +
+
[
+  [
+    0b10,
+    0b01
+  ].freeze
+].freeze
+ +
DOT_DECODE = + +
+
[
+  -' ', # 0b00
+  -'.', # 0b01
+  -"'", # 0b10
+  -':', # 0b11
+].freeze
+ +
X_PIXEL_PER_CHAR = + +
+
1
+ +
Y_PIXEL_PER_CHAR = + +
+
2
+ +
+ + + + + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Canvas

+

#height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from LookupCanvas

+

#pixel!, #print_row

+ + + + + + + + + +

Methods inherited from Canvas

+

#char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

+ + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, **kw) ⇒ DotCanvas + + + + + +

+
+

Returns a new instance of DotCanvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+20
+21
+22
+23
+24
+
+
# File 'src/lib/unicode_plot/dot_canvas.rb', line 20
+
+def initialize(width, height, **kw)
+  super(width, height,
+        X_PIXEL_PER_CHAR, Y_PIXEL_PER_CHAR,
+        **kw)
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #lookup_decode(code) ⇒ Object + + + + + +

+ + + + +
+
+
+
+30
+31
+32
+
+
# File 'src/lib/unicode_plot/dot_canvas.rb', line 30
+
+def lookup_decode(code)
+  DOT_DECODE[code]
+end
+
+
+ +
+

+ + #lookup_encode(x, y) ⇒ Object + + + + + +

+ + + + +
+
+
+
+26
+27
+28
+
+
# File 'src/lib/unicode_plot/dot_canvas.rb', line 26
+
+def lookup_encode(x, y)
+  DOT_SIGNS[x][y]
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/GridPlot.html b/0.0.4/UnicodePlot/GridPlot.html new file mode 100644 index 0000000..07294ba --- /dev/null +++ b/0.0.4/UnicodePlot/GridPlot.html @@ -0,0 +1,861 @@ + + + + + + + Class: UnicodePlot::GridPlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::GridPlot + + + +

+
+ +
+
Inherits:
+
+ Plot + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/grid_plot.rb
+
+ +
+ +
+

Direct Known Subclasses

+

Lineplot, Scatterplot

+
+ + +

+ Constant Summary + collapse +

+ +
+ +
MIN_WIDTH = + +
+
5
+ +
MIN_HEIGHT = + +
+
2
+ +
DEFAULT_HEIGHT = + +
+
15
+ +
+ + + + + + +

Constants inherited + from Plot

+

Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

+ + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Plot

+

#border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from Plot

+

#annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(x, y, canvas, width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT, xlim: [0, 0], ylim: [0, 0], grid: true, **kw) ⇒ GridPlot + + + + + +

+
+

Returns a new instance of GridPlot.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 7
+
+def initialize(x, y, canvas,
+               width: DEFAULT_WIDTH,
+               height: DEFAULT_HEIGHT,
+               xlim: [0, 0], 
+               ylim: [0, 0],
+               grid: true,
+               **kw)
+  if x.length != y.length
+    raise ArgumentError, "x and y must be the same length"
+  end
+  unless x.length > 0
+    raise ArgumentError, "x and y must not be empty"
+  end
+  unless xlim.length == 2 && ylim.length == 2
+    raise ArgumentError, "xlim and ylim must be 2-length arrays"
+  end
+  width = [width, MIN_WIDTH].max
+  height = [height, MIN_HEIGHT].max
+  min_x, max_x = Utils.extend_limits(x, xlim)
+  min_y, max_y = Utils.extend_limits(y, ylim)
+  origin_x = min_x
+  origin_y = min_y
+  plot_width = max_x - origin_x
+  plot_height = max_y - origin_y
+  @canvas = Canvas.create(canvas, width, height,
+                          origin_x: origin_x,
+                          origin_y: origin_y,
+                          plot_width: plot_width,
+                          plot_height: plot_height)
+  super(**kw)
+
+  min_x_str = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
+  max_x_str = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
+  min_y_str = (Utils.roundable?(min_y) ? min_y.round : min_y).to_s
+  max_y_str = (Utils.roundable?(max_y) ? max_y.round : max_y).to_s
+
+  annotate_row!(:l, 0, max_y_str, color: :light_black)
+  annotate_row!(:l, height-1, min_y_str, color: :light_black)
+  annotate!(:bl, min_x_str, color: :light_black)
+  annotate!(:br, max_x_str, color: :light_black)
+
+  if grid
+    if min_y < 0 && 0 < max_y
+      step = plot_width.fdiv(width * @canvas.x_pixel_per_char - 1)
+      min_x.step(max_x, by: step) do |i|
+        @canvas.point!(i, 0, :normal)
+      end
+    end
+    if min_x < 0 && 0 < max_x
+      step = plot_height.fdiv(height * @canvas.y_pixel_per_char - 1)
+      min_y.step(max_y, by: step) do |i|
+        @canvas.point!(0, i, :normal)
+      end
+    end
+  end
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #lines!(x, y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+92
+93
+94
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 92
+
+def lines!(x, y, color)
+  @canvas.lines!(x, y, color)
+end
+
+
+ +
+

+ + #n_columnsObject + + + + + +

+ + + + +
+
+
+
+84
+85
+86
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 84
+
+def n_columns
+  @canvas.width
+end
+
+
+ +
+

+ + #n_rowsObject + + + + + +

+ + + + +
+
+
+
+80
+81
+82
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 80
+
+def n_rows
+  @canvas.height
+end
+
+
+ +
+

+ + #origin_xObject + + + + + +

+ + + + +
+
+
+
+64
+65
+66
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 64
+
+def origin_x
+  @canvas.origin_x
+end
+
+
+ +
+

+ + #origin_yObject + + + + + +

+ + + + +
+
+
+
+68
+69
+70
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 68
+
+def origin_y
+  @canvas.origin_y
+end
+
+
+ +
+

+ + #plot_heightObject + + + + + +

+ + + + +
+
+
+
+76
+77
+78
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 76
+
+def plot_height
+  @canvas.plot_height
+end
+
+
+ +
+

+ + #plot_widthObject + + + + + +

+ + + + +
+
+
+
+72
+73
+74
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 72
+
+def plot_width
+  @canvas.plot_width
+end
+
+
+ +
+

+ + #points!(x, y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+88
+89
+90
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 88
+
+def points!(x, y, color)
+  @canvas.points!(x, y, color)
+end
+
+
+ +
+ + + + + +
+
+
+
+96
+97
+98
+
+
# File 'src/lib/unicode_plot/grid_plot.rb', line 96
+
+def print_row(out, row_index)
+  @canvas.print_row(out, row_index)
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Lineplot.html b/0.0.4/UnicodePlot/Lineplot.html new file mode 100644 index 0000000..52a358e --- /dev/null +++ b/0.0.4/UnicodePlot/Lineplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Lineplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Lineplot + + + +

+
+ +
+
Inherits:
+
+ GridPlot + +
    +
  • Object
  • + + + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/lineplot.rb
+
+ +
+ + + + +

Constant Summary

+ +

Constants inherited + from GridPlot

+

GridPlot::DEFAULT_HEIGHT, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

+ + + +

Constants inherited + from Plot

+

Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

+ + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Plot

+

#border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

+ + + + + + + + + +

Method Summary

+ +

Methods inherited from GridPlot

+

#initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

+ + + + + + + + + +

Methods inherited from Plot

+

#annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +

This class inherits a constructor from UnicodePlot::GridPlot

+ +
+ + +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/LookupCanvas.html b/0.0.4/UnicodePlot/LookupCanvas.html new file mode 100644 index 0000000..a809fa9 --- /dev/null +++ b/0.0.4/UnicodePlot/LookupCanvas.html @@ -0,0 +1,425 @@ + + + + + + + Class: UnicodePlot::LookupCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::LookupCanvas + + + +

+
+ +
+
Inherits:
+
+ Canvas + +
    +
  • Object
  • + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/lookup_canvas.rb
+
+ +
+ +
+

Direct Known Subclasses

+

AsciiCanvas, DotCanvas

+
+ + + +

Constant Summary

+ +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Canvas

+

#height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods inherited from Canvas

+

#char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

+ + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char = 0, **kw) ⇒ LookupCanvas + + + + + +

+
+

Returns a new instance of LookupCanvas.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
+
# File 'src/lib/unicode_plot/lookup_canvas.rb', line 3
+
+def initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char=0, **kw)
+  super(width, height,
+        width * x_pixel_per_char,
+        height * y_pixel_per_char,
+        fill_char,
+        x_pixel_per_char: x_pixel_per_char,
+        y_pixel_per_char: y_pixel_per_char,
+        **kw)
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

+ + + + +
+
+
+
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+
+
# File 'src/lib/unicode_plot/lookup_canvas.rb', line 13
+
+def pixel!(pixel_x, pixel_y, color)
+  unless 0 <= pixel_x && pixel_x <= pixel_width &&
+         0 <= pixel_y && pixel_y <= pixel_height
+    return color
+  end
+  pixel_x -= 1 unless pixel_x < pixel_width
+  pixel_y -= 1 unless pixel_y < pixel_height
+
+  tx = pixel_x.fdiv(pixel_width) * width
+  char_x = tx.floor + 1
+  char_x_off = pixel_x % x_pixel_per_char + 1
+  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
+
+  char_y = (pixel_y.fdiv(pixel_height) * height).floor + 1
+  char_y_off = pixel_y % y_pixel_per_char + 1
+
+  index = index_at(char_x - 1, char_y - 1)
+  if index
+    @grid[index] |= lookup_encode(char_x_off - 1, char_y_off - 1)
+    @colors[index] |= COLOR_ENCODE[color]
+  end
+end
+
+
+ +
+ + + + + +
+
+
+
+36
+37
+38
+39
+40
+41
+42
+43
+44
+
+
# File 'src/lib/unicode_plot/lookup_canvas.rb', line 36
+
+def print_row(out, row_index)
+  unless 0 <= row_index && row_index < height
+    raise ArgumentError, "row_index out of bounds"
+  end
+  y = row_index
+  (0 ... width).each do |x|
+    print_color(out, color_at(x, y), lookup_decode(char_at(x, y)))
+  end
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Plot.html b/0.0.4/UnicodePlot/Plot.html new file mode 100644 index 0000000..1343682 --- /dev/null +++ b/0.0.4/UnicodePlot/Plot.html @@ -0,0 +1,1862 @@ + + + + + + + Class: UnicodePlot::Plot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Plot + + + +

+
+ +
+
Inherits:
+
+ Object + +
    +
  • Object
  • + + + +
+ show all + +
+
+ + + + + + +
+
Includes:
+
StyledPrinter
+
+ + + + + + +
+
Defined in:
+
src/lib/unicode_plot/plot.rb
+
+ +
+ +
+

Direct Known Subclasses

+

Barplot, Boxplot, GridPlot

+
+ + +

+ Constant Summary + collapse +

+ +
+ +
DEFAULT_WIDTH = + +
+
40
+ +
DEFAULT_BORDER = + +
+
:solid
+ +
DEFAULT_MARGIN = + +
+
3
+ +
DEFAULT_PADDING = + +
+
1
+ +
COLOR_CYCLE = + +
+
[
+  :green,
+  :blue,
+  :red,
+  :magenta,
+  :yellow,
+  :cyan
+].freeze
+ +
+ + + + + + +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + +

Instance Attribute Summary collapse

+
    + +
  • + + + #border ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute border.

    +
    + +
  • + + +
  • + + + #colors_deco ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute colors_deco.

    +
    + +
  • + + +
  • + + + #colors_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute colors_left.

    +
    + +
  • + + +
  • + + + #colors_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute colors_right.

    +
    + +
  • + + +
  • + + + #decorations ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute decorations.

    +
    + +
  • + + +
  • + + + #labels_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute labels_left.

    +
    + +
  • + + +
  • + + + #labels_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute labels_right.

    +
    + +
  • + + +
  • + + + #margin ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute margin.

    +
    + +
  • + + +
  • + + + #padding ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute padding.

    +
    + +
  • + + +
  • + + + #title ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute title.

    +
    + +
  • + + +
  • + + + #xlabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute xlabel.

    +
    + +
  • + + +
  • + + + #ylabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute ylabel.

    +
    + +
  • + + +
+ + + + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(title: nil, xlabel: nil, ylabel: nil, border: DEFAULT_BORDER, margin: DEFAULT_MARGIN, padding: DEFAULT_PADDING, labels: true) ⇒ Plot + + + + + +

+
+

Returns a new instance of Plot.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
+
# File 'src/lib/unicode_plot/plot.rb', line 10
+
+def initialize(title: nil,
+               xlabel: nil,
+               ylabel: nil,
+               border: DEFAULT_BORDER,
+               margin: DEFAULT_MARGIN,
+               padding: DEFAULT_PADDING,
+               labels: true)
+  @title = title
+  @xlabel = xlabel
+  @ylabel = ylabel
+  @border = border
+  @margin = check_margin(margin)
+  @padding = padding
+  @labels_left = {}
+  @colors_left = {}
+  @labels_right = {}
+  @colors_right = {}
+  @decorations = {}
+  @colors_deco = {}
+  @show_labels = labels
+  @auto_color = 0
+end
+
+
+ +
+ +
+

Instance Attribute Details

+ + + +
+

+ + #borderObject (readonly) + + + + + +

+
+

Returns the value of attribute border.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+36
+37
+38
+
+
# File 'src/lib/unicode_plot/plot.rb', line 36
+
+def border
+  @border
+end
+
+
+ + + +
+

+ + #colors_decoObject (readonly) + + + + + +

+
+

Returns the value of attribute colors_deco.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+44
+45
+46
+
+
# File 'src/lib/unicode_plot/plot.rb', line 44
+
+def colors_deco
+  @colors_deco
+end
+
+
+ + + +
+

+ + #colors_leftObject (readonly) + + + + + +

+
+

Returns the value of attribute colors_left.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+40
+41
+42
+
+
# File 'src/lib/unicode_plot/plot.rb', line 40
+
+def colors_left
+  @colors_left
+end
+
+
+ + + +
+

+ + #colors_rightObject (readonly) + + + + + +

+
+

Returns the value of attribute colors_right.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+42
+43
+44
+
+
# File 'src/lib/unicode_plot/plot.rb', line 42
+
+def colors_right
+  @colors_right
+end
+
+
+ + + +
+

+ + #decorationsObject (readonly) + + + + + +

+
+

Returns the value of attribute decorations.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+43
+44
+45
+
+
# File 'src/lib/unicode_plot/plot.rb', line 43
+
+def decorations
+  @decorations
+end
+
+
+ + + +
+

+ + #labels_leftObject (readonly) + + + + + +

+
+

Returns the value of attribute labels_left.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+39
+40
+41
+
+
# File 'src/lib/unicode_plot/plot.rb', line 39
+
+def labels_left
+  @labels_left
+end
+
+
+ + + +
+

+ + #labels_rightObject (readonly) + + + + + +

+
+

Returns the value of attribute labels_right.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+41
+42
+43
+
+
# File 'src/lib/unicode_plot/plot.rb', line 41
+
+def labels_right
+  @labels_right
+end
+
+
+ + + +
+

+ + #marginObject (readonly) + + + + + +

+
+

Returns the value of attribute margin.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+37
+38
+39
+
+
# File 'src/lib/unicode_plot/plot.rb', line 37
+
+def margin
+  @margin
+end
+
+
+ + + +
+

+ + #paddingObject (readonly) + + + + + +

+
+

Returns the value of attribute padding.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+38
+39
+40
+
+
# File 'src/lib/unicode_plot/plot.rb', line 38
+
+def padding
+  @padding
+end
+
+
+ + + +
+

+ + #titleObject (readonly) + + + + + +

+
+

Returns the value of attribute title.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+33
+34
+35
+
+
# File 'src/lib/unicode_plot/plot.rb', line 33
+
+def title
+  @title
+end
+
+
+ + + +
+

+ + #xlabelObject (readonly) + + + + + +

+
+

Returns the value of attribute xlabel.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+34
+35
+36
+
+
# File 'src/lib/unicode_plot/plot.rb', line 34
+
+def xlabel
+  @xlabel
+end
+
+
+ + + +
+

+ + #ylabelObject (readonly) + + + + + +

+
+

Returns the value of attribute ylabel.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+35
+36
+37
+
+
# File 'src/lib/unicode_plot/plot.rb', line 35
+
+def ylabel
+  @ylabel
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #annotate!(loc, value, color: :normal) ⇒ Object + + + + + +

+ + + + +
+
+
+
+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
+
+
# File 'src/lib/unicode_plot/plot.rb', line 66
+
+def annotate!(loc, value, color: :normal)
+  case loc
+  when :l
+    (0 ... n_rows).each do |row|
+      if @labels_left.fetch(row, "") == ""
+        @labels_left[row] = value
+        @colors_left[row] = color
+        break
+      end
+    end
+  when :r
+    (0 ... n_rows).each do |row|
+      if @labels_right.fetch(row, "") == ""
+        @labels_right[row] = value
+        @colors_right[row] = color
+        break
+      end
+    end
+  when :t, :b, :tl, :tr, :bl, :br
+    @decorations[loc] = value
+    @colors_deco[loc] = color
+  else
+    raise ArgumentError,
+      "unknown location to annotate (#{loc.inspect} for :t, :b, :l, :r, :tl, :tr, :bl, or :br)"
+  end
+end
+
+
+ +
+

+ + #annotate_row!(loc, row_index, value, color: :normal) ⇒ Object + + + + + +

+ + + + +
+
+
+
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+
+
# File 'src/lib/unicode_plot/plot.rb', line 93
+
+def annotate_row!(loc, row_index, value, color: :normal)
+  case loc
+  when :l
+    @labels_left[row_index] = value
+    @colors_left[row_index] = color
+  when :r
+    @labels_right[row_index] = value
+    @colors_right[row_index] = color
+  else
+    raise ArgumentError, "unknown location `#{loc}`, try :l or :r instead"
+  end
+end
+
+
+ +
+

+ + #next_colorObject + + + + + +

+ + + + +
+
+
+
+119
+120
+121
+122
+123
+
+
# File 'src/lib/unicode_plot/plot.rb', line 119
+
+def next_color
+  COLOR_CYCLE[@auto_color]
+ensure
+  @auto_color = (@auto_color + 1) % COLOR_CYCLE.length
+end
+
+
+ +
+

+ + #render(out = $stdout, newline: true) ⇒ Object + + + + + +

+ + + + +
+
+
+
+106
+107
+108
+
+
# File 'src/lib/unicode_plot/plot.rb', line 106
+
+def render(out=$stdout, newline: true)
+  Renderer.render(out, self, newline)
+end
+
+
+ +
+

+ + #show_labels?Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+62
+63
+64
+
+
# File 'src/lib/unicode_plot/plot.rb', line 62
+
+def show_labels?
+  @show_labels
+end
+
+
+ +
+

+ + #title_given?Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+46
+47
+48
+
+
# File 'src/lib/unicode_plot/plot.rb', line 46
+
+def title_given?
+  title && title != ""
+end
+
+
+ +
+

+ + #to_sObject + + + + + +

+ + + + +
+
+
+
+125
+126
+127
+128
+129
+130
+131
+
+
# File 'src/lib/unicode_plot/plot.rb', line 125
+
+def to_s
+  StringIO.open do |sio|
+    render(sio, newline: false)
+    sio.close
+    sio.string
+  end
+end
+
+
+ +
+

+ + #xlabel_given?Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+50
+51
+52
+
+
# File 'src/lib/unicode_plot/plot.rb', line 50
+
+def xlabel_given?
+  xlabel && xlabel != ""
+end
+
+
+ +
+

+ + #ylabel_given?Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+54
+55
+56
+
+
# File 'src/lib/unicode_plot/plot.rb', line 54
+
+def ylabel_given?
+  ylabel && ylabel != ""
+end
+
+
+ +
+

+ + #ylabel_lengthObject + + + + + +

+ + + + +
+
+
+
+58
+59
+60
+
+
# File 'src/lib/unicode_plot/plot.rb', line 58
+
+def ylabel_length
+  ylabel&.length || 0
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Renderer.html b/0.0.4/UnicodePlot/Renderer.html new file mode 100644 index 0000000..76e8016 --- /dev/null +++ b/0.0.4/UnicodePlot/Renderer.html @@ -0,0 +1,525 @@ + + + + + + + Class: UnicodePlot::Renderer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Renderer + + + +

+
+ +
+
Inherits:
+
+ Object + +
    +
  • Object
  • + + + +
+ show all + +
+
+ + + + + + +
+
Includes:
+
BorderPrinter
+
+ + + + + + +
+
Defined in:
+
src/lib/unicode_plot/renderer.rb
+
+ +
+ + + + +

Constant Summary

+ +

Constants included + from StyledPrinter

+

StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

+ + +

Instance Attribute Summary collapse

+
    + +
  • + + + #out ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute out.

    +
    + +
  • + + +
  • + + + #plot ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

    Returns the value of attribute plot.

    +
    + +
  • + + +
+ + + + + +

+ Class Method Summary + collapse +

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + + + +

Methods included from BorderPrinter

+

#print_border_bottom, #print_border_top

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +
+

+ + #initialize(plot) ⇒ Renderer + + + + + +

+
+

Returns a new instance of Renderer.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+66
+67
+68
+69
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 66
+
+def initialize(plot)
+  @plot = plot
+  @out = nil
+end
+
+
+ +
+ +
+

Instance Attribute Details

+ + + +
+

+ + #outObject (readonly) + + + + + +

+
+

Returns the value of attribute out.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+72
+73
+74
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 72
+
+def out
+  @out
+end
+
+
+ + + +
+

+ + #plotObject (readonly) + + + + + +

+
+

Returns the value of attribute plot.

+ + +
+
+
+ + +
+ + + + +
+
+
+
+71
+72
+73
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 71
+
+def plot
+  @plot
+end
+
+
+ +
+ + +
+

Class Method Details

+ + +
+

+ + .render(out, plot, newline) ⇒ Object + + + + + +

+ + + + +
+
+
+
+62
+63
+64
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 62
+
+def self.render(out, plot, newline)
+  new(plot).render(out, newline)
+end
+
+
+ +
+ +
+

Instance Method Details

+ + +
+

+ + #render(out, newline) ⇒ Object + + + + + +

+ + + + +
+
+
+
+74
+75
+76
+77
+78
+79
+80
+81
+82
+
+
# File 'src/lib/unicode_plot/renderer.rb', line 74
+
+def render(out, newline)
+  @out = out
+  init_render
+
+  render_top
+  render_rows
+  render_bottom
+  out.puts if newline
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Scatterplot.html b/0.0.4/UnicodePlot/Scatterplot.html new file mode 100644 index 0000000..37cc09b --- /dev/null +++ b/0.0.4/UnicodePlot/Scatterplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Scatterplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: UnicodePlot::Scatterplot + + + +

+
+ +
+
Inherits:
+
+ GridPlot + +
    +
  • Object
  • + + + + + + + +
+ show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/scatterplot.rb
+
+ +
+ + + + +

Constant Summary

+ +

Constants inherited + from GridPlot

+

GridPlot::DEFAULT_HEIGHT, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

+ + + +

Constants inherited + from Plot

+

Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

+ + + +

Constants included + from StyledPrinter

+

UnicodePlot::StyledPrinter::COLOR_DECODE, UnicodePlot::StyledPrinter::COLOR_ENCODE, UnicodePlot::StyledPrinter::DISABLE_TEXT_STYLE, UnicodePlot::StyledPrinter::TEXT_COLORS

+ + + + +

Instance Attribute Summary

+ +

Attributes inherited from Plot

+

#border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

+ + + + + + + + + +

Method Summary

+ +

Methods inherited from GridPlot

+

#initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

+ + + + + + + + + +

Methods inherited from Plot

+

#annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

+ + + + + + + + + +

Methods included from StyledPrinter

+

#color?, #print_color, #print_styled

+
+

Constructor Details

+ +

This class inherits a constructor from UnicodePlot::GridPlot

+ +
+ + +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/StyledPrinter.html b/0.0.4/UnicodePlot/StyledPrinter.html new file mode 100644 index 0000000..878fdf1 --- /dev/null +++ b/0.0.4/UnicodePlot/StyledPrinter.html @@ -0,0 +1,421 @@ + + + + + + + Module: UnicodePlot::StyledPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::StyledPrinter + + + +

+
+ + + + + + + + + +
+
Included in:
+
BorderPrinter, Plot
+
+ + + +
+
Defined in:
+
src/lib/unicode_plot/styled_printer.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
TEXT_COLORS = + +
+
{
+  black:         "\033[30m",
+  red:           "\033[31m",
+  green:         "\033[32m",
+  yellow:        "\033[33m",
+  blue:          "\033[34m",
+  magenta:       "\033[35m",
+  cyan:          "\033[36m",
+  white:         "\033[37m",
+  gray:          "\033[90m",
+  light_black:   "\033[90m",
+  light_red:     "\033[91m",
+  light_green:   "\033[92m",
+  light_yellow:  "\033[93m",
+  light_blue:    "\033[94m",
+  light_magenta: "\033[95m",
+  light_cyan:    "\033[96m",
+  normal:        "\033[0m",
+  default:       "\033[39m",
+  bold:          "\033[1m",
+  underline:     "\033[4m",
+  blink:         "\033[5m",
+  reverse:       "\033[7m",
+  hidden:        "\033[8m",
+  nothing:       "",
+}
+ +
DISABLE_TEXT_STYLE = + +
+
{
+  bold:      "\033[22m",
+  underline: "\033[24m",
+  blink:     "\033[25m",
+  reverse:   "\033[27m",
+  hidden:    "\033[28m",
+  normal:    "",
+  default:   "",
+  nothing:   "",
+}.freeze
+ +
COLOR_ENCODE = + +
+
{
+  normal:  0b000,
+  blue:    0b001,
+  red:     0b010,
+  magenta: 0b011,
+  green:   0b100,
+  cyan:    0b101,
+  yellow:  0b110,
+  white:   0b111
+}.freeze
+ +
COLOR_DECODE = + +
+
COLOR_ENCODE.map {|k, v| [v, k] }.to_h.freeze
+ +
+ + + + + + + + + +

+ Instance Method Summary + collapse +

+ + + + + + +
+

Instance Method Details

+ + +
+

+ + #color?(out) ⇒ Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+87
+88
+89
+
+
# File 'src/lib/unicode_plot/styled_printer.rb', line 87
+
+def color?(out)
+  out&.tty? || false
+end
+
+
+ +
+ + + + + +
+
+
+
+82
+83
+84
+85
+
+
# File 'src/lib/unicode_plot/styled_printer.rb', line 82
+
+def print_color(out, color, *args)
+  color = COLOR_DECODE[color]
+  print_styled(out, *args, color: color)
+end
+
+
+ +
+ + + + + +
+
+
+
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+
+
# File 'src/lib/unicode_plot/styled_printer.rb', line 60
+
+def print_styled(out, *args, bold: false, color: :normal)
+  return out.print(*args) unless color?(out)
+
+  str = StringIO.open {|sio| sio.print(*args); sio.close; sio.string }
+  color = :nothing if bold && color == :bold
+  enable_ansi = TEXT_COLORS.fetch(color, TEXT_COLORS[:default]) +
+                (bold ? TEXT_COLORS[:bold] : "")
+  disable_ansi = (bold ? DISABLE_TEXT_STYLE[:bold] : "") +
+                 DISABLE_TEXT_STYLE.fetch(color, TEXT_COLORS[:default])
+  first = true
+  StringIO.open do |sio|
+    str.each_line do |line|
+      sio.puts unless first
+      first = false
+      continue if line.empty?
+      sio.print(enable_ansi, line, disable_ansi)
+    end
+    sio.close
+    out.print(sio.string)
+  end
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Utils.html b/0.0.4/UnicodePlot/Utils.html new file mode 100644 index 0000000..597965c --- /dev/null +++ b/0.0.4/UnicodePlot/Utils.html @@ -0,0 +1,613 @@ + + + + + + + Module: UnicodePlot::Utils + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::Utils + + + +

+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/utils.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
INT64_MIN = + +
+
-9223372036854775808
+ +
INT64_MAX = + +
+
9223372036854775807
+ +
+ + + + + + + + + +

+ Class Method Summary + collapse +

+ + + + + + +
+

Class Method Details

+ + +
+

+ + .ceil_neg_log10(x) ⇒ Object + + + + + +

+ + + + +
+
+
+
+59
+60
+61
+62
+63
+64
+65
+
+
# File 'src/lib/unicode_plot/utils.rb', line 59
+
+def ceil_neg_log10(x)
+  if roundable?(-Math.log10(x))
+    (-Math.log10(x)).ceil
+  else
+    (-Math.log10(x)).floor
+  end
+end
+
+
+ +
+

+ + .extend_limits(values, limits) ⇒ Object + + + + + +

+ + + + +
+
+
+
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+
+
# File 'src/lib/unicode_plot/utils.rb', line 5
+
+def extend_limits(values, limits)
+  mi, ma = limits.minmax.map(&:to_f)
+  if mi == 0 && ma == 0
+    mi, ma = values.minmax.map(&:to_f)
+  end
+  diff = ma - mi
+  if diff == 0
+    ma = mi + 1
+    mi = mi - 1
+  end
+  if limits == [0, 0]
+    plotting_range_narrow(mi, ma)
+  else
+    [mi, ma]
+  end
+end
+
+
+ +
+

+ + .float_round_log10(x, m) ⇒ Object + + + + + +

+ + + + +
+
+
+
+29
+30
+31
+32
+33
+34
+35
+36
+37
+
+
# File 'src/lib/unicode_plot/utils.rb', line 29
+
+def float_round_log10(x, m)
+  if x == 0
+    0.0
+  elsif x > 0
+    x.round(ceil_neg_log10(m) + 1).to_f
+  else
+    -(-x).round(ceil_neg_log10(m) + 1).to_f
+  end
+end
+
+
+ +
+

+ + .plotting_range_narrow(xmin, xmax) ⇒ Object + + + + + +

+ + + + +
+
+
+
+22
+23
+24
+25
+26
+27
+
+
# File 'src/lib/unicode_plot/utils.rb', line 22
+
+def plotting_range_narrow(xmin, xmax)
+  diff = xmax - xmin
+  xmax = round_up_subtick(xmax, diff)
+  xmin = round_down_subtick(xmin, diff)
+  [xmin.to_f, xmax.to_f]
+end
+
+
+ +
+

+ + .round_down_subtick(x, m) ⇒ Object + + + + + +

+ + + + +
+
+
+
+49
+50
+51
+52
+53
+54
+55
+56
+57
+
+
# File 'src/lib/unicode_plot/utils.rb', line 49
+
+def round_down_subtick(x, m)
+  if x == 0
+    0.0
+  elsif x > 0
+    x.floor(ceil_neg_log10(m) + 1)
+  else
+    -(-x).ceil(ceil_neg_log10(m) + 1)
+  end
+end
+
+
+ +
+

+ + .round_up_subtick(x, m) ⇒ Object + + + + + +

+ + + + +
+
+
+
+39
+40
+41
+42
+43
+44
+45
+46
+47
+
+
# File 'src/lib/unicode_plot/utils.rb', line 39
+
+def round_up_subtick(x, m)
+  if x == 0
+    0.0
+  elsif x > 0
+    x.ceil(ceil_neg_log10(m) + 1)
+  else
+    -(-x).floor(ceil_neg_log10(m) + 1)
+  end
+end
+
+
+ +
+

+ + .roundable?(x) ⇒ Boolean + + + + + +

+
+ + + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+70
+71
+72
+
+
# File 'src/lib/unicode_plot/utils.rb', line 70
+
+def roundable?(x)
+  x.to_i == x && INT64_MIN <= x && x < INT64_MAX
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/ValueTransformer.html b/0.0.4/UnicodePlot/ValueTransformer.html new file mode 100644 index 0000000..4f9fd40 --- /dev/null +++ b/0.0.4/UnicodePlot/ValueTransformer.html @@ -0,0 +1,317 @@ + + + + + + + Module: UnicodePlot::ValueTransformer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::ValueTransformer + + + +

+
+ + + + + + + + + +
+
Included in:
+
Barplot
+
+ + + +
+
Defined in:
+
src/lib/unicode_plot/value_transformer.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
PREDEFINED_TRANSFORM_FUNCTIONS = + +
+
{
+  log: Math.method(:log),
+  ln: Math.method(:log),
+  log10: Math.method(:log10),
+  lg: Math.method(:log10),
+  log2: Math.method(:log2),
+  lb: Math.method(:log2),
+}.freeze
+ +
+ + + + + + + + + +

+ Class Method Summary + collapse +

+ + + +

+ Instance Method Summary + collapse +

+ + + + + + +
+

Class Method Details

+ + +
+

+ + .transform_name(func, basename = "") ⇒ Object + + + + + +

+ + + + +
+
+
+
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+
+
# File 'src/lib/unicode_plot/value_transformer.rb', line 30
+
+module_function def transform_name(func, basename="")
+  return basename unless func
+  case func
+  when String, Symbol
+    name = func
+  when ->(f) { f.respond_to?(:name) }
+    name = func.name
+  else
+    name = "custom"
+  end
+  "#{basename} [#{name}]"
+end
+
+
+ +
+ +
+

Instance Method Details

+ + +
+

+ + #transform_values(func, values) ⇒ Object + + + + + +

+ + + + +
+
+
+
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+
+
# File 'src/lib/unicode_plot/value_transformer.rb', line 12
+
+def transform_values(func, values)
+  return values unless func
+
+  unless func.respond_to?(:call)
+    func = PREDEFINED_TRANSFORM_FUNCTIONS[func]
+    unless func.respond_to?(:call)
+      raise ArgumentError, "func must be callable"
+    end
+  end
+
+  case values
+  when Numeric
+    func.(values)
+  else
+    values.map(&func)
+  end
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/UnicodePlot/Version.html b/0.0.4/UnicodePlot/Version.html new file mode 100644 index 0000000..edc2633 --- /dev/null +++ b/0.0.4/UnicodePlot/Version.html @@ -0,0 +1,121 @@ + + + + + + + Module: UnicodePlot::Version + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Module: UnicodePlot::Version + + + +

+
+ + + + + + + + + + + +
+
Defined in:
+
src/lib/unicode_plot/version.rb
+
+ +
+ + + +

+ Constant Summary + collapse +

+ +
+ +
STRING = + +
+
VERSION
+ +
+ + + + + + + + + + +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/_index.html b/0.0.4/_index.html new file mode 100644 index 0000000..344ca93 --- /dev/null +++ b/0.0.4/_index.html @@ -0,0 +1,329 @@ + + + + + + + Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Documentation by YARD 0.9.26

+
+

Alphabetic Index

+ +

File Listing

+ + +
+

Namespace Listing A-Z

+ + + + + + + + +
+ + + + + + + + +
    +
  • C
  • +
      + +
    • + Canvas + + (UnicodePlot) + +
    • + +
    +
+ + + + + +
    +
  • G
  • +
      + +
    • + GridPlot + + (UnicodePlot) + +
    • + +
    +
+ + + + + +
    +
  • P
  • +
      + +
    • + Plot + + (UnicodePlot) + +
    • + +
    +
+ + +
+ + +
    +
  • R
  • +
      + +
    • + Renderer + + (UnicodePlot) + +
    • + +
    +
+ + + + + + + + + + +
+ +
+ +
+ + + +
+ + \ No newline at end of file diff --git a/0.0.4/class_list.html b/0.0.4/class_list.html new file mode 100644 index 0000000..24da60d --- /dev/null +++ b/0.0.4/class_list.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + Class List + + + +
+
+

Class List

+ + + +
+ + +
+ + diff --git a/0.0.4/css/common.css b/0.0.4/css/common.css new file mode 100644 index 0000000..cf25c45 --- /dev/null +++ b/0.0.4/css/common.css @@ -0,0 +1 @@ +/* Override this file with custom rules */ \ No newline at end of file diff --git a/0.0.4/css/full_list.css b/0.0.4/css/full_list.css new file mode 100644 index 0000000..fa35982 --- /dev/null +++ b/0.0.4/css/full_list.css @@ -0,0 +1,58 @@ +body { + margin: 0; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + height: 101%; + overflow-x: hidden; + background: #fafafa; +} + +h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; } +.clear { clear: both; } +.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; } +#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; } +#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; } +#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; } +#full_list ul { padding: 0; } +#full_list li { padding: 0; margin: 0; list-style: none; } +#full_list li .item { padding: 5px 5px 5px 12px; } +#noresults { padding: 7px 12px; background: #fff; } +#content.insearch #noresults { margin-left: 7px; } +li.collapsed ul { display: none; } +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; } +li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; } +li { color: #888; cursor: pointer; } +li.deprecated { text-decoration: line-through; font-style: italic; } +li.odd { background: #f0f0f0; } +li.even { background: #fafafa; } +.item:hover { background: #ddd; } +li small:before { content: "("; } +li small:after { content: ")"; } +li small.search_info { display: none; } +a, a:visited { text-decoration: none; color: #05a; } +li.clicked > .item { background: #05a; color: #ccc; } +li.clicked > .item a, li.clicked > .item a:visited { color: #eee; } +li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; } +li.collapsed.clicked a.toggle { background-position: top right; } +#search input { border: 1px solid #bbb; border-radius: 3px; } +#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; } +#full_list_nav a, #nav a:visited { color: #358; } +#full_list_nav a:hover { background: transparent; color: #5af; } +#full_list_nav span:after { content: ' | '; } +#full_list_nav span:last-child:after { content: ''; } + +#content h1 { margin-top: 0; } +li { white-space: nowrap; cursor: normal; } +li small { display: block; font-size: 0.8em; } +li small:before { content: ""; } +li small:after { content: ""; } +li small.search_info { display: none; } +#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; } +#content.insearch #search { background-position: center right; } +#search input { width: 110px; } + +#full_list.insearch ul { display: block; } +#full_list.insearch .item { display: none; } +#full_list.insearch .found { display: block; padding-left: 11px !important; } +#full_list.insearch li a.toggle { display: none; } +#full_list.insearch li small.search_info { display: block; } diff --git a/0.0.4/css/style.css b/0.0.4/css/style.css new file mode 100644 index 0000000..eb0dbc8 --- /dev/null +++ b/0.0.4/css/style.css @@ -0,0 +1,497 @@ +html { + width: 100%; + height: 100%; +} +body { + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + width: 100%; + margin: 0; + padding: 0; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} + +#nav { + position: relative; + width: 100%; + height: 100%; + border: 0; + border-right: 1px dotted #eee; + overflow: auto; +} +.nav_wrap { + margin: 0; + padding: 0; + width: 20%; + height: 100%; + position: relative; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; + flex-shrink: 0; + -webkit-flex-shrink: 0; + -ms-flex: 1 0; +} +#resizer { + position: absolute; + right: -5px; + top: 0; + width: 10px; + height: 100%; + cursor: col-resize; + z-index: 9999; +} +#main { + flex: 5 1; + -webkit-flex: 5 1; + -ms-flex: 5 1; + outline: none; + position: relative; + background: #fff; + padding: 1.2em; + padding-top: 0.2em; + box-sizing: border-box; +} + +@media (max-width: 920px) { + .nav_wrap { width: 100%; top: 0; right: 0; overflow: visible; position: absolute; } + #resizer { display: none; } + #nav { + z-index: 9999; + background: #fff; + display: none; + position: absolute; + top: 40px; + right: 12px; + width: 500px; + max-width: 80%; + height: 80%; + overflow-y: scroll; + border: 1px solid #999; + border-collapse: collapse; + box-shadow: -7px 5px 25px #aaa; + border-radius: 2px; + } +} + +@media (min-width: 920px) { + body { height: 100%; overflow: hidden; } + #main { height: 100%; overflow: auto; } + #search { display: none; } +} + +#main img { max-width: 100%; } +h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; } +h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; } +h1.title { margin-bottom: 10px; } +h1.alphaindex { margin-top: 0; font-size: 22px; } +h2 { + padding: 0; + padding-bottom: 3px; + border-bottom: 1px #aaa solid; + font-size: 1.4em; + margin: 1.8em 0 0.5em; + position: relative; +} +h2 small { font-weight: normal; font-size: 0.7em; display: inline; position: absolute; right: 0; } +h2 small a { + display: block; + height: 20px; + border: 1px solid #aaa; + border-bottom: 0; + border-top-left-radius: 5px; + background: #f8f8f8; + position: relative; + padding: 2px 7px; +} +.clear { clear: both; } +.inline { display: inline; } +.inline p:first-child { display: inline; } +.docstring, .tags, #filecontents { font-size: 15px; line-height: 1.5145em; } +.docstring p > code, .docstring p > tt, .tags p > code, .tags p > tt { + color: #c7254e; background: #f9f2f4; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; } +.docstring h1 { font-size: 1.2em; } +.docstring h2 { font-size: 1.1em; } +.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; } +.summary_desc .object_link a, .docstring .object_link a { + font-family: monospace; font-size: 1.05em; + color: #05a; background: #EDF4FA; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.rdoc-term { padding-right: 25px; font-weight: bold; } +.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; } +.summary_desc pre.code .object_link a, .docstring pre.code .object_link a { + padding: 0px; background: inherit; color: inherit; border-radius: inherit; +} + +/* style for */ +#filecontents table, .docstring table { border-collapse: collapse; } +#filecontents table th, #filecontents table td, +.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; } +#filecontents table tr:nth-child(odd), +.docstring table tr:nth-child(odd) { background: #eee; } +#filecontents table tr:nth-child(even), +.docstring table tr:nth-child(even) { background: #fff; } +#filecontents table th, .docstring table th { background: #fff; } + +/* style for
    */ +#filecontents li > p, .docstring li > p { margin: 0px; } +#filecontents ul, .docstring ul { padding-left: 20px; } +/* style for
    */ +#filecontents dl, .docstring dl { border: 1px solid #ccc; } +#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; } +#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; } +#filecontents dd > p, .docstring dd > p { margin: 0px; } + +.note { + color: #222; + margin: 20px 0; + padding: 10px; + border: 1px solid #eee; + border-radius: 3px; + display: block; +} +.docstring .note { + border-left-color: #ccc; + border-left-width: 5px; +} +.note.todo { background: #ffffc5; border-color: #ececaa; } +.note.returns_void { background: #efefef; } +.note.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.title.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.private { background: #ffffc5; border-color: #ececaa; } +.note.title { padding: 3px 6px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; } +.summary_signature + .note.title { margin-left: 7px; } +h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; } +.note.title { background: #efefef; } +.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; } +.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.private { background: #d5d5d5; border-color: #c5c5c5; } +.note.title.not_defined_here { background: transparent; border: none; font-style: italic; } +.discussion .note { margin-top: 6px; } +.discussion .note:first-child { margin-top: 0; } + +h3.inherited { + font-style: italic; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + padding: 0; + margin: 0; + margin-top: 12px; + margin-bottom: 3px; + font-size: 13px; +} +p.inherited { + padding: 0; + margin: 0; + margin-left: 25px; +} + +.box_info dl { + margin: 0; + border: 0; + width: 100%; + font-size: 1em; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} +.box_info dl dt { + flex-shrink: 0; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + width: 100px; + text-align: right; + font-weight: bold; + border: 1px solid #aaa; + border-width: 1px 0px 0px 1px; + padding: 6px 0; + padding-right: 10px; +} +.box_info dl dd { + flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex: 1; + max-width: 420px; + padding: 6px 0; + padding-right: 20px; + border: 1px solid #aaa; + border-width: 1px 1px 0 0; + overflow: hidden; + position: relative; +} +.box_info dl:last-child > * { + border-bottom: 1px solid #aaa; +} +.box_info dl:nth-child(odd) > * { background: #eee; } +.box_info dl:nth-child(even) > * { background: #fff; } +.box_info dl > * { margin: 0; } + +ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; } +.index_inline_list { padding-left: 0; font-size: 1.1em; } + +.index_inline_list li { + list-style: none; + display: inline-block; + padding: 0 12px; + line-height: 30px; + margin-bottom: 5px; +} + +dl.constants { margin-left: 10px; } +dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; } +dl.constants.compact dt { display: inline-block; font-weight: normal } +dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; } +dl.constants .docstring .note:first-child { margin-top: 5px; } + +.summary_desc { + margin-left: 32px; + display: block; + font-family: sans-serif; + font-size: 1.1em; + margin-top: 8px; + line-height: 1.5145em; + margin-bottom: 0.8em; +} +.summary_desc tt { font-size: 0.9em; } +dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; } +dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; } +dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; } +dl.constants .discussion *:first-child { margin-top: 0; } +dl.constants .discussion *:last-child { margin-bottom: 0; } + +.method_details { border-top: 1px dotted #ccc; margin-top: 25px; padding-top: 0; } +.method_details.first { border: 0; margin-top: 5px; } +.method_details.first h3.signature { margin-top: 1em; } +p.signature, h3.signature { + font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace; + padding: 6px 10px; margin-top: 1em; + background: #E8F4FF; border: 1px solid #d8d8e5; border-radius: 5px; +} +p.signature tt, +h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; } +p.signature .overload, +h3.signature .overload { display: block; } +p.signature .extras, +h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; } +p.signature .not_defined_here, +h3.signature .not_defined_here, +p.signature .aliases, +h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; } +p.signature .aliases .names, +h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; } + +.tags .tag_title { font-size: 1.05em; margin-bottom: 0; font-weight: bold; } +.tags .tag_title tt { color: initial; padding: initial; background: initial; } +.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; } +.tags ul li { margin-bottom: 3px; } +.tags ul .name { font-family: monospace; font-weight: bold; } +.tags ul .note { padding: 3px 6px; } +.tags { margin-bottom: 12px; } + +.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; } +.tags .examples .inline p { padding: 0; margin: 0; font-weight: bold; font-size: 1em; } +.tags .examples .inline p:before { content: "▸"; font-size: 1em; margin-right: 5px; } + +.tags .overload .overload_item { list-style: none; margin-bottom: 25px; } +.tags .overload .overload_item .signature { + padding: 2px 8px; + background: #F1F8FF; border: 1px solid #d8d8e5; border-radius: 3px; +} +.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; } +.tags .overload .docstring { margin-top: 15px; } + +.defines { display: none; } + +#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; } + +.showSource { font-size: 0.9em; } +.showSource a, .showSource a:visited { text-decoration: none; color: #666; } + +#content a, #content a:visited { text-decoration: none; color: #05a; } +#content a:hover { background: #ffffa5; } + +ul.summary { + list-style: none; + font-family: monospace; + font-size: 1em; + line-height: 1.5em; + padding-left: 0px; +} +ul.summary a, ul.summary a:visited { + text-decoration: none; font-size: 1.1em; +} +ul.summary li { margin-bottom: 5px; } +.summary_signature { padding: 4px 8px; background: #f8f8f8; border: 1px solid #f0f0f0; border-radius: 5px; } +.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; } +.summary_signature.deprecated { background: #ffe5e5; border-color: #e9dada; } +ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;} +ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; } +#content .summary_signature:hover a, +#content .summary_signature:hover a:visited { + background: transparent; + color: #049; +} + +p.inherited a { font-family: monospace; font-size: 0.9em; } +p.inherited { word-spacing: 5px; font-size: 1.2em; } + +p.children { font-size: 1.2em; } +p.children a { font-size: 0.9em; } +p.children strong { font-size: 0.8em; } +p.children strong.modules { padding-left: 5px; } + +ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; } +ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; } +ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,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) no-repeat top center; } +ul.fullTree li:first-child { padding-top: 0; background: transparent; } +ul.fullTree li:last-child { padding-bottom: 0; } +.showAll ul.fullTree { display: block; } +.showAll .inheritName { display: none; } + +#search { position: absolute; right: 12px; top: 0px; z-index: 9000; } +#search a { + display: block; float: left; + padding: 4px 8px; text-decoration: none; color: #05a; fill: #05a; + border: 1px solid #d8d8e5; + border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; + background: #F1F8FF; + box-shadow: -1px 1px 3px #ddd; +} +#search a:hover { background: #f5faff; color: #06b; fill: #06b; } +#search a.active { + background: #568; padding-bottom: 20px; color: #fff; fill: #fff; + border: 1px solid #457; + border-top-left-radius: 5px; border-top-right-radius: 5px; +} +#search a.inactive { color: #999; fill: #999; } +.inheritanceTree, .toggleDefines { + float: right; + border-left: 1px solid #aaa; + position: absolute; top: 0; right: 0; + height: 100%; + background: #f6f6f6; + padding: 5px; + min-width: 55px; + text-align: center; +} + +#menu { font-size: 1.3em; color: #bbb; } +#menu .title, #menu a { font-size: 0.7em; } +#menu .title a { font-size: 1em; } +#menu .title { color: #555; } +#menu a, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; } +#menu a:hover { color: #05a; } + +#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; } +#footer a, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; } +#footer a:hover { color: #05a; } + +#listing ul.alpha { font-size: 1.1em; } +#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; } +#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; } +#listing ul.alpha ul { margin: 0; padding-left: 15px; } +#listing ul small { color: #666; font-size: 0.7em; } + +li.r1 { background: #f0f0f0; } +li.r2 { background: #fafafa; } + +#content ul.summary li.deprecated .summary_signature a, +#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; } + +#toc { + position: relative; + float: right; + overflow-x: auto; + right: -3px; + margin-left: 20px; + margin-bottom: 20px; + padding: 20px; padding-right: 30px; + max-width: 300px; + z-index: 5000; + background: #fefefe; + border: 1px solid #ddd; + box-shadow: -2px 2px 6px #bbb; +} +#toc .title { margin: 0; } +#toc ol { padding-left: 1.8em; } +#toc li { font-size: 1.1em; line-height: 1.7em; } +#toc > ol > li { font-size: 1.1em; font-weight: bold; } +#toc ol > li > ol { font-size: 0.9em; } +#toc ol ol > li > ol { padding-left: 2.3em; } +#toc ol + li { margin-top: 0.3em; } +#toc.hidden { padding: 10px; background: #fefefe; box-shadow: none; } +#toc.hidden:hover { background: #fafafa; } +#filecontents h1 + #toc.nofloat { margin-top: 0; } +@media (max-width: 560px) { + #toc { + margin-left: 0; + margin-top: 16px; + float: none; + max-width: none; + } +} + +/* syntax highlighting */ +.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; } +#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; } +#filecontents pre.code, .docstring pre.code { display: block; } +.source_code .lines { padding-right: 12px; color: #555; text-align: right; } +#filecontents pre.code, .docstring pre.code, +.tags pre.example { + padding: 9px 14px; + margin-top: 4px; + border: 1px solid #e1e1e8; + background: #f7f7f9; + border-radius: 4px; + font-size: 1em; + overflow-x: auto; + line-height: 1.2em; +} +pre.code { color: #000; tab-size: 2; } +pre.code .info.file { color: #555; } +pre.code .val { color: #036A07; } +pre.code .tstring_content, +pre.code .heredoc_beg, pre.code .heredoc_end, +pre.code .qwords_beg, pre.code .qwords_end, pre.code .qwords_sep, +pre.code .words_beg, pre.code .words_end, pre.code .words_sep, +pre.code .qsymbols_beg, pre.code .qsymbols_end, pre.code .qsymbols_sep, +pre.code .symbols_beg, pre.code .symbols_end, pre.code .symbols_sep, +pre.code .tstring, pre.code .dstring { color: #036A07; } +pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s, +pre.code .rubyid_to_sym, pre.code .rubyid_to_f, +pre.code .dot + pre.code .id, +pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; } +pre.code .comment { color: #0066FF; } +pre.code .const, pre.code .constant { color: #585CF6; } +pre.code .label, +pre.code .symbol { color: #C5060B; } +pre.code .kw, +pre.code .rubyid_require, +pre.code .rubyid_extend, +pre.code .rubyid_include { color: #0000FF; } +pre.code .ivar { color: #318495; } +pre.code .gvar, +pre.code .rubyid_backref, +pre.code .rubyid_nth_ref { color: #6D79DE; } +pre.code .regexp, .dregexp { color: #036A07; } +pre.code a { border-bottom: 1px dotted #bbf; } +/* inline code */ +*:not(pre) > code { + padding: 1px 3px 1px 3px; + border: 1px solid #E1E1E8; + background: #F7F7F9; + border-radius: 4px; +} + +/* Color fix for links */ +#content .summary_desc pre.code .id > .object_link a, /* identifier */ +#content .docstring pre.code .id > .object_link a { color: #0085FF; } +#content .summary_desc pre.code .const > .object_link a, /* constant */ +#content .docstring pre.code .const > .object_link a { color: #585CF6; } diff --git a/0.0.4/file.CHANGES.html b/0.0.4/file.CHANGES.html new file mode 100644 index 0000000..5d53e2a --- /dev/null +++ b/0.0.4/file.CHANGES.html @@ -0,0 +1,98 @@ + + + + + + + File: CHANGES + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    0.0.4

    + +
      +
    • Fix error by requiring stringio [#22]
    • +
    • Use enumerable-statistics >= 2.0.1 to avoid a bug of histogram [#28]
    • +
    + +

    0.0.3

    + +
      +
    • Add histogram support
    • +
    • Add barplot! method
    • +
    • Add scatterplot support
    • +
    • Add densityplot support
    • +
    + +

    0.0.2

    + +
      +
    • Add boxplot support
    • +
    + +

    0.0.1

    + +
      +
    • Add barplot support
    • +
    • Add lineplot support
    • +
    +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.4/file.LICENSE.html b/0.0.4/file.LICENSE.html new file mode 100644 index 0000000..f8083a0 --- /dev/null +++ b/0.0.4/file.LICENSE.html @@ -0,0 +1,70 @@ + + + + + + + File: LICENSE + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +
    The MIT License (MIT)
    Copyright © 2019 Kenta Murata

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the “Software”), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
    + + + +
    + + \ No newline at end of file diff --git a/0.0.4/file.README.html b/0.0.4/file.README.html new file mode 100644 index 0000000..af4cdf0 --- /dev/null +++ b/0.0.4/file.README.html @@ -0,0 +1,160 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    UnicodePlot - Plot your data by Unicode characters

    + +

    UnicodePlot provides the feature to make charts with Unicode characters.

    + +

    Install

    + +
    $ gem install unicode_plot
    +
    + +

    Usage

    + +
    require 'unicode_plot'
    +
    +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
    +y_sin = x.map {|xi| Math.sin(xi) }
    +y_cos = x.map {|xi| Math.cos(xi) }
    +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
    +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
    +plot.render($stdout)
    +puts
    +
    + +

    You can get the results below by running the above script:

    + +

    + +

    Supported charts

    + +

    barplot

    + +
    plot = UnicodePlot.barplot(data: {'foo': 20, 'bar': 50}, title: "Bar")
    +plot.render($stdout)
    +
    + +

    + +

    boxplot

    + +
    plot = UnicodePlot.boxplot(data: {foo: [1, 3, 5], bar: [3, 5, 7]}, title: "Box")
    +plot.render($stdout)
    +
    + +

    + +

    densityplot

    + +
    x = Array.new(500) { 20*rand - 10 } + Array.new(500) { 6*rand - 3 }
    +y = Array.new(1000) { 30*rand - 10 }
    +plot = UnicodePlot.densityplot(x, y, title: "Density")
    +plot.render($stdout)
    +
    + +

    + +

    histogram

    + +
    x = Array.new(100) { rand(10) } + Array.new(100) { rand(30) + 10 }
    +plot = UnicodePlot.histogram(x, title: "Histogram")
    +plot.render($stdout)
    +
    + +

    + +

    lineplot

    + +

    See Usage section above.

    + +

    scatterplot

    + +
    x = Array.new(50) { rand(20) - 10 }
    +y = x.map {|xx| xx*rand(30) - 10 }
    +plot = UnicodePlot.scatterplot(x, y, title: "Scatter")
    +plot.render($stdout)
    +
    + +

    + +

    Acknowledgement

    + +

    This library is strongly inspired by UnicodePlot.jl.

    + +

    License

    + +

    MIT License

    + +

    Author

    + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.4/file_list.html b/0.0.4/file_list.html new file mode 100644 index 0000000..8bdafe2 --- /dev/null +++ b/0.0.4/file_list.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + File List + + + +
    +
    +

    File List

    + + + +
    + + +
    + + diff --git a/0.0.4/frames.html b/0.0.4/frames.html new file mode 100644 index 0000000..1310783 --- /dev/null +++ b/0.0.4/frames.html @@ -0,0 +1,17 @@ + + + + + Documentation by YARD 0.9.26 + + + + diff --git a/0.0.4/img/barplot.png b/0.0.4/img/barplot.png new file mode 100644 index 0000000000000000000000000000000000000000..b93caee91672fc3cf817619c8f16e727ca3842c8 GIT binary patch literal 17868 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 Vk_wT|gb#m7D=H`@PzY}5{(n1J4{QJc literal 0 HcmV?d00001 diff --git a/0.0.4/img/boxplot.png b/0.0.4/img/boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe4c11b412a6af45794036661a4492952b267d5 GIT binary patch literal 20279 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

    >S+qJh-lml9+>%eOZA-H%6oR8hmzO^_W# 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 literal 0 HcmV?d00001 diff --git a/0.0.4/img/histogram.png b/0.0.4/img/histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..499b486efc8354b6f08862077cdd90bf1089d2e4 GIT binary patch literal 51631 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 z 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 IJ0?&5FC)%i9{>OV literal 0 HcmV?d00001 diff --git a/0.0.4/img/scatterplot.png b/0.0.4/img/scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..a54672abb2e977e4b79172306d5dd091ffc31143 GIT binary patch literal 39042 zcmeFZWmuJ4*EWm@QX(zV-KC&NhjfP^oq~vzbeD?K9nv8o(%qq;G)PE?N_XcX-nm$U z?)%>R+3)im-;eLdw~u4vg6o>|nsdxC&N0S0#N~NW zZc}b1bDf71+iSf0wXW-(kgG!e2DEf^jqq^PHhq->@(w#G-!XYCv4yu+Zrrud#Vf-)sEoMbRryg`1E?mGLbbyBb*fZ6>HX%tByuSA)?px zDXY{my^UhY(M91MG>sk+7Qj(4I5XYng*1uxzb@e%7QX>Y!OBOFgLm|pON7~jaHNpb)2uO_vidQ~-l=_M+|FR?n zM;lJ9(f&Enb#J8&WLYoM4QytweSO3iN2~eh zvGIh9P~N-b2cMIm_Kl%WS>JCQpt=!}`p|uk*`P#Ck)+3pB$h@q_BTx7Q=)iJkBeV+ zRn?18yHQqX?J4Zy2%n`lJ*Bzy(ai9`*`wkkvdi`>L9{$Ao`at1{DSY zg)M~^!=x*>9Z+k0n|?G~6LQHU&;|R+G|f&2|CIm1IxYUZzY@ay(omOd^&);cIT>^SJzocfWBPmWBF zb{pX>JTC$xVmDeK8Z)Xg;w}O|A`W5zLOh}sYB%bSSCKx%uZABuKcMr;N0n1jQbA;V z*`BtRI;d2jlx3Hg=^d>Yvk~1I z$;E0dXQ&%aYf8};&K%0ebf}0LtsJuzHcD%+{7mSXlBW2m6pzNy`yJIqX96q&qFAn2 z(K0bPVMLKyVQOLfF+EXM5uRy6 zDz{aAmFZO%RMizDRd*CSmCTjg-is=-tNJVPqzx35rst*+zpquRdg%N}O!l)FjaG)( zY!Rc_H_dxuWsi1~2p@H+u;{M79S!BlwM-{{r zHVZ2=FJmv&ETt_IE1f8_E#ocITclrlwLm`Hvw`_y7g63s$5&&sXKv&{8I7DugDM^~e7%>}LolDbCLMYwyP zq`VA$*&yQ6^iaaN_ts+n{p(N(v8U@PGj zH5wKM7wQ&U3}>uVNp`e`x5mkN=D7FlwXy8MclqR(o$-zhTq$@dOLmFVOGw4dPh!1Ku_Slr(412 z$tA1asV^S9l|A}Xz3$0q!-y5A_GlfbY60qE74`j){NtLk6D0^zKu|ykStIFp;#<5= z-3yCE3#n_2mO@)ngOy!Og%@j@4Bl8p6GW?$QIJXrvMa6WPTH$%E_lDo!MlU^F3KUw zLRDE6@*z67C?truf_qYvMMp=y&W&=f`GhblE?9GRv^Ziof`Bf02ytN7)9T3mVV$VE z!AaIN`6khK3Xk<7q#iyjQL(i~8xNmkcVyfd_-YF2*U8h&yJtaZ;bYPmyTifefqZ7L zk~=msX`4B(>8Wy5^dWIn_v;mV^HueQz{P|G)HOnZb(i{zv9y{Ky47St)>fVOwe)U9 z2iTj+lNn_lBQf}{;jVK9qI$7Q=*#YQ_ZF7w1lH?6npqB6YCG0?luebNZJ~D%;akQ{ z@p*RaJes$d9wWIbesxul=ww{rDc`Vl%Z&U`=!oL}#_Jz4RD)D%Yok+j9zC;@tGz+* znjW7%-ft0Up<63i?-7u6+Bh=!(iA08L;9E$pAXAPc~51@bd~K{L#f;?1?_~=WMZc| z$VxA++0tx5c0<1WJbxA+TYOleY23Huy4&+y_je5Y0~TZ2*wp5>J#minmZFw&$UG|! z-SsJ+8XVo*-yMxltN3X}G)Yjuth1x(b|kQQ(ysgwX%i!eOipl*4T-fU*C_wzqYlAr z_odU7y~9n-pQD=W5go^rh>E^VN=k6Grf^=^*Wv7udsW?*<5n?(uAa!P9=Cnh7*?yN zFU()Ae|rZmPjcf&c04IuH+g;_7oxR-X!5}b+;HP}wzDSXch`4@Ou5Z0EbK|)w5hRa z;F|l>Hf|Uh7#(Mm2(=R~YlfMqiwY-yo$mErsq$PbJ%iKnZsbie)#nDmBFb|~4O=+4 zn>5h>uSh9VZ@|G_Ni*1N2?DFsl;$;tU_jGpi)i;Djm z4u0dOd}?R+oQI9g(b19Bk%QIB#)Rz-H#axiZFV+xb{234i>m_D~NwX!6K&TC+3WpBq%NeO+><$ths8atW(ev+l_uWf-1vO%w~-C@1Wb~!f~ z$_M=`kD{rQvAMdasfDqnEqI0i*IjnL^ZWnn%I_!sF;e6ANKQ_!KS%y?<=03)Hs}Wa z*bq!w=YIv_52CFIMc}vD%tRg&IE|72czx$ zM3rriW3Y?DRIRg=4^lZE8XE$p5ZsmDKh((m9<-I|U;X1x2$;_i=p!W&e%}N>k;{5L zV7UH@79N@03-02FP^##SKYj%l4B&C44ao0e{pA^`G&X-e5&;t#Cq)tUYO3GmM9?V} z>BFx6Ik}h6TR0!(TgY;MS%=pHKjObkj_?UA_LI<4%HPWZpKzsT{xUf^Caq8^?zIOv zf7xe>A|=va#NmDW3Tnn}%(%a-1I`DV`!ACtzd})@_woKJ`j=hNN4EZD^8Y6y>%`@9 zOIN&EaHyC$pBKg|cp7%RlV;0=p!98;$&Q_e3c8GDZEzBE%?Z$le`P9MnFuld6iBo6 zd5s_IC11YgJyXYL9E-LeHEfRBVzD3x1}1ASRM}aq%2r19^EeU(Cc48v#yITqm3<&x zKNPh)--B;Fko5R_ZY*%HDKh$_pT2F4?uaG5sNNXwpFKL&NIIfT>u-hVMNYWxRb}Nr zO;!0eJ%Ll=4HfZsqARF0Q`)GsFTigI68eyQw%P866B$&r06w|62W>bwiRU7AqZUe? zc^B|e1^ninf_yxmhqtwU#)=+mS@OlyX3&%+!{EedWOw%d)@Ih>)(^U5Zg={~2k)Pr z>lcC$*fSiy9|QE1J#d^3$gJ8&L&_`rd43#B&-n4amYx`;tA?xu?Z#JhG(2IB9_&&G zH)CDCxuv@(ZlDzAw$pZF2!@2Un(&Xb1jhwT&TmCS{ zV|wS2shsL`vp3=+t?q`;S$35Bjd+Yi+wbHa!}twTN-s?GiZLs}WHyuw*If zah#0J%Xrkalu=VN=0I_@`ccFZQu;`4=GAmaOx~ehD^h%U8{L>-jCl6$OzET8XwS#l z9-lTX^*GNZ8O$P-YG+R6axR%yDC7Gp)Q3+yZa7*cYTlcTttp6k_APweJ>!0^rcgL# z1I?a=ThFO$x!cyrdqm@-*HY4WYCbT&fS?O=f6Va82FzPz_<@ZsR5MWMtE{#&xT!Fj8wx-b*N0_Y8Y@ z+o#sx-s{sT4nur@ngYS=knEXG9a0+|>B*9S?yU9t{PecubE6^!*2+iTiwHFpa+U8^ z1>K<)Q)8IL{q=RMHEJeO7&+w?;=BsihsYHolw7 z$^P?0(pvt9n>?!glSz`3A9lC)rEGIC8gm(o6NWZhNa!4}j64lhj_`EpqdeH$##oKc zPCXk?r{svBPfZ~PHg5CW3GI9d#f?NIF>OZ6{Q(;>b??`Q*Kn)ePZRWI8b`eI@HZlJ zT-d-moS>QxIWm<#7;a&VT#*PHQpjHoTpoXc&)FE^c*AzG!cnd4YxdG6V$FX0YDgU= zl8iegF6TsOraRM*Wbxz9Dw2X3bkq!NlvAj&8BzftB2p6<1D{pU+)CEH#*e;s%(CvR zzTw^JSfZa#@{n$R(Z*W3@*-!a<21iNN+WS*=V2UAa;f>qrjKl5LmxvXC7$#iiy1#p z5~~hxX;@$>ZczXYEFXN8M36l~J`k zrKS`ynhhr^M^RyqrdUcpxEu>kX_KGnY{@VFm|ZE)n@N*5k$gGBQ@oQH^4a6K`eY(6 zJceZ2cje5T@n*JSv6U4cH-|{~v68K+<>Avt ze#B~LrB64%F0E#)WwMa$N4b4R)n zJ@n0)E$1OG!885=ioTpQANhk@c>Eq4WT!U;UfI?dE+)$4Dn#ATRA^*6VLZv!JfM?y z=sj3i&yN}%v~a0CxA_mOLa8eDBH~cj7l>bIwHjBlqoeVZKjr&Vh37TITKdaG!xVjx*3PHTdK`{J!x?6ai$bJ2g|<6HJB`{x^Akyj0ma*cfhV z;nl3EeUQEL@G#hc4|49fYtah{T9JUdt_|RjXS)1!&rtynv(WSU?xYFrYhtWZKY6F3uN5s-Hc`7y)@%iO<0mSy zS|=+KUV6_Rv`iHXf)k#)C(mO%*0c9`Rc=(fHeVX0hkhU>#WB+Z_C)z{YFChiu0y6d)?SjVob0Xh=}Zacq|3A>|L~D#TTVq5`9$iEX(OcmF0JJa zzKetRQ+$6sXCHiNyej)5%K20_AaeZ=a6aMLYDtygEW8$D!O z=9FqAs0kUQh>5CYvC<5|^>m-ZuCTBgZdkp$(jM?&FY2zP`+;#$!@kPaGjslD#|7_R zN8SxNG!YAFI4M#y1}=TVI>IcO9%GzOQh906VL!^;eC#lzQ@!+y%eZ4xXx5$*eH8L0 zRADedIFK=1$<7Eqr)Z|6D>9<6^Oq%+mXZo4nokHk!ROT4Zg}p|^M1x1((^;GX1My^ z+Fi$?Vn@MfI^Foiav4r}i$V3cVwPggNJJM`^d2V4o{+=-ml}8X*Q1dOwnVmFT&dkI{jW`o@C5 zsPieoE%5m(6Q(Xb36pXSvQzWXt1qWB={w7(^R_cD<;JAfd6pa&AD9m4oiQ9fqEHG` zYvGU&o6_y4`$-D!n&+%`kMhkW5T6q%j>oJDQY!FqIos(quYWq+SmfG%#9cdW{ z3xXin20zzEpvxb(#yx3to@W+O`_^tJ2MoD!Q%# zp?L{?1Hr|Ixt3n=*=rMiFN+~r1A}(h^}ALUSCOX-L!O6Dk>JOofN1~Pgd%~n_M>3= z)NRu+e)-p`MkH!^n#~3)lpUw6J*>-~-*S@m`LCx&CkzyNXVJ}z5f=`~*Z6X8HSw)X z-1|W0Ip7@0(>am5u<4rjv%fxZqekS-?AXgU2`xTZ)I;Io=t~+H6@^LY-7uud2S{T* zJ7;u`b-#XKA^<}n*QS~Cg}TX${K6V9MbV$>KAi{@B7fyM-sB)RLj1vaN8<8NP<6=x z>Y`o6P4LHPWCURlCnKx*asQbO326gY_OrdK?P5ac)a1xuO~RGZomjsg1Qdc1D1@4& z{JHDCSd%a&$kslo8V3JfCa`lgu>49JTlPQKg!}@m2{Rwt_Rq}7yAoBA{&Q4(1jWUK zU>+e%a8xgzN4=%`bNS7xVEOsu3D^Hz(+hI2rdK)5#D6B0FQYojoxj^Jx@sD z8D0DJ-wSl33)L*hcN3VWnd-`6$4OKC5E%FKF?}Sip7w*wqcvm(8+)w(S|LG5Dplp( z5sHm{K|U7U*5qr2jEU?ns``23EO$30>!MPtiBB^7?CxBof?IDqJr4Gf&Q6)P$&fI3 z57v>+PQEvgMV+m`ISCo&C9~pQI$HgLK1F6r()V^EbxZ3-F@L!&`wiB4S?XICSIAkR%5E@6?T4G9D4i}aFMgrQFBrgnJD0!YGJz9Sxx!riTS>XV80r@; zAd}pUc?)+TNALF_5D`m^ymA7K6)KoMxm{}T8MtzIMtG-*5h#}`R%p}3m@8L-vR|)V z$n=p-H5$dE)4f<%$`W{n>U|@GWa!Xi_&b+-X?z2&2-MQcGE{>Py}L$tFUB+i8>PX? zFaB{ynVujC?p4Tz1IQ(AQym5^!caE)}=gUGC4{s4)YB%{Xe3diPtVx9+^P3xFVFNDqv)kNkh`cFePm)!f^tFoo zC6Or^;T04T814(~)N%|8u0!&!*U!9oAJ{?u+ZuTgb>Ff}c{51l@R~y*xYC*&<>A(*ay!yC&u?8CAqe+M^T`+@gROta zxoVlE#XFGr;e(`w>3MpgB5jWbD^dBJOw&=DjcP%6xN?PqxkCE_ScsPb;`uPQxaWRx z(SxE2kpMFRX$jA9GcQcdW_$d5x8<0$C5cV!*b}I)yDcTOeAIjJAbZ|wE$T35GUiiS zn(v`Duz{@{CfD|frfZU#(l*Tkdqq^F2Q{?^$yLhQ+Iu6nL?BPvN*qr$gL59S(6&er zmxl9}(YnxZb3qZqm;Sc(pmHp`l@CN$T+^SA{h9B7JWV5cdA5YDp63axBj1UN#>R1S z#t}-(o1GJonX_+nOBgSGIy*t)NN>Uj>R{tiqvd-ZKTwKV&{yz*RL>>%skxcl&eP%B zP+y}+d3%3#f97*Sg>+nBhPzpnfxZ>Y3+ab@4enC;gsal8(hswcCtWc9?R^;@%51j?she5jEzmKm%2aU7I%(fQEMBP# znb;?-n#H%-PU)B^uLCrY$hCk6B4%k4-mfX32db9x{=NFj*t)=Yu}B}$K!k?|NyeVv zz484KsPmA;{#xyEw_Z`R$|K^g>97!C);G3@p1myo`LnGX&L&Ma=lLNIGcwqMP!`p; zn40&xITS2dou}7gc*>sfxbJBQj*qTZ^UhA7C-baw$Xn8`%Q|(AupVjwB7lHS)AJb+ z$KmZ8m&zmb9&G*HrjPQ1G3ywiphf-hPXz@otKo{SRjnO1DQRh&QLBaq;p*cpj5T47 zQ-_e9mE*@C4(-&ee#Ba3T3TZ@(t*)lWuag_3Nm|=yZ%I)IQ;&i*L^OGi(F9}=uOyz z>;bXh(!W+$L-_w0{bP1+2Xht8ksT(5i~*Q1Gk1FjR85Kyn~>rHjV^ z))4S|ib`hkq;>JzTI5{uo?b|`#Q4EiE@zjY*Rv*OJISOb(e`WBqb3(TP9}<^d-8e&)ulRE@YITYl%esCSm&T90fD_tenfV`oZ&oh>9IMqm;oq8=aQQf+&3|)`OqQ}XQsLju;)Ydb3UjwX?_nH=`h+FpIyuE+);7fi2nFr zOMuMlNpH(|;@!zweZy9JkQLTfZrmTbKX#*1O5kXR!(>WMP45~1ZoZH9{iEzqfe6y0 zL}u+e`BP4VxRNu8uK3n!DNoz-92d7%zqEm`;N*WAKz&vtmU@M0js5Zj?tV*qiK~4W zlS{%&s7mXnpWAUC#$xT+*!oPggkEHmM6l$?A=lZ*IdG$u7FqEtZDnR{@gWlw6FjB% z`(-stPc-)1IJ5ZKYeEvH>VvkYODvJhnmn*4OF!q#v<+qP)~p&X*LjB6Lzl6*Eoue; zR-)sLH85mvZ0}<>hmK5(nslXS{H7DN)@_#ObWtGAFGY;XV$-AvIPqln{D#!M*TYt)m{hktWV40W-~g$37S2j0@1gv9Vn1>?grGtX zKgqqi(|u0>dIr2NMGvijfwjwCe{*SI8!utIzN73m>AyeobLzNl_1Nr2 zUa~099^Dmlz23TaGsn9QMPx`x@fFI?v_eqMq_Xx51(j>3-XqO+Ax=$oBu$j$)b7P- zrP$JXq!XRY7E2<+sA;OCTz@F~<7sd~Jt{qw{**(7^|Ji@V9gB+ z%}D2D5~yQhfH^x-_F<3KmnVft5Y;23$7HATxQ9(R(}^d05t{=3}A|6Y2fY;0D!O648^CM*;`vQdqbMJ4F3`@yYC3Cc+Pk8pS{#7y8m>cpQO*BF=)*dhqO}8V=sc$ za%}SLT@yc}sZHM+s}mvx-xD1=h$>*#h2K@C-s^oQ*{lfNf$ZBN^-NavS?Rl7l2Lc= zZ#zB5e+A6*HWUhb7ap{odh|A&)<{|sx%t?Yc}&qC8{@O91rt6#Iat{bfvcFBI-V=( ztF;!XSVkP0pb3~d{Azk%K8LMC*F%w=D1*lW@{k@L?HsP$McLxn&zs? z?m@V9+HTgMXh<~1G&DgeZ_Mex*|t;rja588T5cxk$H@dI5p;!8P#KHkOM5ySgdb0p zoY`zuewGSK?})W%_E4ViUav19#i$o~!mPVG$!_9Uo!+4l4mr@Fa6YqH(_-J5q?>T3 zyJ!Ag-~pdi7f+FAYx&IXPcn)2vY1_ZQy$Mpy9c2k)4oD2HpKuLYO#33btVmgB!Y6B z7E=tS3~lT-`c~W-8m}P&zgL4REr=`KBK@Ss%Vo?(UF2oqIys)!{r4e+km5jhi)U3L z;|_9q&KsG@GRn%zk_{h7$=KC#34t}B-n|aZh9j{G&qzp5*LT?yhtIQPe5fa_R@5wY zsN*}Z31-$l@m}G5e%lar48!Es?smP+k+`@Ucqk)-0(~bb03TgJeUR7P@7Z2dPU!f55xQWtsYclRxF&L+3w0^6rk+ezF zM2W|sgGTJwFkOyp&E5J@RYqHlksXT->O1P>CTljacU@zNgokce7>PP4{59&4(paH* zl;^ibVOI@RnIyz7^Q@7v0fW^iT7TnOXd;S-MRGN9CPWtOpr*x#1}G(Q-L@`Uh>86( zIuVG^>G4Yl?fJ3VoWljpte;lz25?S0R$qvMc5b`m)RvT2ENq zy$>;t$m`IA^BF8K9mq7Fg$MpVs{cDZ&>`?FDCj;$ITsDday!x9DK!2%bz0LAfpoZ2 zT_d0sssy_I3mEaR&QbV-*4)GuZd`UJa(ouqjh=QSw0AH!Y(-T3*6cAzStOuyLH`(88+*#CwN#}R$%_#u2y)YQQiDz#2z63FbM95o5=+6AnUY!N^jaX>4<%zK7 z90(DgD>3HzE|fzPdanxu*VFG?1ija>M~^kg zKn87^8Ylnas{i{)aq;j1+#wThv>YT|Ub^(L<-8jZD0)3Vy$B^fo_p2^u^r1nE=TpP?AUsjCSo!4wCJfFCH;B)HG{}=HNT8vswxZD>*4e(ER zTnr0HrVpKXpviI^>=}2BO>qr-F9DHUl>97UqS$nd)ihF5LG!*9@fPVH@!Nl%$hodz zzJGP@=#^>0g|{g*adfutQE|eg4kY$Vsr)(_$&x^f0tt;{pzsoEL|hqLQZ=g(6Lsd|qj2%c{`|3VjA1Wxm0mWU}r+RuY}d&|ch zo=g*?A=31)B|YeG_oN$&TR4q)A`XZqBX1Orn;ip)IpdgdPtx1p#yj&>qJ08MShKAD z=@OFB2$Dk0^nF=VswURt)pDGoRHzS*^flkw778KjFim$$cG*l!0q(wl(gbi+tMJ^mF&*h69pkra z9G+596}wjd&x(Fqz%jK`yL51MijhM{JfzbBCSY0^#>Pf|CN=yPw?O(J3k_`MyN3Rk zw0m39mPuoR(9+mw!J9vF^{@wR>CAhWIRGFrd32x(+XL?-CdS@$Bx*W6=w>=zSie)Z zL7c7euKItABh{-#F-9w94@q9syxxm}h+k)qeK~wd9w7u%{0iaFtVYMCZRT1xAj#IB zJPs%0XW|4VW5GSAH&LySg2g6!vQO?7I1mNLXW@MoS zh4aHgE`=$2NK$%2FCd^Y_X_E>Inu;4$xy4P^#6Y^3PhqjOP?qryT>)?;n{NMb@-^tu|%0of7)45}H>TfBI|8n;J{{ElqPu7}Pc&Y1z`4?lp zDLqS8Z`$5G?=rayQv}oYKKf>;dlPEH1lsq@!D7LXjZ)h@!qHUDE~0>;=)BqG+(coy zxWDlr!gF&Fhd0W6jKmTmhl7XQAhxrtl9851Z8VRCdSFm|IycK#xsh>&zBSLH3{I;z+ipbld2mxJg|@CpLby6QmimK8V%?eDv> zGBaI=OcNUA?XoewR3(4LySUP{#zk+`0mQudx(Mxkak}aBc#l1n&#`Jukb_^9wAQ%r zUsQUT)1tz%E}jyocK4l;y6RRu{_agTJ`$)p%E8tYS9}+>2%0*5y^R3fAZ6&;XUmaN ziKtUIQ@>Bn@udn2a=I&Aq3=C2t^vyu* zS8(WAS&L6k9(LiE3_`=7Eisov6KsGIf}c7OE>Pkt%{dgMGb!W{2MvlAuwTD=X)eg3 zzih&(s%rvxsIIy+(O}@rFuCjwd}R~LR92>x+a+bfa$FsY>X{UoZe|(E0!?q+hiO&4 zLfwJ9qFGvtT388%mzRTgLRE)x--@y2TWC88)(HQ@@ z&NTOXR+GPFCthD2YO*+Q9eYcCzCk19o36g9W@)a-iL5}$yiB}5rBTKjxTlp`o7La7 zRM$JwbqXHHRhszU;>g6_unhZNS@w;Ozhe5>PT`ebdJj&a1%}W(UwrPbu3B^38XcVU za2YhXt;^ZSC9h>-VM2@X=SJcsgb0Ht#!v)WyKf+-M;Qvfb>TF;MPYt`hBDsGO&;Vv zk8Lt9>t_g>Fh&1rN^sH!=;H;MI{>KOGGEf^xmlC10CC3?d;xqUwzs5?ZS$G!7eee&xTVT`#+*d!Y5Obpp8pq3b{Z2$2j#@ z(uEAuK`hqtwi*!Kv<*dG`d@E#)bkYRGrJi)SNWhQ#`g^Uc3_Th-k^`651yPkIJDE*m!1S~9SkMfKpmFH}F#kf0l0Smq9tsRIUKgCbF~wC@ zr#(hDWI<;LGk&a*nQ2>)0+2;;+ye)ca^7J!Q`IpMYm%AO{<7lwugItfyVZ3bOXGM= z-SMC_a?oaC)^@^ylJmTff*mF&AON_R{X5(bMc};QP;hv6QjUS**e!ZV;S27R5*Vdbz<86C(rn`$>0>sLGE3!XC6+1 zXhxGE&(UUXXZgt_|6C#)16xA~;G7yFW6>`RB1Pg{tECiz#c8mCg5nWhyUbz%5qECZ zDs#&5b)Zra@2=`c3XMYlLeDk-#0`YD|02MA69eWVeuES^#sd@^S`Z2e>+e=~Z7m#V zGq9ctjQ---VljEn<11sBF}7@elYv7GVTo~hH%el?( ztjK^m(2s;!lai_1ihddGQ4v)Z64=Ohor{!U-|H`a;>tf|a)quv9t6A|apt4-5BrqE zjb|DsZKO-C_q6mw74j<#&C(fU-eCrSC>kDJ1d1NU2>y9&3_x+CMtW{QAs9xg|G$=$ zc_H2)5un5|VZnn`M6&lO&n!*qP*=(4!AUd^{7=~#XwPJgc*17eGgT%+L=ZO7|1bEk zS%qdimsVzZ_9%9d-NmTp$@5>MhF`uS1r{X1Cr0-s*8)YT$EBk5@@o4B7N@+88oI)3 zFp`cSVIb@Q$Oys=jmf~O6*as!rj&SUESRe7TaBYgf~TQ;jS%c!L>`uRg3iGD+!@3{ zzeNNhl+1fLm-ie6ss>?7BL5=uw~#&8EyHdt%QMzhtq%07uKz-0D5|J1@2xtLS&mRF zqAy7`a0SUre|fccO8J>ur=hq@Ungz=pQK>vcy-LA_?t&GRVH-+m6k+zqU(u%poq zWK;9-1wGo7R^57w-NmX;ssl-5SId9bOw$$F83Op50b9iXN**6-wk4M+ej2-&z4e{t z<-f#87iA>|W=5OfHW*+B|Bu2uM4n~70HdkXsef?^tTfdptzoFuGBrc7DV{$?J~j{@mWq=7Th zzocxC|4P~1g2l8(DuiUb>Un-1E3J!AV$uoU$$peFHmPEiKSi#C)~09U^j}Ct(1@z{ zB{-QjzI;8hG}4HGyRagmkNJO2HH8Sg4VPu4rKF^c_ew6i5dJ&w1;-5)2aE|&@iY4B z<~t}lA9tRP$c{3)}}O^ZuSA9a&I!tFos_R3~AUM&z!90=#A#Ybb|fm26yHCrO3b z8%}o0nk)dkAWUNR*tc$ToiA8pkhgNq(4O42uILgsN8Dgr&iUJEF31^@ir>mk9u04+ zHp#>^7-Fl?dlAHxU};@B?l^h|Wul|%2F2F_&nT{^@pD7caRfgQ0_P3xXtV%L5-1JcNB4h5JZ zKp_|5SBOs@d+a6+yur~(LKPHT&K-*|3}H}h9(~bY1McaX%JtuGHtEAykFZG!cyNhY zk`N3L!b1$kz1cp)-C_K4cc2FJZO(qsO{B@NTxASy{{g+>Hf$p=Vngo4mjNF_aO*0_ zrNiKVG`zEO7<**19NH0BO8yk;8=S6AW4!BtZ;$xe7jq1hK%6m#S8sVP+H#UzFPprC|y5OtHQL?;s( z`ba7-P3J4iZO^V-8hfV?EklDIj&+o|+d#cRvvOm|;kg;(cF5lNqb%VSf;joMPL{Su zXRZ78B{w8eAvDPw()!b}rCK;MqcnP%HF+6kP#&Fv=Sr^r#0IVf!0MG+Tqwir#$0IG z@31^r!=S9LGSkUkqlRCV*1|22bmw6}W@8p_3|GY@9v+$X>($904vTJITAwDp0F=N7 zFS2a~sG2OkH+?z>dTJ&*bEF12F@T`Y+M5*wR^3vUiPVxDp=dWd@ zO1!4F&gYQY78Hx}mHXTBr82#9nyZQI!Z*iZNA71S!E4+m=v}~2SE9)pU zLv4}u6G@Q~ecd0%^`p2Ld*=(9Bj36BE^bQTJ#5oI?*f#@zN={f2*zKHT#A~%suIeJ zI_51(DV3G2TLm{;I9?}#(HMzx$6A>!WS-V%NlH+KYHQ$*35^APJg@X^lrPY-5$-(7 zrnwqkK}i8pI{#Z=K?mWln53}=7Rv7v-%bPR?fsuWv8X{MNACOAA5`q1dk@;C4G4?; zwTaJ1`LcPHiOD$7O?$w~gj)}z5A|7r0wa~mf|3a?%0(7KwKSR<6xh19_%AWs!MG2* zZLem9XHKUb0YCfLza%{b0fVhfRnC@Yx$>(r)mtOF(`t0%ci|J0>-D(^`|hyTnp%bYa$G2oSy!uYvm?9v zL0(Q5%oNZ*SmdqZO?^8xXD~!wuF|3TvfrHgSML2+z5*6j{-e!N`S`FqciW8UgH|i> z!e-S6@XlVg)|e4CbcHWrZtJ@Il4L4~^fVhy#l ze@c@;DjUVH{iqUwz?5OD^*zPE$h^}X!tZ=%o~6PwW-o8{wRhdWgyr;%j5i^BH5e5u zp*z=h(?MM_+uacTf6n2-a)GNCh4F>{&x_1wjl^FX&_iYYiFAO8tyh#A-iM03Pwl$~|X9#^Y4nb!U-8Po@XUxUa$bu>EeT;)97I%eSTsd9&3W^PoUzhxYu$UT>;h6c)|Knk%{mf?UF_ z4H*Q_*yMluuLS;I{tM-;l%f3LVmA%&1Y(~h5>V{cpV!z4JT@|K+}x;0o-XQ=-YSaq-mh$pyF;Eq zOxUUCg;=rTMz4B+B3?2QpezOpC&sL0tMkA9m?TwaMwDZ-v#i_8rp`9X%6Ek^yiHSOrWK^8=t)ZhgEt}8Oay!4^$zr zE#VG9a=dB+&0-2+3zuBSyaLi&Y-(ufKgA!uKwgWwfBR9*yHe8;(KUj}sei$`zb|+= z2_!*Z`|zTLVY-|Kp^rMWarEgec<^X?s$YeT>`o5{s38Bo*!xSuG_Zv-hFy=t0J;@d zKu~lUL;Jz%8PZ0N4mZZZ(YzUuMFBN&=Kn5TQ?}VZL*$~&1f+>B2%||Oeay(B0dJWu zJP~d4L&H%rFV0jKLu~{Wtr%B75}*fla%Zey=sPLxs23h%YT-|hQ3oF|<*vOod6+}= zeUYUgvZF>|tz2##c9j3+fG^4)q(gsHy1jJ0tC-fK@RnPuu7G#g*oOAn?8j&=&-v`w zw_UT%x%YZIP+}{9LV2TJW>O&?zcVSgD|MHt)V1N%-JT4!EXYK;AJMsG(>}4~z5_tj z=D{2b^n^eCLq*&L!~t-Cc1{vf+Qb4alL@;d8Q=QI4~;-Th^~C{isvI5wLiys*~#B9 z{OK)evoy0xPH0&QW(o&N=P5;7$VhY}_eBY%`}!|eL=V1W41|sscY8qF;z0e%b?&pX z$3?lk`)I4~e%n3w>K5l~3D6qFFP9<-3*&^_KXG-cE=y!tr%dBsO!W_aOuq(ypoCEq zQMrmvxd2X_vXOyyVACstuSB_7xBYf^AV*cXK>lIX_m+kj9y(6{vB2|SuiX#SGBJNe zkCF`sa>}6Qr4Y&iYF;SNT*~HIe^TGsC;Xo`UDA5UDuke4fbfru^pDXu#%->iwjz0Y z6&csh79UiQEC-1u3l47H5dgzrjTsE;&bPKlK-BZL$r>Koq^aN4GCkX1HMRID<-JUA}73({1rV*f&wUD)SDzl!TeEGVImhw`0=yuO>9!Of) zEU$qWaU6bD6d(mM3@L=t^^R#l4RD&SHTIXN;jWaxY^}3>`muPQSJ~~E0iHiW-@DD@R;E}BdI*^HR!3Ic?q^$7WM#}s;Wx9$_VX`Iw=U2V(KqSlPV3e8O7eF-l!*XU-W{iP-ko_#N5nlnLv=O%^ zokedp@DB2uXiA$^t!-67MVSdspgs`v0^-3sr9Y^XzF!BG>~DHp@SJY#$xYAo}cBODvb-MW%&rz+mB6{Am(IvOw8HXMC67(#Jx!xj!_{Wv3_IK zo|H(p!7?Cp|6T9xljGjoM%TfRVAw=})BKB_Jwn?2n=S$7sO z+BUJ`Ud0I(RC=w$simCzB5ek5$MY12q+xL$!{zk$nf}>6TkqL14UebvDZlPfkAE(i z4B7nt>KPIo+}YVG&CmB2UvaZKftJu^e|oUFU+VMe){|Q{Bx1^v_!Y>eVd#Dq4@}io zrGq$&$}-A>lKNM1j5tDowD96E;xtS54q{M@Ran#VsS--u|Osgjwk=&7~bog_WvUG&^W zpD&FqdY;j#RsXS8x5gzc(D{ACw|%7IXJ1rKO%ZX;c+*FGb*xsb_9Ea?d zm`|4!&m|Yc7R-M@37Sb-lkr%B82{{~wK;CF>Ri^*3JS|1OgMs2IQ6dTofQR7E%!LO zo)&sI0^tnmc@}k(ZR5Mvi__1yxb+iH1-?_XIVKge_fDlg(wjHwc##|Q#63v)S$o7w z7cFLwdQ}EyrR>1z7Ee zcc$*P+-Ha+ZV>C$(Wm$Gm|3_J%jFK<>i3ik$Nou^XQftEDsNx%eIWM-_hsCCH2X>>m~5>3zGXGk&Q9~M zxAob3qPlhIk(YhYC2~5s$Gu*=-L-6ab`)ZNtm|1nw*6+e2GZbJbb1tEfBLqeb^G1} zZo#?uxdU3C@aYQrYP9Qgy)UQu{R0BfTvN{H>UOar_lhf-FG%7rVdm6B~n5KcbPNJ|o+2WFQ@!V6hcgWUF{zt|E&y*)ta*EO?d zNsw7k_ha{gnsk|t z-v5g+8;1(*)fN%(g6~R|J~Zo5<`uXJwQDOI!y|KnXy6be`hFuf zo9=-`|5o@Glyy80jD^Zzn_enK=dU!t$!u?SoY%mSxW2+dg|v@$LfZ+u4SMeez&)sZ zOq7RpQzH6e+EaQ9v|eWMpQMbBmSLW`ni!tDnB61BoV^wP0Oz^-vq)+Ll6gK`J4!6R%2Z@wv%wn=u1jchZbbY-7W znq=Su&vVwr&z5DLe2ZerY)#Qpdn*vshv!@7nVT$V zw)rd;@{#AIHa~;#7Ys7}qw_Kl8%$rE83HVzl_`r?-Iy^b=0`@=$B$R1pL`2i-i;(( z)xG0Rm;t^i^h{k)(027vZ1`!auw{R4D&N>h(uDucNk3v^gkVDX4( z(|+Hdm+Ib=Dn8p7ZR~kH5V0J8D&HQJJyT3SUNe3!BY|YS7gh~pn~PVZ@|FKjdtV(@ zRoCsU2nr$siXtKc0!kkNB_tmtB$Sjcl@O4YIHZVxigYU}p>%gkNTZ}k9cd(`4sn2Q zZ8q^d@2mH{-yh!?-x&A$2aW;f?7h~UbIttCxg_kZji|>E%+rGedSie_LU`D@QJ_&y z(vRfg2LOHWb`X_5ICN*>zeV_Io>p_~7O^E_lR7{PD8hS6lI#dL5qI;e6l*m_1fw~| zGb7cfTTOB5AFOqbn3&`fj+x95e zp-X)Tj?mT644=6yXU>lXB|Wrb!{qPJBU7U(^MsJHu~=DyJN-06jbRN_mew zQoI6l+POlhXqWN#_ZPRbSM>c?jOm&_<|_V?@h|B8^7KkmF^}Je2M2wTotup^{Fi6# zl+hXM-qZI{)lC}}A>+-h_#@kdN!Dh*Fixl03hYQ2>u-+xN=`F%2$xE&RX^IoEGV}& z-@&c1-zk_Kq_mqJ&}dj%Pc@e>$@RZXk>M@!xF3og%_HH%HZ7m^loSLgQpznQwmUy3 zO?muERL?MW`m1%Nd)*QNv|D+G)H&*^GQU%W@Ts43@=Q>BNN1>0Am*C)6=LRZgzDf} zVt*pq)vPCJ$Zp6$fgk#BB}#z!fs|k^d&;FX0PdUoy;J1&|tp)=!ax@fuq~27@HLlvLzx)LQ|o~;Iw~$rIjzZ zuJ#1*oV|P_h#@85;pSMwUuAcrA><{B4%Q9`y)17C4C?)b3<86G zJI`&o93~whplvfRNGpN&E1THuft3I1WLaO0HHI^|2GJK2y7^_ni)?B00=*?-}e=%Tj91E zN>46dJ7LKs5&W8={m0MGqwg&x(tW*-5M|OVjJyhD2bu?On>FF51fHdM59b-}A6Ix4 z$e`Y~k7swuC?A?khkplTqov(@-SJW}lcEjZ7fX>-uY>yH9r{Qin!Lqn=djXU4Y+x= zCclNe0oB=>CyvU`s5nsn%+RZgln|icl!Io2>)(n0V+M#k3_?o z7kr-a;w(A}s9sp}X-_XZks#L9*q&3JC!hX=%=UP7GK5Mv0}F8Qb++8Q0J-sf^_AU$ zx%&#@SyKf?y!d92vEDZ`) z*)#}z4+bd^nHR&P?BGB&PIqjiboh`eO53D0iCu|)p4f$R> zTtRUk&6wB;uMnSlTemXy<7ff5X|xIvbfO91^*q+~^@;*bk5Z5DAqh>%FV{8IEPD9* zRI#=Du1GxVS#s$f?qWx~S?hbHT%)UB`*BSA4=3>U_d2KXFhnOlLKUiW{Jp+eRe;y z+Ovs)k9<^K0h@@;>IE|hu#g0nC2?KsqFg5fS@HRL{Sd z_9i@n^@LSL{>cRDEz^*z1V2B%^ahaUBd)SIyGC5N1$%4+sIo;9n$ion%zZb+x*aje zNK5Y;eM{SdQym{-)phpl-PQVyyZ}8#wd6nAC?Z@5D&r3PWBdE~JC+S6 z&)b=PH*IR2hF33e%-DsFoAz7U2{&z{R4*bF_IJywc4Zy%T>k z!)Zx8VI|m*dcdt}?%cP02NzVDtrcC{M9%X&v+ZK`PfNSYj%HZ`g2iCN=Ya0cNpA(P zow~9siQn)6Q3@{A4>04M`*|nLsHfKXuT-jJtP>U7S4z+nAx5u);~xxMlyl-Fgp$7z zd#+MEvsERSMqYgEu__ke>~8ie2BiFfQzxNU>_Hg>`~>Y6;rrY@f+Y&8_j7sEmmNW^ z)WMty57ciZRjJnUOEet_Rn5wb2R~{t2zvKHCaM*VJSY;UHuFqPoB~Y7+v{)fVvK}oiau^Yi@-d==C#_vffi#Ej^Gam$vK5^(^F14|gni@jpLmYQ)Kf5-Kd7|o<_mwY3PVz3& zQr7Gb=jmw=!TQ{0HM_yO*{BX`Bx!`HGazbK%ik+7-A3~g^M#{aCol2XOJBVgjVM7= z2E@OxlbG(i&zhz%;2oQ(53#dmkDd1jG`T>|rPwA(=Z15I%l{6!O?c({q*8$Zf zu>_;I8FJ2NgrMf-lcR#DY@eE(T~n>{dcXYiGGrsUK@Je|^Hq`Om%2brHLN-tWMXCM z{G!5Xazazt*z!yU?;QVN!}(`f2f06W9T0k}29@=`$fG! z%<{-V;22al1brt^fC>6eu%NyZ+%M+%;A^{v<%lb&kw9Ml$=)Xj?TefblBFGOqeQPi z)G;IDDU1%~d3k{96NlfX7(cYfib1$LkHQ^{Pq}_qa7BbG4nBm9@74KEs4pM*2%u<`-Oq{-f_tmx8eUmiU zM2`;?e}X&_p((s(wNkZl=gd~V7<>8WZzu&S|KOnvSl{M!TJ(WpJXh<@v^=hRMfdG< zoqDY;GIg-~>HUgqQluqzzA%^F&GA?i8cP3@vz1OhjGkyHo( zm!|8ft$I#u9{23`#*B@m8^AGfgH(1!JE_Q#9xXM9(E`G*Ltp^z&`OX(Dj2jRB_*{@r`CY*hn@JlE^(5~z!$7j zbYClY^0oC@XA#;I1CO?zNVnN!NH*5a-gcmh(_})eY@zKj>392aS@_WP1?>8k#h045 zzB2}SESIRhz47sEY>5>)B<-45u@RI5BxLRZ?`)V(8WYfc4c&|6Qj-rH&Mz$R^NMpy z)+Y5?)#&CC>So8gGlH4p+U57Xd{^04UsKCiS<4Pn(FbXS;S`g+bBv>9XBP02LM0 z8Oi5g{Iq=P*QShUe~JSB)Y6iY7G5+rHGQ_^s!&N3>@`7vQBn zpmiH(fSR?V4m^J&LvsRSTQ~!tc{$ zh4&AzR0Dk%qq=YFUZ_+kWxtV>y7?#5c;_Y7bbbY0__X+2)fVzWI!!en$c#QduM$=! zG1ySgPHpoa%pZsq9k&CsP5a_2+vrV#7=MM{nP#H&V<%O_{l$7pyfP9CDG<$k%2C{~ zXV6VP&PZ>n_lFvTa{e1$w+CH-6GC{fdn_4t;d>&;*P3jK@a;3`nZlkwAMoI`>gP;6 z1-;>trPQuB7rv>Bot~TU3(f*Hn|%lW8tmWmu=PDGOq7_C()%*mlXgzpVdJl&9QDl$ z=^o;TNoj648`UrsPCB+?xYcbKM23Vqe0NV8iVRk~ZSk39Lf{mZO_Cjs$|6dJb0r_c zV;n&nf^xYD8y=#~Ryeyr8rSjX!0{x-*!+I;E*kkCpN!a4@d-t#zGLm@LCMxSOOk^} z##UL==wctPKSsDsK!KhQ9Ozk!*z*_=g9x7Ilf9DV_`IBvY)Q`Y+;vr%XClvqh_MW| zFDDpZ>ff;g@rpI3YwscItp``kk*VI!qUl}x&TcYB)R72Fse?*!J~P4+}Y%u za~DLzAUtve%XO=-j7XPW`z7HmwFY)Zmaadz z9Ff#uq0dZQ(IKh+JmEb0j{hkU35j+e*57SWL?^3By!dBhlQsh?un(v`1PYcwdk7WO z9&+@eDU=u|A>v-ECGIVo&s3C3r6ri|reC;70qNl1`?~M}q5@q!kdJm9Os*gS?aauw zLtsACO#*UE^2|Anu5F-nd^%oV0#MQNpB9GI*JBK#(+}9=a0l(o2Ed~ZekTeBE)j9K zdiSl?<9Be>%nRndfP(ty=z`b1_IB67M*dyfwgiCn)`CHY=|RXQt}t99Wtkv0!e75o z$6o-3+kq)fP)ML)sNt9iawBW?WYEUHk?zM$(vO4W6{0S6_WcK5(1`ms)J!eup|@`b z1Q8(&ok|)Ltdskq+JpeTpav-@wFVlbgrEi~tQ-9hJcnCqKO)LWw*q*{-=*LV1eORF zw%ZJEbieR{Q7p!T91jlwP+-~$R5Jk6RxD9DK+_ycQU%k13RO^_&tB65X_+$^P06mn zGowD~CbZ?BL|J`aCj3_fUT(e=UZ(4fbpB6f13EAHIEe=xT#NTZb`H#U8uZedvkBs^wWvh$v%L(j{ zm#3A!bwoMK&dqcW8e`WSOc13adJYRQt^~?GR;|MNr+XQV*uMFoIuE-7S@l;>2!bIW zykQXu2Pmra^Sdvxv{n;y{$(n;441zCIz4LYCwb1Oi9nhE$~o55^GK382m~5IZO)F6 z8E0Wz<)I;ro@I1Q{8&{}QX z$zdWevJDxexcY84G>yr{ZpH9R_S{HE5E2$9}QfUzko5 z(au6fq<-HB=nZZ>r=a^KjR{WR$*N&NL3I&jDn~&E2&+dt39s+F0sT*%Pw8oci$K0E zR;qB(Z6wMhHVJkMnA#-#P2&Sbu(&qosq0B@c#g0BtJ43MM-&f5U*qY!*05b|d`ysB zRwmtSgO@=$G2n#FD=oJ67=*p$wGadcKEJYAG-Y&4 zZ<^qLp3VocOG9g!CoRuHcgeW7yvAjMCMeGQM7n!OP6}RAY=wqcaCyZ5zUqTH6|??$ zW(F^JKAc-F&T?O#>SxrS{!s<7h#5Ah55w=Db_8wdwp2HzfLB8bP<(J?apj{Xzg!(( z&1W}qB9O*JfzgH#%s?i=;#U>0+QT#k(C`i&ZPWlxFS|>v7{`xA5Lwjx_acjOj-d^^ zh4>e*|Jx-b=Zc#D7jea&rGt`SF50DPt24aJU1!hIu8ecaC;j(z{`Lwe3T-7t?g!Q| zss62eW_Rt8J9G2kle(UN#^HbX_MlJHYre1hXfRLfP9P&C*!rp z!9|_EC9=J#WDpbtOeG`Uol5r1Lml?qfH}e?fjv9LdVPoW_B~gh`8hFq+20?%vci7i zaBvMS2^_*IHrF}Kjuo_r);q-wWqyjKn7)DA5`=Xbv!uyHeC&23C%%NUt)TzA`*gcfO{AtOuf<3v9c#cn~psi2%6lFyEF}9Kff1tRTAjTf$v|OXyJskt7J)7;huv` z7`IyG-HFe#R160y`*q8RZdZ3`bGl-B*cCTZ%?G>rN!Ru>VITx;-qMLIasojpnV{pd z{UQP?ap@8LrZB8xiy6Lh?dQKVf2s3!aE~cXeO=WfoH+yZE*R6s-eVffFh%)RFW0bJ z_VQ%kfmge`52wR@09QY?Pe5YTDT)SU{~K5Cx?CG;R9viNB?fi>8nxg1`j5((qo6^9 zH6pwFdbVeZK&9F>jRr~?LVf^b7IxF7Y!cTd1QdZ)R*nchu*!3LR@qid%y9*HXT!4n zkY|C5d+6@lLE;q!r>hsANRnPI1RX?t-vcza{!z=31GOAR2GRmV@7-{KfJpy+Ij8X9 zEb|%gf|p>-6yyxYbJUKZLDZFy#nQy-?SGT9!pKzfFbIDJkjvp-N)4M$-S3V}_eh4w z87BS7Wuhi*_|C4S{IQJIg;xeVFEI zF&VjmbC5GhymtnKEFTxU z1M;NtZ@@qWo&|@9-C|B~_oG5Ew1rz1g(4N#MVD90vt$L_NL8TyANB}6f!5DLQq!W`7{Q=QB*|v zLJKCgC99XS2km=G<;pVWt09r7oP{4{+SZJl0cHn^hrQ|pkmJud;C>PsgmfEG#SV$c zUeyMv;l2Qx*;3$dXthjQ)qo^U8!>Arl)TEs)@RmWSPC(_Ze{$xamD|}75_iP6+nY6 z%J+j=7^TdAh#%1Gc)$og^Mt)7zKBkDchCxh?-gte9m2xDCy36>&4xkKrwhTHr1h^$ z?(!3x(II-|0-(fJLq8+a%T8KvW;V?%)88Qu5UTj(4_hcOGupb1J9@8&<^_$LE2APu zy+6+fMn~EXs%GFIu%k5t*4+nhG<$(%N}o=Il(75B{hU&%(!b}F?8{}7J7&2SqY>qd zoT2I(Uxh*{Rty-ds@8Gpw$YxH3G*X}`qFbdn}qtVM+L2mhs-0J?QFt=@JY1RcY>Ze zZ##&-2Pc;1K{Y=x2Cf}gd)X%$+l1d$WaMLHZ}~ZhsA*Uv_1kGGBq{JWG)^Nb)|Cb$ za#U6?H{L`FTv^ae0ItN%EghOQUeD*z6fPSwDOU+v#EmL)bc#}YHyWlwbunMG8*XnE zzjMx%YhTAPJ?{z<-oAUm>6_oza^ChFVqlgXV{@H1O_NmfUU%L}c2p8LQPF3$l|dQE z!Yi1kh3~9vxYEgnQ+M;O)1B=igJ|nCL$~69n})fHg&!ljAShn@+~DW2xX5VLEha<~ zjk><{%Sj9tmzNNjT_FDN?$YGCaFSmctGVF@MsG1iuu=jLJlQZ?)Ebsgo`n0^r5F5G^;JHZu-yki~ zu$e2r%bL1A_x_w^Par}Kf#V`DwHeGI9lJcykTaUZr61N)jzO6K=x$Yk7IpFU$ zO$xoUsE=ItcSy65n3!-8i~kO`A}`Pn4gSYHIeK|rsZRP{s9TY?x_i5yGnZ80aqCJb zJ;MhlUxE;kwsXAn*N)Z7Ex28>aV*x>ipmla7%b~~V`o*PQ#8^2PI_lmkPk7hm!7`? zuI6Bv=SRPEv|q4VciBO^YM58GjrI)iO0*c=k8h(Hq1~#!*od9>hcJ{qHbXTS2uauqcVOco*>O+_wP0n;W2-eEC-TIR?|W%y%ETskgsFbpJ#f^O&8)E#NvTp`+JmuFT^)~xNJ5(5 z9iRpL6guk%5ZKR8d*7)jQe@(ht2;ew_K(UoSi+{@j{MK<;R5&Zrwi4ji5P~v7e92e zF4&I<5H?l_Z2DTyR`EJh-v#$#IEa_2=`_zwI3t)iO#?&qn+wvll?oD{yxR)sVx7WZ z5x$m%B=@CfALNOJROSzC9y2R@XY8zs+;c-FcU?3Xq_x2i>AQtKLALRUgvVkre$;s@ z&G8KVGn-jn-2nb_jOgO_i_h_zOLgOFfqj$#COZNvUr~lh1EU-I-l^IG#>cTQR>^#N zS7GT^%5LRq&7<2*PJY2Wy z_FBwYYR%b*oZF0J?pu&aaq28eZI91)i;&z zjFZzqY*FWWwIB$p*)PHiDF9mldBBfK8OUKtM+DjPVN#phHiig0&j)9%3*L$SXtA!n zsWYIoz7Fmr2t8l15%kpPYv)h269#8}Gay*0M11pnz&0lC42FB*O{IO~34yDa#E=%+ zHUHr<58q&PXtX`T!Du3XagO6Q4f_x?<8uO#F#hX`>0xQZPX;m;EAH|OCH$V{d;w-D ztplapNv{=CS^ICk-#i}F;kxC@Qj=F>c}(-eZWn3=CPL$$B)mWb( zVEjB$p8VK5qdV?dBZE;)E_TRbYyPzcyJ$o>W0g#C)6T@SnXg3NJ7+y-lx?$L$te1m zX`TmUGbTimA)7H)?F8A3n94d6hf((_vSD=e;vRmL$s7tTWZ=5VxxiL+Tc@kaD^B0u z*iXOO)YECZr?jITP2pGP@8UAh_8KEyAz z+@<*j5HrNI!%Bd4&)}@Z&QROu?(``7N0*03sw4oyWFZmg(YO!z38*&Gty#)m_EZ-_ zL-MsPF@tTq^Xvr#lxNq*ay|%P@vUt{p@;m6ZzjKudwM*|-dLwEg*9}{EOLWF@`IUd`}&9Zvq>&cdTQOA5{jGX7kbuvv#E^Z zs(zCPUw#_9+&tR5_?c^4f6SuHD@Ed6qBrfDg!RzQ!fn(@6=D6SVDc9A@#k))rdD~n zrQGj@24$MoWRDAMy)Lq`=wckFsmb9q2}B{X`L_%j6$~xW;6fhTG?&n)&aUr7V*ucM z4|sc&#{BoaFiW@oj=d2)Cs|8pmHAAKd@a+1(ExKQKycys%8#=j8bIsAIi%ME+tr{f z!a+Jvz`>~t{@0fPbnkN)&**jZhN@d3bd2bsOcdB;P#Lo1O=JkD*lsJ7Z*JSgGF-x# zd;G9n38GG_@LMDeVR3;r2F%P?6IW9QDx+0Pp6K7sY{32hoXxgg$e_#4s# zI>EUorQ1}fy|TI9E&Tjvuq#AAAJWenlz{(;HXS;<`DnHHK zUA!k2f|sGtbd^0*xk`ISM=Ktx>(G5itnG@hG<@^RiSd$@zDK5&!@&??ZfW?;nvm zTo3y;9y}7|EYViw>MOC+uh!FS;3*OP?mM@sH#07H5wv#@n(|=HGpn%L3a$j?#dugF zLS}QcZCZyVGtYnvicy9U7hP@(@~jR~jwX9BWN$}WVCsv6sO8mT? zJ<_oippx|7vHYnK_Wb1%bvgRl)Mt9817rBy2*4H~b*z8>=sp$?(gf!M1TcM z#Q(tAr{)n?D{wVq4^Xa9xJDxRqmixc7gqJPd%+n#&dQ^= z3g$4<0A{5=8uni6R4aOYt3CBW*?W)3rJLg;;@b-=)kBn+EoAG?9g<&IyY~}f&@`AG zXY7hxa1FU()S*O03;&);NtGl|LF_;obj}6`*!M1r+Y>MJ9H1 z*schlOTjj1K2~6!ZseqY)K(XG%ky;^-xz~l^KG}S!DlzCy|rZ7FO!C$Q$Ula2a?56 zhFIz~g<0%&#ldIs6DbO#luO|*|5c#W=r-z`i;Lg8ITuMwfk9QB+(=-0yS-$7eA!wZCZ3#PaWY_Fkfdz32aATF~XI3wxs^clti+Yob5d>$e0UEZEa=+ z_~&h>%7Fp$SCa@E^7%JYi=faVRif>VyH}&?)_l1j>+Bo_HRUX(^QShk9n+9F=U}4& z!8qmN*4WEByO9mx} z6=^vp{;8>T@YD%%ubw9%?>yfe2E=fR6@K=MtCj05QKY+?E%G)hyRTihM@BG|#IZ@E zWIVJf#$Yg0j8vI^3)#+${E6U5&C+A#*4_(u}|(INTMzIqzk&Cu%-g;XYX(?WpVKA4uS~GQd_7tx=_yOzEqHa@0-A7!XA|ods`zG7fO!Omt6}0u(1CY3-FfLXHQ}% z(a53srX7an+BO|*EK%GS^7Phgvu6YHraEn3J9lk~;W;O3wxpx$e?<@KD;GUP_Ewk& z@LgYJ3BNUeY&xl`V3oyTsZBKXS?Hnm5hezbSa{xD{s*fDfdW+!BDc=za*&JDD&@2U z;ovWPJm;SSWpP?83!}YlTUts_`mZ8d!pt-)Qcdsna&9JIJ(@f?C%7*VmFsEdyeAVr zX%=2g6r$IDeAkrF@y1$(jMEJ}H6yN~a#fnC%{6?SsM3XmYkJ#_1dEN$INd9C40(Ff zLtfi-`8cLRP(J+&rrZ5(h?IvDto9yy zOD@D@?SpkiiSyUL2JJ8cMe(1VEGL^X(u`M(uQvJcWYqK1Xy*ygUa`yC4-{>=r_MLI@qD*Y2{slUR6E?La`uG>>S@s!OmjWttb@$juzHI4FJz0W=WU zQ=A;Ur>gnEOB;(X)9euUlCN|nD>7O>0Ytm~S%yu};c3fQ=$+QSwsZFLO16TG)A_U6 zTKL<{9WNdn!>9NR-4wLv2YlIGzZh6QzH&7Q?ijvFf1lMDAws4g>ggcTVsSknNuH-% z*!7yr)+}3+O-BYT=srpJC9@30I9I0O)O|TLFu2-4kNmJ9k#sLHzbWl1TmEHxrT3^| zzrjmn`x^t#285Z>qm8P%nS>PDm8@Um-&fIEAs*JOaD%{}wxl}?2^1wPP=8gZey;y&u(!cNNt0ShpM z?yWLvBRq01pgOna(@8cIaLbCy>5xrVAT~8T(gGv$NN#*0zQAGa!}sfZNq!<{s>1F3 z7U!ZbSyhBKcE8NX#!YNKoVX7fyM0eh(h&~zjx5t{A6|mIyYbZp`k)yeHbzOTs)D&$ z5CqY#MJ9q6Cba>$_c=X5fF|zVyW!Q&TNP>O;08W*AT-~JuW`P~bvH&OA w-U07$AP{)XCt`55xVZQK67v6wkPACUHJvOg?7hq9j(~p>qW477g>|0)A3gcc2mk;8 literal 0 HcmV?d00001 diff --git a/0.0.4/index.html b/0.0.4/index.html new file mode 100644 index 0000000..551b2e3 --- /dev/null +++ b/0.0.4/index.html @@ -0,0 +1,160 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + +

    + +
    + + +

    UnicodePlot - Plot your data by Unicode characters

    + +

    UnicodePlot provides the feature to make charts with Unicode characters.

    + +

    Install

    + +
    $ gem install unicode_plot
    +
    + +

    Usage

    + +
    require 'unicode_plot'
    +
    +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
    +y_sin = x.map {|xi| Math.sin(xi) }
    +y_cos = x.map {|xi| Math.cos(xi) }
    +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
    +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
    +plot.render($stdout)
    +puts
    +
    + +

    You can get the results below by running the above script:

    + +

    + +

    Supported charts

    + +

    barplot

    + +
    plot = UnicodePlot.barplot(data: {'foo': 20, 'bar': 50}, title: "Bar")
    +plot.render($stdout)
    +
    + +

    + +

    boxplot

    + +
    plot = UnicodePlot.boxplot(data: {foo: [1, 3, 5], bar: [3, 5, 7]}, title: "Box")
    +plot.render($stdout)
    +
    + +

    + +

    densityplot

    + +
    x = Array.new(500) { 20*rand - 10 } + Array.new(500) { 6*rand - 3 }
    +y = Array.new(1000) { 30*rand - 10 }
    +plot = UnicodePlot.densityplot(x, y, title: "Density")
    +plot.render($stdout)
    +
    + +

    + +

    histogram

    + +
    x = Array.new(100) { rand(10) } + Array.new(100) { rand(30) + 10 }
    +plot = UnicodePlot.histogram(x, title: "Histogram")
    +plot.render($stdout)
    +
    + +

    + +

    lineplot

    + +

    See Usage section above.

    + +

    scatterplot

    + +
    x = Array.new(50) { rand(20) - 10 }
    +y = x.map {|xx| xx*rand(30) - 10 }
    +plot = UnicodePlot.scatterplot(x, y, title: "Scatter")
    +plot.render($stdout)
    +
    + +

    + +

    Acknowledgement

    + +

    This library is strongly inspired by UnicodePlot.jl.

    + +

    License

    + +

    MIT License

    + +

    Author

    + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.4/js/app.js b/0.0.4/js/app.js new file mode 100644 index 0000000..8d067fe --- /dev/null +++ b/0.0.4/js/app.js @@ -0,0 +1,314 @@ +(function() { + +var localStorage = {}, sessionStorage = {}; +try { localStorage = window.localStorage; } catch (e) { } +try { sessionStorage = window.sessionStorage; } catch (e) { } + +function createSourceLinks() { + $('.method_details_list .source_code'). + before("[View source]"); + $('.toggleSource').toggle(function() { + $(this).parent().nextAll('.source_code').slideDown(100); + $(this).text("Hide source"); + }, + function() { + $(this).parent().nextAll('.source_code').slideUp(100); + $(this).text("View source"); + }); +} + +function createDefineLinks() { + var tHeight = 0; + $('.defines').after(" more..."); + $('.toggleDefines').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).prev().css('display', 'inline'); + $(this).parent().prev().height($(this).parent().height()); + $(this).text("(less)"); + }, + function() { + $(this).prev().hide(); + $(this).parent().prev().height(tHeight); + $(this).text("more..."); + }); +} + +function createFullTreeLinks() { + var tHeight = 0; + $('.inheritanceTree').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).parent().toggleClass('showAll'); + $(this).text("(hide)"); + $(this).parent().prev().height($(this).parent().height()); + }, + function() { + $(this).parent().toggleClass('showAll'); + $(this).parent().prev().height(tHeight); + $(this).text("show all"); + }); +} + +function searchFrameButtons() { + $('.full_list_link').click(function() { + toggleSearchFrame(this, $(this).attr('href')); + return false; + }); + window.addEventListener('message', function(e) { + if (e.data === 'navEscape') { + $('#nav').slideUp(100); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); + + $(window).resize(function() { + if ($('#search:visible').length === 0) { + $('#nav').removeAttr('style'); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); +} + +function toggleSearchFrame(id, link) { + var frame = $('#nav'); + $('#search a').removeClass('active').addClass('inactive'); + if (frame.attr('src') === link && frame.css('display') !== "none") { + frame.slideUp(100); + $('#search a').removeClass('active inactive'); + } + else { + $(id).addClass('active').removeClass('inactive'); + if (frame.attr('src') !== link) frame.attr('src', link); + frame.slideDown(100); + } +} + +function linkSummaries() { + $('.summary_signature').click(function() { + document.location = $(this).find('a').attr('href'); + }); +} + +function summaryToggle() { + $('.summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('ul.summary').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('ul.summary').first().toggle(); + } + else if (next.hasClass('summary')) { + var list = $('
      '); + list.html(next.html()); + list.find('.summary_desc, .note').remove(); + list.find('a').each(function() { + $(this).html($(this).find('strong').html()); + $(this).parent().html($(this)[0].outerHTML); + }); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function constantSummaryToggle() { + $('.constants_summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.constants_summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('dl.constants').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('dl.constants').first().toggle(); + } + else if (next.hasClass('constants')) { + var list = $('
      '); + list.html(next.html()); + list.find('dt').each(function() { + $(this).addClass('summary_signature'); + $(this).text( $(this).text().split('=')[0]); + if ($(this).has(".deprecated").length) { + $(this).addClass('deprecated'); + }; + }); + // Add the value of the constant as "Tooltip" to the summary object + list.find('pre.code').each(function() { + console.log($(this).parent()); + var dt_element = $(this).parent().prev(); + var tooltip = $(this).text(); + if (dt_element.hasClass("deprecated")) { + tooltip = 'Deprecated. ' + tooltip; + }; + dt_element.attr('title', tooltip); + }); + list.find('.docstring, .tags, dd').remove(); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.constants_summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function generateTOC() { + if ($('#filecontents').length === 0) return; + var _toc = $('
        '); + var show = false; + var toc = _toc; + var counter = 0; + var tags = ['h2', 'h3', 'h4', 'h5', 'h6']; + var i; + var curli; + if ($('#filecontents h1').length > 1) tags.unshift('h1'); + for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; } + var lastTag = parseInt(tags[0][1], 10); + $(tags.join(', ')).each(function() { + if ($(this).parents('.method_details .docstring').length != 0) return; + if (this.id == "filecontents") return; + show = true; + var thisTag = parseInt(this.tagName[1], 10); + if (this.id.length === 0) { + var proposedId = $(this).attr('toc-id'); + if (typeof(proposedId) != "undefined") this.id = proposedId; + else { + var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_'); + if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; } + this.id = proposedId; + } + } + if (thisTag > lastTag) { + for (i = 0; i < thisTag - lastTag; i++) { + if ( typeof(curli) == "undefined" ) { + curli = $('
      1. '); + toc.append(curli); + } + toc = $('
          '); + curli.append(toc); + curli = undefined; + } + } + if (thisTag < lastTag) { + for (i = 0; i < lastTag - thisTag; i++) { + toc = toc.parent(); + toc = toc.parent(); + } + } + var title = $(this).attr('toc-title'); + if (typeof(title) == "undefined") title = $(this).text(); + curli =$('
        1. ' + title + '
        2. '); + toc.append(curli); + lastTag = thisTag; + }); + if (!show) return; + html = ''; + $('#content').prepend(html); + $('#toc').append(_toc); + $('#toc .hide_toc').toggle(function() { + $('#toc .top').slideUp('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }, function() { + $('#toc .top').slideDown('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }); +} + +function navResizeFn(e) { + if (e.which !== 1) { + navResizeFnStop(); + return; + } + + sessionStorage.navWidth = e.pageX.toString(); + $('.nav_wrap').css('width', e.pageX); + $('.nav_wrap').css('-ms-flex', 'inherit'); +} + +function navResizeFnStop() { + $(window).unbind('mousemove', navResizeFn); + window.removeEventListener('message', navMessageFn, false); +} + +function navMessageFn(e) { + if (e.data.action === 'mousemove') navResizeFn(e.data.event); + if (e.data.action === 'mouseup') navResizeFnStop(); +} + +function navResizer() { + $('#resizer').mousedown(function(e) { + e.preventDefault(); + $(window).mousemove(navResizeFn); + window.addEventListener('message', navMessageFn, false); + }); + $(window).mouseup(navResizeFnStop); + + if (sessionStorage.navWidth) { + navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)}); + } +} + +function navExpander() { + var done = false, timer = setTimeout(postMessage, 500); + function postMessage() { + if (done) return; + clearTimeout(timer); + var opts = { action: 'expand', path: pathId }; + document.getElementById('nav').contentWindow.postMessage(opts, '*'); + done = true; + } + + window.addEventListener('message', function(event) { + if (event.data === 'navReady') postMessage(); + return false; + }, false); +} + +function mainFocus() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + + setTimeout(function() { $('#main').focus(); }, 10); +} + +function navigationChange() { + // This works around the broken anchor navigation with the YARD template. + window.onpopstate = function() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + }; +} + +$(document).ready(function() { + navResizer(); + navExpander(); + createSourceLinks(); + createDefineLinks(); + createFullTreeLinks(); + searchFrameButtons(); + linkSummaries(); + summaryToggle(); + constantSummaryToggle(); + generateTOC(); + mainFocus(); + navigationChange(); +}); + +})(); diff --git a/0.0.4/js/full_list.js b/0.0.4/js/full_list.js new file mode 100644 index 0000000..59069c5 --- /dev/null +++ b/0.0.4/js/full_list.js @@ -0,0 +1,216 @@ +(function() { + +var $clicked = $(null); +var searchTimeout = null; +var searchCache = []; +var caseSensitiveMatch = false; +var ignoreKeyCodeMin = 8; +var ignoreKeyCodeMax = 46; +var commandKey = 91; + +RegExp.escape = function(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} + +function escapeShortcut() { + $(document).keydown(function(evt) { + if (evt.which == 27) { + window.parent.postMessage('navEscape', '*'); + } + }); +} + +function navResizer() { + $(window).mousemove(function(e) { + window.parent.postMessage({ + action: 'mousemove', event: {pageX: e.pageX, which: e.which} + }, '*'); + }).mouseup(function(e) { + window.parent.postMessage({action: 'mouseup'}, '*'); + }); + window.parent.postMessage("navReady", "*"); +} + +function clearSearchTimeout() { + clearTimeout(searchTimeout); + searchTimeout = null; +} + +function enableLinks() { + // load the target page in the parent window + $('#full_list li').on('click', function(evt) { + $('#full_list li').removeClass('clicked'); + $clicked = $(this); + $clicked.addClass('clicked'); + evt.stopPropagation(); + + if (evt.target.tagName === 'A') return true; + + var elem = $clicked.find('> .item .object_link a')[0]; + var e = evt.originalEvent; + var newEvent = new MouseEvent(evt.originalEvent.type); + newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); + elem.dispatchEvent(newEvent); + evt.preventDefault(); + return false; + }); +} + +function enableToggles() { + // show/hide nested classes on toggle click + $('#full_list a.toggle').on('click', function(evt) { + evt.stopPropagation(); + evt.preventDefault(); + $(this).parent().parent().toggleClass('collapsed'); + highlight(); + }); +} + +function populateSearchCache() { + $('#full_list li .item').each(function() { + var $node = $(this); + var $link = $node.find('.object_link a'); + if ($link.length > 0) { + searchCache.push({ + node: $node, + link: $link, + name: $link.text(), + fullName: $link.attr('title').split(' ')[0] + }); + } + }); +} + +function enableSearch() { + $('#search input').keyup(function(event) { + if (ignoredKeyPress(event)) return; + if (this.value === "") { + clearSearch(); + } else { + performSearch(this.value); + } + }); + + $('#full_list').after(""); +} + +function ignoredKeyPress(event) { + if ( + (event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) || + (event.keyCode == commandKey) + ) { + return true; + } else { + return false; + } +} + +function clearSearch() { + clearSearchTimeout(); + $('#full_list .found').removeClass('found').each(function() { + var $link = $(this).find('.object_link a'); + $link.text($link.text()); + }); + $('#full_list, #content').removeClass('insearch'); + $clicked.parents().removeClass('collapsed'); + highlight(); +} + +function performSearch(searchString) { + clearSearchTimeout(); + $('#full_list, #content').addClass('insearch'); + $('#noresults').text('').hide(); + partialSearch(searchString, 0); +} + +function partialSearch(searchString, offset) { + var lastRowClass = ''; + var i = null; + for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) { + var item = searchCache[i]; + var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name); + var matchString = buildMatchString(searchString); + var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i"); + if (searchName.match(matchRegexp) == null) { + item.node.removeClass('found'); + item.link.text(item.link.text()); + } + else { + item.node.addClass('found'); + item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1'); + lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2'; + item.link.html(item.name.replace(matchRegexp, "$&")); + } + } + if(i == searchCache.length) { + searchDone(); + } else { + searchTimeout = setTimeout(function() { + partialSearch(searchString, i); + }, 0); + } +} + +function searchDone() { + searchTimeout = null; + highlight(); + if ($('#full_list li:visible').size() === 0) { + $('#noresults').text('No results were found.').hide().fadeIn(); + } else { + $('#noresults').text('').hide(); + } + $('#content').removeClass('insearch'); +} + +function buildMatchString(searchString, event) { + caseSensitiveMatch = searchString.match(/[A-Z]/) != null; + var regexSearchString = RegExp.escape(searchString); + if (caseSensitiveMatch) { + regexSearchString += "|" + + $.map(searchString.split(''), function(e) { return RegExp.escape(e); }). + join('.+?'); + } + return regexSearchString; +} + +function highlight() { + $('#full_list li:visible').each(function(n) { + $(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even'); + }); +} + +/** + * Expands the tree to the target element and its immediate + * children. + */ +function expandTo(path) { + var $target = $(document.getElementById('object_' + path)); + $target.addClass('clicked'); + $target.removeClass('collapsed'); + $target.parentsUntil('#full_list', 'li').removeClass('collapsed'); + if($target[0]) { + window.scrollTo(window.scrollX, $target.offset().top - 250); + highlight(); + } +} + +function windowEvents(event) { + var msg = event.data; + if (msg.action === "expand") { + expandTo(msg.path); + } + return false; +} + +window.addEventListener("message", windowEvents, false); + +$(document).ready(function() { + escapeShortcut(); + navResizer(); + enableLinks(); + enableToggles(); + populateSearchCache(); + enableSearch(); +}); + +})(); diff --git a/0.0.4/js/jquery.js b/0.0.4/js/jquery.js new file mode 100644 index 0000000..198b3ff --- /dev/null +++ b/0.0.4/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/0.0.4/method_list.html b/0.0.4/method_list.html new file mode 100644 index 0000000..12d4c8c --- /dev/null +++ b/0.0.4/method_list.html @@ -0,0 +1,971 @@ + + + + + + + + + + + + + + + + + + Method List + + + +
    +
    +

    Method List

    + + + +
    + + +
    + + diff --git a/0.0.4/top-level-namespace.html b/0.0.4/top-level-namespace.html new file mode 100644 index 0000000..f2adda1 --- /dev/null +++ b/0.0.4/top-level-namespace.html @@ -0,0 +1,110 @@ + + + + + + + Top Level Namespace + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Top Level Namespace + + + +

    +
    + + + + + + + + + + + +
    + +

    Defined Under Namespace

    +

    + + + Modules: UnicodePlot + + + + +

    + + + + + + + + + +
    + + + +
    + + \ No newline at end of file diff --git a/README.md b/README.md index 57a1ecb..c33cfac 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # UnicodePlot +- [0.0.4](0.0.4) +- [0.0.4](0.0.4) diff --git a/_config.yml b/_config.yml index 0bd0d70..67fb184 100644 --- a/_config.yml +++ b/_config.yml @@ -1,2 +1,3 @@ include: - README.md + - 0.0.4 From 5a5876fb0adc25fb7d407f0b013a46ac882e0b51 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 15:50:06 +0900 Subject: [PATCH 07/14] Remove duplicated entry from README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index c33cfac..6f6fd6c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,2 @@ # UnicodePlot - [0.0.4](0.0.4) -- [0.0.4](0.0.4) From dbeb2554e2f1e38527fc1a95303286e87ca735ea Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 16:43:25 +0900 Subject: [PATCH 08/14] Add link to GitHub in README --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 6f6fd6c..77c6cb3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ # UnicodePlot + +## Documentation + - [0.0.4](0.0.4) + +## GitHub + +https://github.com/red-data-tools/unicode_plot.rb From 70bf9a8f453c98299abda850a7e9e3f24d94848c Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 17:15:27 +0900 Subject: [PATCH 09/14] Fix update algorithm of README and jekyll config --- Rakefile | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/Rakefile b/Rakefile index 8bc52f0..fabf736 100644 --- a/Rakefile +++ b/Rakefile @@ -14,8 +14,34 @@ def yard(version) end def update_readme(version) - File.open("README.md", "a") do |f| - f.puts "- [#{version}](#{version})" + content = File.read("README.md") + File.write("README.md.orig", content) # backup + + File.open("README.md", "w") do |f| + versions_section = false + versions = [version] + puts_version_entries = lambda do |f| + versions.sort.reverse.each do |version| + f.puts "- [#{version}](#{version})" + end + end + content.each_line do |line| + line.chomp! + if versions_section + case line.chomp + when /\A\s*-\s*\[(.+)\]/ + versions << $1.chomp + next + else + puts_version_entries.(f) + versions_section = false + end + elsif line =~ /\A## Documentation/ + versions_section = true + end + f.puts line + end + puts_version_entries.(f) if versions_section end end @@ -23,21 +49,32 @@ def update_jekyll_config(version) content = File.read("_config.yml") File.write("_config.yml.orig", content) # backup - include_section = false + new_entry = " - #{version}" File.open("_config.yml", "w") do |f| + include_section = false + entries = [version] + puts_entries = lambda do |f| + entries.sort.each do |entry| + f.puts " - #{entry}" + end + end content.each_line do |line| + line.chomp! if include_section case line - when /\A -/ - # do nothing + when /\A\s*-\s*(.+)\z/ + entries << $1 + next else - f.puts " - #{version}" + puts_entries.(f) + include_section = false end elsif line =~ /\Ainclude:/ include_section = true end - f.print line + f.puts line end + puts_entries.(f) if include_section end end From d5677576a7fae368e5fd08774602a723a5ffac86 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 17:17:29 +0900 Subject: [PATCH 10/14] Add document for version 0.0.3 --- 0.0.3/UnicodePlot.html | 1352 +++++++++++++++++ 0.0.3/UnicodePlot/AsciiCanvas.html | 482 ++++++ 0.0.3/UnicodePlot/Barplot.html | 785 ++++++++++ 0.0.3/UnicodePlot/BorderMaps.html | 158 ++ 0.0.3/UnicodePlot/BorderPrinter.html | 263 ++++ 0.0.3/UnicodePlot/Boxplot.html | 791 ++++++++++ 0.0.3/UnicodePlot/BrailleCanvas.html | 460 ++++++ 0.0.3/UnicodePlot/Canvas.html | 1715 +++++++++++++++++++++ 0.0.3/UnicodePlot/DensityCanvas.html | 461 ++++++ 0.0.3/UnicodePlot/DotCanvas.html | 417 +++++ 0.0.3/UnicodePlot/GridPlot.html | 866 +++++++++++ 0.0.3/UnicodePlot/Lineplot.html | 187 +++ 0.0.3/UnicodePlot/LookupCanvas.html | 425 ++++++ 0.0.3/UnicodePlot/Plot.html | 1857 +++++++++++++++++++++++ 0.0.3/UnicodePlot/Renderer.html | 523 +++++++ 0.0.3/UnicodePlot/Scatterplot.html | 187 +++ 0.0.3/UnicodePlot/StyledPrinter.html | 421 +++++ 0.0.3/UnicodePlot/Utils.html | 613 ++++++++ 0.0.3/UnicodePlot/ValueTransformer.html | 317 ++++ 0.0.3/UnicodePlot/Version.html | 121 ++ 0.0.3/_index.html | 329 ++++ 0.0.3/class_list.html | 51 + 0.0.3/css/common.css | 1 + 0.0.3/css/full_list.css | 58 + 0.0.3/css/style.css | 497 ++++++ 0.0.3/file.CHANGES.html | 91 ++ 0.0.3/file.LICENSE.html | 70 + 0.0.3/file.README.html | 120 ++ 0.0.3/file_list.html | 66 + 0.0.3/frames.html | 17 + 0.0.3/img/lineplot.png | Bin 0 -> 37632 bytes 0.0.3/index.html | 120 ++ 0.0.3/js/app.js | 314 ++++ 0.0.3/js/full_list.js | 216 +++ 0.0.3/js/jquery.js | 4 + 0.0.3/method_list.html | 971 ++++++++++++ 0.0.3/top-level-namespace.html | 110 ++ README.md | 3 +- _config.yml | 3 +- 39 files changed, 15439 insertions(+), 3 deletions(-) create mode 100644 0.0.3/UnicodePlot.html create mode 100644 0.0.3/UnicodePlot/AsciiCanvas.html create mode 100644 0.0.3/UnicodePlot/Barplot.html create mode 100644 0.0.3/UnicodePlot/BorderMaps.html create mode 100644 0.0.3/UnicodePlot/BorderPrinter.html create mode 100644 0.0.3/UnicodePlot/Boxplot.html create mode 100644 0.0.3/UnicodePlot/BrailleCanvas.html create mode 100644 0.0.3/UnicodePlot/Canvas.html create mode 100644 0.0.3/UnicodePlot/DensityCanvas.html create mode 100644 0.0.3/UnicodePlot/DotCanvas.html create mode 100644 0.0.3/UnicodePlot/GridPlot.html create mode 100644 0.0.3/UnicodePlot/Lineplot.html create mode 100644 0.0.3/UnicodePlot/LookupCanvas.html create mode 100644 0.0.3/UnicodePlot/Plot.html create mode 100644 0.0.3/UnicodePlot/Renderer.html create mode 100644 0.0.3/UnicodePlot/Scatterplot.html create mode 100644 0.0.3/UnicodePlot/StyledPrinter.html create mode 100644 0.0.3/UnicodePlot/Utils.html create mode 100644 0.0.3/UnicodePlot/ValueTransformer.html create mode 100644 0.0.3/UnicodePlot/Version.html create mode 100644 0.0.3/_index.html create mode 100644 0.0.3/class_list.html create mode 100644 0.0.3/css/common.css create mode 100644 0.0.3/css/full_list.css create mode 100644 0.0.3/css/style.css create mode 100644 0.0.3/file.CHANGES.html create mode 100644 0.0.3/file.LICENSE.html create mode 100644 0.0.3/file.README.html create mode 100644 0.0.3/file_list.html create mode 100644 0.0.3/frames.html create mode 100644 0.0.3/img/lineplot.png create mode 100644 0.0.3/index.html create mode 100644 0.0.3/js/app.js create mode 100644 0.0.3/js/full_list.js create mode 100644 0.0.3/js/jquery.js create mode 100644 0.0.3/method_list.html create mode 100644 0.0.3/top-level-namespace.html diff --git a/0.0.3/UnicodePlot.html b/0.0.3/UnicodePlot.html new file mode 100644 index 0000000..202af25 --- /dev/null +++ b/0.0.3/UnicodePlot.html @@ -0,0 +1,1352 @@ + + + + + + + Module: UnicodePlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot + + + +

    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/plot.rb,
    + src/lib/unicode_plot/utils.rb,
    src/lib/unicode_plot/canvas.rb,
    src/lib/unicode_plot/barplot.rb,
    src/lib/unicode_plot/boxplot.rb,
    src/lib/unicode_plot/version.rb,
    src/lib/unicode_plot/lineplot.rb,
    src/lib/unicode_plot/renderer.rb,
    src/lib/unicode_plot/grid_plot.rb,
    src/lib/unicode_plot/histogram.rb,
    src/lib/unicode_plot/dot_canvas.rb,
    src/lib/unicode_plot/densityplot.rb,
    src/lib/unicode_plot/scatterplot.rb,
    src/lib/unicode_plot/ascii_canvas.rb,
    src/lib/unicode_plot/lookup_canvas.rb,
    src/lib/unicode_plot/braille_canvas.rb,
    src/lib/unicode_plot/density_canvas.rb,
    src/lib/unicode_plot/styled_printer.rb,
    src/lib/unicode_plot/value_transformer.rb
    +
    +
    + +
    + +

    Defined Under Namespace

    +

    + + + Modules: BorderMaps, BorderPrinter, StyledPrinter, Utils, ValueTransformer, Version + + + + Classes: AsciiCanvas, Barplot, Boxplot, BrailleCanvas, Canvas, DensityCanvas, DotCanvas, GridPlot, Lineplot, LookupCanvas, Plot, Renderer, Scatterplot + + +

    + + +

    + Constant Summary + collapse +

    + +
    + +
    VERSION = + +
    +
    "0.0.3"
    + +
    BORDER_MAP = + +
    +
    {
    +  solid:   BorderMaps::BORDER_SOLID,
    +  corners: BorderMaps::BORDER_CORNERS,
    +  barplot: BorderMaps::BORDER_BARPLOT,
    +}.freeze
    + +
    + + + + + + + + + +

    + Class Method Summary + collapse +

    + + + + + + +
    +

    Class Method Details

    + + +
    +

    + + .barplot(*args, width: Barplot::DEFAULT_WIDTH, color: Barplot::DEFAULT_COLOR, symbol: Barplot::DEFAULT_SYMBOL, border: :barplot, xscale: nil, xlabel: nil, data: nil, **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 79
    +
    +module_function def barplot(*args,
    +                            width: Barplot::DEFAULT_WIDTH,
    +                            color: Barplot::DEFAULT_COLOR,
    +                            symbol: Barplot::DEFAULT_SYMBOL,
    +                            border: :barplot,
    +                            xscale: nil,
    +                            xlabel: nil,
    +                            data: nil,
    +                            **kw)
    +  case args.length
    +  when 0
    +    data = Hash(data)
    +    keys = data.keys.map(&:to_s)
    +    heights = data.values
    +  when 2
    +    keys = Array(args[0])
    +    heights = Array(args[1])
    +  else
    +    raise ArgumentError, "invalid arguments"
    +  end
    +
    +  unless keys.length == heights.length
    +    raise ArgumentError, "The given vectors must be of the same length"
    +  end
    +  unless heights.min >= 0
    +    raise ArgumentError, "All values have to be positive. Negative bars are not supported."
    +  end
    +
    +  xlabel ||= ValueTransformer.transform_name(xscale)
    +  plot = Barplot.new(heights, width, color, symbol, xscale,
    +                     border: border, xlabel: xlabel,
    +                     **kw)
    +  keys.each_with_index do |key, i|
    +    plot.annotate_row!(:l, i, key)
    +  end
    +
    +  plot
    +end
    +
    + + +
    +

    + + .barplot!(plot, *args, data: nil, **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 118
    +
    +module_function def barplot!(plot,
    +                             *args,
    +                             data: nil,
    +                             **kw)
    +  case args.length
    +  when 0
    +    data = Hash(data)
    +    keys = data.keys.map(&:to_s)
    +    heights = data.values
    +  when 2
    +    keys = Array(args[0])
    +    heights = Array(args[1])
    +  else
    +    raise ArgumentError, "invalid arguments"
    +  end
    +
    +  unless keys.length == heights.length
    +    raise ArgumentError, "The given vectors must be of the same length"
    +  end
    +  if keys.empty?
    +    raise ArgumentError, "Can't append empty array to barplot"
    +  end
    +
    +  cur_idx = plot.n_rows
    +  plot.add_row!(heights)
    +  keys.each_with_index do |key, i|
    +    plot.annotate_row!(:l, cur_idx + i, key)
    +  end
    +  plot
    +end
    +
    +
    + +
    +

    + + .boxplot(*args, data: nil, border: :corners, color: Boxplot::DEFAULT_COLOR, width: Boxplot::DEFAULT_WIDTH, xlim: [0, 0], **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 100
    +
    +module_function def boxplot(*args,
    +                            data: nil,
    +                            border: :corners,
    +                            color: Boxplot::DEFAULT_COLOR,
    +                            width: Boxplot::DEFAULT_WIDTH,
    +                            xlim: [0, 0],
    +                            **kw)
    +  case args.length
    +  when 0
    +    data = Hash(data)
    +    text = data.keys
    +    data = data.values
    +  when 1
    +    data = args[0]
    +  when 2
    +    text = Array(args[0])
    +    data = args[1]
    +  else
    +    raise ArgumentError, "wrong number of arguments"
    +  end
    +
    +  case data[0]
    +  when Numeric
    +    data = [data]
    +  when Array
    +    # do nothing
    +  else
    +    data = data.to_ary
    +  end
    +  text ||= Array.new(data.length, "")
    +
    +  unless text.length == data.length
    +    raise ArgumentError, "wrong number of text"
    +  end
    +
    +  unless xlim.length == 2
    +    raise ArgumentError, "xlim must be a length 2 array"
    +  end
    +
    +  min_x, max_x = Utils.extend_limits(data.map(&:minmax).flatten, xlim)
    +  width = [width, Boxplot::MIN_WIDTH].max
    +
    +  plot = Boxplot.new(data[0], width, color, min_x, max_x,
    +                     border: border, **kw)
    +  (1 ... data.length).each do |i|
    +    plot.add_series!(data[i])
    +  end
    +
    +  mean_x = (min_x + max_x) / 2.0
    +  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
    +  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
    +  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
    +  plot.annotate!(:bl, min_x_str, color: :light_black)
    +  plot.annotate!(:b,  mean_x_str, color: :light_black)
    +  plot.annotate!(:br, max_x_str, color: :light_black)
    +
    +  text.each_with_index do |name, i|
    +    plot.annotate_row!(:l, i*3+1, name) if name.length > 0
    +  end
    +
    +  plot
    +end
    +
    +
    + +
    +

    + + .boxplot!(plot, *args, **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 163
    +
    +module_function def boxplot!(plot, *args, **kw)
    +  case args.length
    +  when 1
    +    data = args[0]
    +    name = kw[:name] || ""
    +  when 2
    +    name = args[0]
    +    data = args[1]
    +  else
    +    raise ArgumentError, "worng number of arguments"
    +  end
    +
    +  if data.empty?
    +    raise ArgumentError, "Can't append empty array to boxplot"
    +  end
    +
    +  plot.add_series!(data)
    +
    +  plot.annotate_row!(:l, (plot.n_data - 1)*3+1, name) if name && name != ""
    +
    +  min_x = plot.min_x
    +  max_x = plot.max_x
    +  mean_x = (min_x + max_x) / 2.0
    +  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
    +  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
    +  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
    +  plot.annotate!(:bl, min_x_str, color: :light_black)
    +  plot.annotate!(:b,  mean_x_str, color: :light_black)
    +  plot.annotate!(:br, max_x_str, color: :light_black)
    +
    +  plot
    +end
    +
    +
    + +
    +

    + + .densityplot(x, y, color: :auto, grid: false, name: "", **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +2
    +3
    +4
    +5
    +
    +
    # File 'src/lib/unicode_plot/densityplot.rb', line 2
    +
    +module_function def densityplot(x, y, color: :auto, grid: false, name: "", **kw)
    +  plot = GridPlot.new(x, y, :density, grid: grid, **kw)
    +  scatterplot!(plot, x, y, color: color, name: name)
    +end
    +
    +
    + +
    +

    + + .densityplot!(plot, x, y, **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +7
    +8
    +9
    +
    +
    # File 'src/lib/unicode_plot/densityplot.rb', line 7
    +
    +module_function def densityplot!(plot, x, y, **kw)
    +  scatterplot!(plot, x, y, **kw)
    +end
    +
    +
    + +
    +

    + + .histogram(x, nbins: nil, closed: :left, symbol: "▇", **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/histogram.rb', line 4
    +
    +module_function def histogram(x,
    +                              nbins: nil,
    +                              closed: :left,
    +                              symbol: "",
    +                              **kw)
    +  hist = x.histogram(*[nbins].compact, closed: closed)
    +  edge, counts = hist.edge, hist.weights
    +  labels = []
    +  bin_width = edge[1] - edge[0]
    +  pad_left, pad_right = 0, 0
    +  (0 ... edge.length).each do |i|
    +    val1 = Utils.float_round_log10(edge[i], bin_width)
    +    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
    +    a1 = val1.to_s.split('.', 2).map(&:length)
    +    a2 = val2.to_s.split('.', 2).map(&:length)
    +    pad_left  = [pad_left,  a1[0], a2[0]].max
    +    pad_right = [pad_right, a1[1], a2[1]].max
    +  end
    +  l_str = hist.closed == :right ? "(" : "["
    +  r_str = hist.closed == :right ? "]" : ")"
    +  counts.each_with_index do |n, i|
    +    val1 = Utils.float_round_log10(edge[i], bin_width)
    +    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
    +    a1 = val1.to_s.split('.', 2).map(&:length)
    +    a2 = val2.to_s.split('.', 2).map(&:length)
    +    labels[i] = "\e[90m#{l_str}\e[0m" +
    +                (" " * (pad_left - a1[0])) +
    +                val1.to_s +
    +                (" " * (pad_right - a1[1])) +
    +                "\e[90m, \e[0m" +
    +                (" " * (pad_left - a2[0])) +
    +                val2.to_s +
    +                (" " * (pad_right - a2[1])) +
    +                "\e[90m#{r_str}\e[0m"
    +  end
    +  xscale = kw.delete(:xscale)
    +  xlabel = kw.delete(:xlabel) ||
    +           ValueTransformer.transform_name(xscale, "Frequency")
    +  barplot(labels, counts,
    +          symbol: symbol,
    +          xscale: xscale,
    +          xlabel: xlabel,
    +          **kw)
    +end
    +
    +
    + +
    +

    + + .lineplot(*args, canvas: :braille, color: :auto, name: "", **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/lineplot.rb', line 7
    +
    +module_function def lineplot(*args,
    +                             canvas: :braille,
    +                             color: :auto,
    +                             name: "",
    +                             **kw)
    +  case args.length
    +  when 1
    +    # y only
    +    y = Array(args[0])
    +    x = Array(1 .. y.length)
    +  when 2
    +    # x and y
    +    x = Array(args[0])
    +    y = Array(args[1])
    +  else
    +    raise ArgumentError, "wrong number of arguments"
    +  end
    +
    +  case x[0]
    +  when Time, Date
    +    if x[0].is_a? Time
    +      d = x.map(&:to_f)
    +    else
    +      origin = Date.new(1, 1, 1)
    +      d = x.map {|xi| xi - origin }
    +    end
    +    plot = lineplot(d, y, canvas: canvas, color: color, name: name, **kw)
    +    xmin, xmax = x.minmax
    +    plot.annotate!(:bl, xmin.to_s, color: :light_black)
    +    plot.annotate!(:br, xmax.to_s, color: :light_black)
    +    plot
    +  else
    +    plot = Lineplot.new(x, y, canvas, **kw)
    +    lineplot!(plot, x, y, color: color, name: name)
    +  end
    +end
    +
    +
    + +
    +

    + + .lineplot!(plot, *args, color: :auto, name: "") ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/lineplot.rb', line 44
    +
    +module_function def lineplot!(plot,
    +                              *args,
    +                              color: :auto,
    +                              name: "")
    +  case args.length
    +  when 1
    +    # y only
    +    y = Array(args[0])
    +    x = Array(1 .. y.length)
    +  when 2
    +    # x and y
    +    x = Array(args[0])
    +    y = Array(args[1])
    +
    +    if x.length == 1 && y.length == 1
    +      # intercept and slope
    +      intercept = x[0]
    +      slope = y[0]
    +      xmin = plot.origin_x
    +      xmax = plot.origin_x + plot.plot_width
    +      ymin = plot.origin_y
    +      ymax = plot.origin_y + plot.plot_height
    +      x = [xmin, xmax]
    +      y = [intercept + xmin*slope, intercept + xmax*slope]
    +    end
    +  else
    +    raise ArgumentError, "wrong number of arguments"
    +  end
    +
    +  case x[0]
    +  when Time, Date
    +    if x[0].is_a? Time
    +      d = x.map(&:to_f)
    +    else
    +      origin = Date.new(1, 1, 1)
    +      d = x.map {|xi| xi - origin }
    +    end
    +    lineplot!(plot, d, y, color: color, name: name)
    +  else
    +    color = color == :auto ? plot.next_color : color
    +    plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
    +    plot.lines!(x, y, color)
    +  end
    +  plot
    +end
    +
    +
    + +
    +

    + + .scatterplot(*args, canvas: :braille, color: :auto, name: "", **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    +
    # File 'src/lib/unicode_plot/scatterplot.rb', line 5
    +
    +module_function def scatterplot(*args,
    +                                canvas: :braille,
    +                                color: :auto,
    +                                name: "",
    +                                **kw)
    +  case args.length
    +  when 1
    +    # y only
    +    y = Array(args[0])
    +    x = Array(1 .. y.length)
    +  when 2
    +    # x and y
    +    x = Array(args[0])
    +    y = Array(args[1])
    +  else
    +    raise ArgumentError, "worng number of arguments"
    +  end
    +
    +  plot = Scatterplot.new(x, y, canvas, **kw)
    +  scatterplot!(plot, x, y, color: color, name: name)
    +end
    +
    +
    + +
    +

    + + .scatterplot!(plot, *args, color: :auto, name: "") ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    +
    # File 'src/lib/unicode_plot/scatterplot.rb', line 27
    +
    +module_function def scatterplot!(plot,
    +                                 *args,
    +                                 color: :auto,
    +                                 name: "")
    +  case args.length
    +  when 1
    +    # y only
    +    y = Array(args[0])
    +    x = Array(1 .. y.length)
    +  when 2
    +    # x and y
    +    x = Array(args[0])
    +    y = Array(args[1])
    +  else
    +    raise ArgumentError, "worng number of arguments"
    +  end
    +
    +  color = color == :auto ? plot.next_color : color
    +  plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
    +  plot.points!(x, y, color)
    +  plot
    +end
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/AsciiCanvas.html b/0.0.3/UnicodePlot/AsciiCanvas.html new file mode 100644 index 0000000..6bcd674 --- /dev/null +++ b/0.0.3/UnicodePlot/AsciiCanvas.html @@ -0,0 +1,482 @@ + + + + + + + Class: UnicodePlot::AsciiCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::AsciiCanvas + + + +

    +
    + +
    +
    Inherits:
    +
    + LookupCanvas + + + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/ascii_canvas.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    ASCII_SIGNS = + +
    +
    [
    +  [ 0b100_000_000, 0b000_100_000, 0b000_000_100 ].freeze,
    +  [ 0b010_000_000, 0b000_010_000, 0b000_000_010 ].freeze,
    +  [ 0b001_000_000, 0b000_001_000, 0b000_000_001 ].freeze
    +].freeze
    + +
    ASCII_LOOKUP = + +
    +
    {
    +  0b101_000_000 => '"',
    +  0b111_111_111 => '@',
    + #0b011_110_011 => '$',
    +  0b010_000_000 => '\'',
    +  0b010_100_010 => '(',
    +  0b010_001_010 => ')',
    +  0b000_010_000 => '*',
    +  0b010_111_010 => '+',
    +  0b000_010_010 => ',',
    +  0b000_100_100 => ',',
    +  0b000_001_001 => ',',
    +  0b000_111_000 => '-',
    +  0b000_000_010 => '.',
    +  0b000_000_100 => '.',
    +  0b000_000_001 => '.',
    +  0b001_010_100 => '/',
    +  0b010_100_000 => '/',
    +  0b001_010_110 => '/',
    +  0b011_010_010 => '/',
    +  0b001_010_010 => '/',
    +  0b110_010_111 => '1',
    + #0b111_010_100 => '7',
    +  0b010_000_010 => ':',
    +  0b111_000_111 => '=',
    + #0b010_111_101 => 'A',
    + #0b011_100_011 => 'C',
    + #0b110_101_110 => 'D',
    + #0b111_110_100 => 'F',
    + #0b011_101_011 => 'G',
    + #0b101_111_101 => 'H',
    +  0b111_010_111 => 'I',
    + #0b011_001_111 => 'J',
    + #0b101_110_101 => 'K',
    +  0b100_100_111 => 'L',
    + #0b111_111_101 => 'M',
    + #0b101_101_101 => 'N',
    + #0b111_101_111 => 'O',
    + #0b111_111_100 => 'P',
    +  0b111_010_010 => 'T',
    + #0b101_101_111 => 'U',
    +  0b101_101_010 => 'V',
    + #0b101_111_111 => 'W',
    +  0b101_010_101 => 'X',
    +  0b101_010_010 => 'Y',
    +  0b110_100_110 => '[',
    +  0b010_001_000 => '\\',
    +  0b100_010_001 => '\\',
    +  0b110_010_010 => '\\',
    +  0b100_010_011 => '\\',
    +  0b100_010_010 => '\\',
    +  0b011_001_011 => ']',
    +  0b010_101_000 => '^',
    +  0b000_000_111 => '_',
    +  0b100_000_000 => '`',
    + #0b000_111_111 => 'a',
    + #0b100_111_111 => 'b',
    + #0b001_111_111 => 'd',
    + #0b001_111_010 => 'f',
    + #0b100_111_101 => 'h',
    + #0b100_101_101 => 'k',
    +  0b110_010_011 => 'l',
    + #0b000_111_101 => 'n',
    +  0b000_111_100 => 'r',
    + #0b000_101_111 => 'u',
    +  0b000_101_010 => 'v',
    +  0b011_110_011 => '{',
    +  0b010_010_010 => '|',
    +  0b100_100_100 => '|',
    +  0b001_001_001 => '|',
    +  0b110_011_110 => '}',
    +}.freeze
    + +
    ASCII_DECODE = + +
    +
    [' ']
    + +
    PIXEL_PER_CHAR = + +
    +
    3
    + +
    + + + + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Canvas

    +

    #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from LookupCanvas

    +

    #pixel!, #print_row

    + + + + + + + + + +

    Methods inherited from Canvas

    +

    #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

    + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, **kw) ⇒ AsciiCanvas + + + + + +

    +
    +

    Returns a new instance of AsciiCanvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +106
    +107
    +108
    +109
    +110
    +
    +
    # File 'src/lib/unicode_plot/ascii_canvas.rb', line 106
    +
    +def initialize(width, height, **kw)
    +  super(width, height,
    +        PIXEL_PER_CHAR, PIXEL_PER_CHAR,
    +        **kw)
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #lookup_decode(code) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +116
    +117
    +118
    +
    +
    # File 'src/lib/unicode_plot/ascii_canvas.rb', line 116
    +
    +def lookup_decode(code)
    +  ASCII_DECODE[code]
    +end
    +
    +
    + +
    +

    + + #lookup_encode(x, y) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +112
    +113
    +114
    +
    +
    # File 'src/lib/unicode_plot/ascii_canvas.rb', line 112
    +
    +def lookup_encode(x, y)
    +  ASCII_SIGNS[x][y]
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Barplot.html b/0.0.3/UnicodePlot/Barplot.html new file mode 100644 index 0000000..1f2070c --- /dev/null +++ b/0.0.3/UnicodePlot/Barplot.html @@ -0,0 +1,785 @@ + + + + + + + Class: UnicodePlot::Barplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Barplot + + + +

    +
    + +
    +
    Inherits:
    +
    + Plot + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + +
    +
    Includes:
    +
    ValueTransformer
    +
    + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/barplot.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    MIN_WIDTH = + +
    +
    10
    + +
    DEFAULT_WIDTH = + +
    +
    40
    + +
    DEFAULT_COLOR = + +
    +
    :green
    + +
    DEFAULT_SYMBOL = + +
    +
    ""
    + +
    + + + + + + +

    Constants included + from ValueTransformer

    +

    ValueTransformer::PREDEFINED_TRANSFORM_FUNCTIONS

    + + + +

    Constants inherited + from Plot

    +

    Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING

    + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #max_freq ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute max_freq.

      +
      + +
    • + + +
    • + + + #max_len ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute max_len.

      +
      + +
    • + + +
    • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute width.

      +
      + +
    • + + +
    + + + + + +

    Attributes inherited from Plot

    +

    #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods included from ValueTransformer

    +

    transform_name, #transform_values

    + + + + + + + + + +

    Methods inherited from Plot

    +

    #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(bars, width, color, symbol, transform, **kw) ⇒ Barplot + + + + + +

    +
    +

    Returns a new instance of Barplot.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 10
    +
    +def initialize(bars, width, color, symbol, transform, **kw)
    +  if symbol.length > 1
    +    raise ArgumentError, "symbol must be a single character"
    +  end
    +  @bars = bars
    +  @symbol = symbol
    +  @max_freq, i = find_max(transform_values(transform, bars))
    +  @max_len = bars[i].to_s.length
    +  @width = [width, max_len + 7, MIN_WIDTH].max
    +  @color = color
    +  @symbol = symbol
    +  @transform = transform
    +  super(**kw)
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #max_freqObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute max_freq.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +25
    +26
    +27
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 25
    +
    +def max_freq
    +  @max_freq
    +end
    +
    +
    + + + +
    +

    + + #max_lenObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute max_len.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +26
    +27
    +28
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 26
    +
    +def max_len
    +  @max_len
    +end
    +
    +
    + + + +
    +

    + + #widthObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute width.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +27
    +28
    +29
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 27
    +
    +def width
    +  @width
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #add_row!(bars) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +37
    +38
    +39
    +40
    +41
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 37
    +
    +def add_row!(bars)
    +  @bars.concat(bars)
    +  @max_freq, i = find_max(transform_values(@transform, bars))
    +  @max_len = @bars[i].to_s.length
    +end
    +
    +
    + +
    +

    + + #n_columnsObject + + + + + +

    + + + + +
    +
    +
    +
    +33
    +34
    +35
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 33
    +
    +def n_columns
    +  @width
    +end
    +
    +
    + +
    +

    + + #n_rowsObject + + + + + +

    + + + + +
    +
    +
    +
    +29
    +30
    +31
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 29
    +
    +def n_rows
    +  @bars.length
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    +
    # File 'src/lib/unicode_plot/barplot.rb', line 43
    +
    +def print_row(out, row_index)
    +  check_row_index(row_index)
    +  bar = @bars[row_index]
    +  max_bar_width = [width - 2 - max_len, 1].max
    +  val = transform_values(@transform, bar)
    +  bar_len = max_freq > 0 ?
    +    ([val, 0].max.fdiv(max_freq) * max_bar_width).round :
    +    0
    +  bar_str = max_freq > 0 ? @symbol * bar_len : ""
    +  bar_lbl = bar.to_s
    +  print_styled(out, bar_str, color: @color)
    +  print_styled(out, " ", bar_lbl, color: :normal)
    +  pan_len = [max_bar_width + 1 + max_len - bar_len - bar_lbl.length, 0].max
    +  pad = " " * pan_len.round
    +  out.print(pad)
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/BorderMaps.html b/0.0.3/UnicodePlot/BorderMaps.html new file mode 100644 index 0000000..4203461 --- /dev/null +++ b/0.0.3/UnicodePlot/BorderMaps.html @@ -0,0 +1,158 @@ + + + + + + + Module: UnicodePlot::BorderMaps + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::BorderMaps + + + +

    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/renderer.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    BORDER_SOLID = + +
    +
    {
    +  tl: "",
    +  tr: "",
    +  bl: "",
    +  br: "",
    +  t:  "",
    +  l:  "",
    +  b:  "",
    +  r:  ""
    +}.freeze
    + +
    BORDER_CORNERS = + +
    +
    {
    +  tl: "",
    +  tr: "",
    +  bl: "",
    +  br: "",
    +  t:  " ",
    +  l:  " ",
    +  b:  " ",
    +  r:  " ",
    +}.freeze
    + +
    BORDER_BARPLOT = + +
    +
    {
    +  tl: "",
    +  tr: "",
    +  bl: "",
    +  br: "",
    +  t:  " ",
    +  l:  "",
    +  b:  " ",
    +  r:  " ",
    +}.freeze
    + +
    + + + + + + + + + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/BorderPrinter.html b/0.0.3/UnicodePlot/BorderPrinter.html new file mode 100644 index 0000000..86e7880 --- /dev/null +++ b/0.0.3/UnicodePlot/BorderPrinter.html @@ -0,0 +1,263 @@ + + + + + + + Module: UnicodePlot::BorderPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::BorderPrinter + + + +

    +
    + + + + + + +
    +
    Includes:
    +
    StyledPrinter
    +
    + + + + +
    +
    Included in:
    +
    Canvas, Renderer
    +
    + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/renderer.rb
    +
    + +
    + + + + +

    Constant Summary

    + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    + + +
    +

    Instance Method Details

    + + +
    + + + + + +
    +
    +
    +
    +52
    +53
    +54
    +55
    +56
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 52
    +
    +def print_border_bottom(out, padding, length, border=:solid, color: :light_black)
    +  return if border == :none
    +  b = BORDER_MAP[border]
    +  print_styled(out, padding, b[:bl], b[:b] * length, b[:br], color: color)
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +46
    +47
    +48
    +49
    +50
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 46
    +
    +def print_border_top(out, padding, length, border=:solid, color: :light_black)
    +  return if border == :none
    +  b = BORDER_MAP[border]
    +  print_styled(out, padding, b[:tl], b[:t] * length, b[:tr], color: color)
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Boxplot.html b/0.0.3/UnicodePlot/Boxplot.html new file mode 100644 index 0000000..4530b8b --- /dev/null +++ b/0.0.3/UnicodePlot/Boxplot.html @@ -0,0 +1,791 @@ + + + + + + + Class: UnicodePlot::Boxplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Boxplot + + + +

    +
    + +
    +
    Inherits:
    +
    + Plot + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/boxplot.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    MIN_WIDTH = + +
    +
    10
    + +
    DEFAULT_COLOR = + +
    +
    :green
    + +
    DEFAULT_WIDTH = + +
    +
    40
    + +
    + + + + + + +

    Constants inherited + from Plot

    +

    Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING

    + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #max_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute max_x.

      +
      + +
    • + + +
    • + + + #min_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute min_x.

      +
      + +
    • + + +
    + + + + + +

    Attributes inherited from Plot

    +

    #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from Plot

    +

    #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(data, width, color, min_x, max_x, **kw) ⇒ Boxplot + + + + + +

    +
    +

    Returns a new instance of Boxplot.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 9
    +
    +def initialize(data, width, color, min_x, max_x, **kw)
    +  if min_x == max_x
    +    min_x -= 1
    +    max_x += 1
    +  end
    +  width = [width, MIN_WIDTH].max
    +  @data = [data.percentile([0, 25, 50, 75, 100])]
    +  @color = color
    +  @width = [width, MIN_WIDTH].max
    +  @min_x = min_x
    +  @max_x = max_x
    +  super(**kw)
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #max_xObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute max_x.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +23
    +24
    +25
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 23
    +
    +def max_x
    +  @max_x
    +end
    +
    +
    + + + +
    +

    + + #min_xObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute min_x.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +23
    +24
    +25
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 23
    +
    +def min_x
    +  @min_x
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #add_series!(data) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +37
    +38
    +39
    +40
    +41
    +42
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 37
    +
    +def add_series!(data)
    +  mi, ma = data.minmax
    +  @data << data.percentile([0, 25, 50, 75, 100])
    +  @min_x = [mi, @min_x].min
    +  @max_x = [ma, @max_x].max
    +end
    +
    +
    + +
    +

    + + #n_columnsObject + + + + + +

    + + + + +
    +
    +
    +
    +33
    +34
    +35
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 33
    +
    +def n_columns
    +  @width
    +end
    +
    +
    + +
    +

    + + #n_dataObject + + + + + +

    + + + + +
    +
    +
    +
    +25
    +26
    +27
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 25
    +
    +def n_data
    +  @data.length
    +end
    +
    +
    + +
    +

    + + #n_rowsObject + + + + + +

    + + + + +
    +
    +
    +
    +29
    +30
    +31
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 29
    +
    +def n_rows
    +  3 * @data.length
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/boxplot.rb', line 44
    +
    +def print_row(out, row_index)
    +  check_row_index(row_index)
    +  series = @data[(row_index / 3.0).to_i]
    +
    +  series_row = row_index % 3
    +
    +  min_char       = ['', '' , ''][series_row]
    +  line_char      = [' ', '' , ' '][series_row]
    +  left_box_char  = ['', '' , ''][series_row]
    +  line_box_char  = ['', ' ' , ''][series_row]
    +  median_char    = ['', '' , ''][series_row]
    +  right_box_char = ['', '' , ''][series_row]
    +  max_char       = ['', '' , ''][series_row]
    +
    +  line = (0 ... @width).map { ' ' }
    +
    +  # Draw shapes first - this is most important,
    +  # so they'll always be drawn even if there's not enough space
    +
    +  transformed = transform(series)
    +  line[transformed[0] - 1] = min_char
    +  line[transformed[1] - 1] = left_box_char
    +  line[transformed[2] - 1] = median_char
    +  line[transformed[3] - 1] = right_box_char
    +  line[transformed[4] - 1] = max_char
    +
    +  (transformed[0] ... (transformed[1] - 1)).each do |i|
    +    line[i] = line_char
    +  end
    +  (transformed[1] ... (transformed[2] - 1)).each do |i|
    +    line[i] = line_box_char
    +  end
    +  (transformed[2] ... (transformed[3] - 1)).each do |i|
    +    line[i] = line_box_char
    +  end
    +  (transformed[3] ... (transformed[4] - 1)).each do |i|
    +    line[i] = line_char
    +  end
    +
    +  print_styled(out, line.join(''), color: @color)
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/BrailleCanvas.html b/0.0.3/UnicodePlot/BrailleCanvas.html new file mode 100644 index 0000000..c7ad923 --- /dev/null +++ b/0.0.3/UnicodePlot/BrailleCanvas.html @@ -0,0 +1,460 @@ + + + + + + + Class: UnicodePlot::BrailleCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::BrailleCanvas + + + +

    +
    + +
    +
    Inherits:
    +
    + Canvas + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/braille_canvas.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    X_PIXEL_PER_CHAR = + +
    +
    2
    + +
    Y_PIXEL_PER_CHAR = + +
    +
    4
    + +
    BRAILLE_SIGNS = + +
    +
    [
    +  [
    +    0x2801,
    +    0x2802,
    +    0x2804,
    +    0x2840,
    +  ].freeze,
    +  [
    +    0x2808,
    +    0x2810,
    +    0x2820,
    +    0x2880
    +  ].freeze
    +].freeze
    + +
    + + + + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Canvas

    +

    #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from Canvas

    +

    #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

    + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, **kw) ⇒ BrailleCanvas + + + + + +

    +
    +

    Returns a new instance of BrailleCanvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    +
    # File 'src/lib/unicode_plot/braille_canvas.rb', line 21
    +
    +def initialize(width, height, **kw)
    +  super(width, height,
    +        width * X_PIXEL_PER_CHAR,
    +        height * Y_PIXEL_PER_CHAR,
    +        "\u{2800}",
    +        x_pixel_per_char: X_PIXEL_PER_CHAR,
    +        y_pixel_per_char: Y_PIXEL_PER_CHAR,
    +        **kw)
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    +
    # File 'src/lib/unicode_plot/braille_canvas.rb', line 31
    +
    +def pixel!(pixel_x, pixel_y, color)
    +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
    +         0 <= pixel_y && pixel_y <= pixel_height
    +    return color
    +  end
    +  pixel_x -= 1 unless pixel_x < pixel_width
    +  pixel_y -= 1 unless pixel_y < pixel_height
    +  tx = pixel_x.fdiv(pixel_width) * width
    +  char_x = tx.floor + 1
    +  char_x_off = pixel_x % X_PIXEL_PER_CHAR + 1
    +  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
    +
    +  char_y = (pixel_y.fdiv(pixel_height) * height).floor + 1
    +  char_y_off = pixel_y % Y_PIXEL_PER_CHAR + 1
    +
    +  index = index_at(char_x - 1, char_y - 1)
    +  if index
    +    @grid[index] = (@grid[index].ord | BRAILLE_SIGNS[char_x_off - 1][char_y_off - 1]).chr(Encoding::UTF_8)
    +    @colors[index] |= COLOR_ENCODE[color]
    +  end
    +  color
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +
    +
    # File 'src/lib/unicode_plot/braille_canvas.rb', line 54
    +
    +def print_row(out, row_index)
    +  unless 0 <= row_index && row_index < height
    +    raise ArgumentError, "row_index out of bounds"
    +  end
    +  y = row_index
    +  (0 ... width).each do |x|
    +    print_color(out, color_at(x, y), char_at(x, y))
    +  end
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Canvas.html b/0.0.3/UnicodePlot/Canvas.html new file mode 100644 index 0000000..8c81254 --- /dev/null +++ b/0.0.3/UnicodePlot/Canvas.html @@ -0,0 +1,1715 @@ + + + + + + + Class: UnicodePlot::Canvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Canvas + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + +
    +
    Includes:
    +
    BorderPrinter
    +
    + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/canvas.rb
    +
    + +
    + +
    +

    Direct Known Subclasses

    +

    BrailleCanvas, DensityCanvas, LookupCanvas

    +
    + + + +

    Constant Summary

    + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute height.

      +
      + +
    • + + +
    • + + + #origin_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute origin_x.

      +
      + +
    • + + +
    • + + + #origin_y ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute origin_y.

      +
      + +
    • + + +
    • + + + #pixel_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute pixel_height.

      +
      + +
    • + + +
    • + + + #pixel_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute pixel_width.

      +
      + +
    • + + +
    • + + + #plot_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute plot_height.

      +
      + +
    • + + +
    • + + + #plot_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute plot_width.

      +
      + +
    • + + +
    • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute width.

      +
      + +
    • + + +
    • + + + #x_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute x_pixel_per_char.

      +
      + +
    • + + +
    • + + + #y_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute y_pixel_per_char.

      +
      + +
    • + + +
    + + + + + +

    + Class Method Summary + collapse +

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, pixel_width, pixel_height, fill_char, origin_x: 0, origin_y: 0, plot_width: 1, plot_height: 1, x_pixel_per_char: 1, y_pixel_per_char: 1) ⇒ Canvas + + + + + +

    +
    +

    Returns a new instance of Canvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 20
    +
    +def initialize(width, height, pixel_width, pixel_height, fill_char,
    +               origin_x: 0,
    +               origin_y: 0,
    +               plot_width: 1,
    +               plot_height: 1,
    +               x_pixel_per_char: 1,
    +               y_pixel_per_char: 1)
    +  @width = width
    +  @height = height
    +  @pixel_width = check_positive(pixel_width, :pixel_width)
    +  @pixel_height = check_positive(pixel_height, :pixel_height)
    +  @origin_x = origin_x
    +  @origin_y = origin_y
    +  @plot_width = plot_width
    +  @plot_height = plot_height
    +  @x_pixel_per_char = x_pixel_per_char
    +  @y_pixel_per_char = y_pixel_per_char
    +  @grid = Array.new(@width * @height, fill_char)
    +  @colors = Array.new(@width * @height, COLOR_ENCODE[:normal])
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #heightObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute height.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +42
    +43
    +44
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 42
    +
    +def height
    +  @height
    +end
    +
    +
    + + + +
    +

    + + #origin_xObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute origin_x.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +45
    +46
    +47
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 45
    +
    +def origin_x
    +  @origin_x
    +end
    +
    +
    + + + +
    +

    + + #origin_yObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute origin_y.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +46
    +47
    +48
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 46
    +
    +def origin_y
    +  @origin_y
    +end
    +
    +
    + + + +
    +

    + + #pixel_heightObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute pixel_height.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +44
    +45
    +46
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 44
    +
    +def pixel_height
    +  @pixel_height
    +end
    +
    +
    + + + +
    +

    + + #pixel_widthObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute pixel_width.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +43
    +44
    +45
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 43
    +
    +def pixel_width
    +  @pixel_width
    +end
    +
    +
    + + + +
    +

    + + #plot_heightObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute plot_height.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +48
    +49
    +50
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 48
    +
    +def plot_height
    +  @plot_height
    +end
    +
    +
    + + + +
    +

    + + #plot_widthObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute plot_width.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +47
    +48
    +49
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 47
    +
    +def plot_width
    +  @plot_width
    +end
    +
    +
    + + + +
    +

    + + #widthObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute width.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +41
    +42
    +43
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 41
    +
    +def width
    +  @width
    +end
    +
    +
    + + + +
    +

    + + #x_pixel_per_charObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute x_pixel_per_char.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +49
    +50
    +51
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 49
    +
    +def x_pixel_per_char
    +  @x_pixel_per_char
    +end
    +
    +
    + + + +
    +

    + + #y_pixel_per_charObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute y_pixel_per_char.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +50
    +51
    +52
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 50
    +
    +def y_pixel_per_char
    +  @y_pixel_per_char
    +end
    +
    +
    + +
    + + +
    +

    Class Method Details

    + + +
    +

    + + .create(canvas_type, width, height, **kw) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 5
    +
    +def self.create(canvas_type, width, height, **kw)
    +  case canvas_type
    +  when :ascii
    +    AsciiCanvas.new(width, height, **kw)
    +  when :braille
    +    BrailleCanvas.new(width, height, **kw)
    +  when :density
    +    DensityCanvas.new(width, height, **kw)
    +  when :dot
    +    DotCanvas.new(width, height, **kw)
    +  else
    +    raise ArgumentError, "unknown canvas type: #{canvas_type}"
    +  end
    +end
    +
    +
    + +
    + +
    +

    Instance Method Details

    + + +
    +

    + + #char_at(x, y) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +74
    +75
    +76
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 74
    +
    +def char_at(x, y)
    +  @grid[index_at(x, y)]
    +end
    +
    +
    + +
    +

    + + #color_at(x, y) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +78
    +79
    +80
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 78
    +
    +def color_at(x, y)
    +  @colors[index_at(x, y)]
    +end
    +
    +
    + +
    +

    + + #index_at(x, y) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +82
    +83
    +84
    +85
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 82
    +
    +def index_at(x, y)
    +  return nil unless 0 <= x && x < width && 0 <= y && y < height
    +  y * width + x
    +end
    +
    +
    + +
    +

    + + #line!(x1, y1, x2, y2, color) ⇒ Object + + + + + +

    +
    +

    digital differential analyzer algorithm

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 115
    +
    +def line!(x1, y1, x2, y2, color)
    +  if (x1 < origin_x && x2 < origin_x) ||
    +      (x1 > origin_x + plot_width && x2 > origin_x + plot_width)
    +    return color
    +  end
    +  if (y1 < origin_y && y2 < origin_y) ||
    +      (y1 > origin_y + plot_height && y2 > origin_y + plot_height)
    +    return color
    +  end
    +
    +  toff = x1 - origin_x
    +  px1 = toff.fdiv(plot_width) * pixel_width
    +  toff = x2 - origin_x
    +  px2 = toff.fdiv(plot_width) * pixel_width
    +
    +  toff = y1 - origin_y
    +  py1 = pixel_height - toff.fdiv(plot_height) * pixel_height
    +  toff = y2 - origin_y
    +  py2 = pixel_height - toff.fdiv(plot_height) * pixel_height
    +
    +  dx = px2 - px1
    +  dy = py2 - py1
    +  nsteps = dx.abs > dy.abs ? dx.abs : dy.abs
    +  inc_x = dx.fdiv(nsteps)
    +  inc_y = dy.fdiv(nsteps)
    +
    +  cur_x = px1
    +  cur_y = py1
    +  pixel!(cur_x.floor, cur_y.floor, color)
    +  1.upto(nsteps) do |i|
    +    cur_x += inc_x
    +    cur_y += inc_y
    +    pixel!(cur_x.floor, cur_y.floor, color)
    +  end
    +  color
    +end
    +
    +
    + +
    +

    + + #lines!(x, y, color = :normal) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 152
    +
    +def lines!(x, y, color = :normal)
    +  if x.length != y.length
    +    raise ArgumentError, "x and y must be the same length"
    +  end
    +  unless x.length > 0
    +    raise ArgumentError, "x and y must not be empty"
    +  end
    +  (0 ... (x.length - 1)).each do |i|
    +    line!(x[i], y[i], x[i+1], y[i+1], color)
    +  end
    +end
    +
    +
    + +
    +

    + + #point!(x, y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 87
    +
    +def point!(x, y, color)
    +  unless origin_x <= x && x <= origin_x + plot_width &&
    +         origin_y <= y && y <= origin_y + plot_height
    +    return color
    +  end
    +
    +  plot_offset_x = x - origin_x
    +  pixel_x = plot_offset_x.fdiv(plot_width) * pixel_width
    +
    +  plot_offset_y = y - origin_y
    +  pixel_y = pixel_height - plot_offset_y.fdiv(plot_height) * pixel_height
    +
    +  pixel!(pixel_x.floor, pixel_y.floor, color)
    +end
    +
    +
    + +
    +

    + + #points!(x, y, color = :normal) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 102
    +
    +def points!(x, y, color = :normal)
    +  if x.length != y.length
    +    raise ArgumentError, "x and y must be the same length"
    +  end
    +  unless x.length > 0
    +    raise ArgumentError, "x and y must not be empty"
    +  end
    +  (0 ... x.length).each do |i|
    +    point!(x[i], y[i], color)
    +  end
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +67
    +68
    +69
    +70
    +71
    +72
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 67
    +
    +def print(out)
    +  (0 ... height).each do |row_index|
    +    print_row(out, row_index)
    +    out.puts if row_index < height - 1
    +  end
    +end
    +
    +
    + +
    +

    + + #show(out) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +
    +
    # File 'src/lib/unicode_plot/canvas.rb', line 52
    +
    +def show(out)
    +  b = BorderMaps::BORDER_SOLID
    +  border_length = width
    +
    +  print_border_top(out, "", border_length, :solid, color: :light_black)
    +  out.puts
    +  (0 ... height).each do |row_index|
    +    print_styled(out, b[:l], color: :light_black)
    +    print_row(out, row_index)
    +    print_styled(out, b[:r], color: :light_black)
    +    out.puts
    +  end
    +  print_border_bottom(out, "", border_length, :solid, color: :light_black)
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/DensityCanvas.html b/0.0.3/UnicodePlot/DensityCanvas.html new file mode 100644 index 0000000..fe0aae9 --- /dev/null +++ b/0.0.3/UnicodePlot/DensityCanvas.html @@ -0,0 +1,461 @@ + + + + + + + Class: UnicodePlot::DensityCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::DensityCanvas + + + +

    +
    + +
    +
    Inherits:
    +
    + Canvas + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/density_canvas.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    DENSITY_SIGNS = + +
    +
    [" ", "", "", "", ""].freeze
    + +
    MIN_WIDTH = + +
    +
    5
    + +
    MIN_HEIGHT = + +
    +
    5
    + +
    X_PIXEL_PER_CHAR = + +
    +
    1
    + +
    Y_PIXEL_PER_CHAR = + +
    +
    2
    + +
    + + + + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Canvas

    +

    #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from Canvas

    +

    #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

    + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, **kw) ⇒ DensityCanvas + + + + + +

    +
    +

    Returns a new instance of DensityCanvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    +
    # File 'src/lib/unicode_plot/density_canvas.rb', line 11
    +
    +def initialize(width, height, **kw)
    +  width = [width, MIN_WIDTH].max
    +  height = [height, MIN_HEIGHT].max
    +  @max_density = 1
    +  super(width, height,
    +        width * X_PIXEL_PER_CHAR,
    +        height * Y_PIXEL_PER_CHAR,
    +        0,
    +        x_pixel_per_char: X_PIXEL_PER_CHAR,
    +        y_pixel_per_char: Y_PIXEL_PER_CHAR,
    +        **kw)
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    +
    # File 'src/lib/unicode_plot/density_canvas.rb', line 24
    +
    +def pixel!(pixel_x, pixel_y, color)
    +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
    +         0 <= pixel_y && pixel_y <= pixel_height
    +    return color
    +  end
    +
    +  pixel_x -= 1 unless pixel_x < pixel_width
    +  pixel_y -= 1 unless pixel_y < pixel_height
    +
    +  char_x = (pixel_x.fdiv(pixel_width) * width).floor
    +  char_y = (pixel_y.fdiv(pixel_height) * height).floor
    +
    +  index = index_at(char_x, char_y)
    +  @grid[index] += 1
    +  @max_density = [@max_density, @grid[index]].max
    +  @colors[index] |= COLOR_ENCODE[color]
    +  color
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +
    +
    # File 'src/lib/unicode_plot/density_canvas.rb', line 43
    +
    +def print_row(out, row_index)
    +  unless 0 <= row_index && row_index < height
    +    raise ArgumentError, "row_index out of bounds"
    +  end
    +  y = row_index
    +  den_sign_count = DENSITY_SIGNS.length
    +  val_scale = (den_sign_count - 1).fdiv(@max_density)
    +  (0 ... width).each do |x|
    +    den_index = (char_at(x, y) * val_scale).round
    +    print_color(out, color_at(x, y), DENSITY_SIGNS[den_index])
    +  end
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/DotCanvas.html b/0.0.3/UnicodePlot/DotCanvas.html new file mode 100644 index 0000000..d28171d --- /dev/null +++ b/0.0.3/UnicodePlot/DotCanvas.html @@ -0,0 +1,417 @@ + + + + + + + Class: UnicodePlot::DotCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::DotCanvas + + + +

    +
    + +
    +
    Inherits:
    +
    + LookupCanvas + + + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/dot_canvas.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    DOT_SIGNS = + +
    +
    [
    +  [
    +    0b10,
    +    0b01
    +  ].freeze
    +].freeze
    + +
    DOT_DECODE = + +
    +
    [
    +  -' ', # 0b00
    +  -'.', # 0b01
    +  -"'", # 0b10
    +  -':', # 0b11
    +].freeze
    + +
    X_PIXEL_PER_CHAR = + +
    +
    1
    + +
    Y_PIXEL_PER_CHAR = + +
    +
    2
    + +
    + + + + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Canvas

    +

    #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from LookupCanvas

    +

    #pixel!, #print_row

    + + + + + + + + + +

    Methods inherited from Canvas

    +

    #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

    + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, **kw) ⇒ DotCanvas + + + + + +

    +
    +

    Returns a new instance of DotCanvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +20
    +21
    +22
    +23
    +24
    +
    +
    # File 'src/lib/unicode_plot/dot_canvas.rb', line 20
    +
    +def initialize(width, height, **kw)
    +  super(width, height,
    +        X_PIXEL_PER_CHAR, Y_PIXEL_PER_CHAR,
    +        **kw)
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #lookup_decode(code) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +30
    +31
    +32
    +
    +
    # File 'src/lib/unicode_plot/dot_canvas.rb', line 30
    +
    +def lookup_decode(code)
    +  DOT_DECODE[code]
    +end
    +
    +
    + +
    +

    + + #lookup_encode(x, y) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +26
    +27
    +28
    +
    +
    # File 'src/lib/unicode_plot/dot_canvas.rb', line 26
    +
    +def lookup_encode(x, y)
    +  DOT_SIGNS[x][y]
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/GridPlot.html b/0.0.3/UnicodePlot/GridPlot.html new file mode 100644 index 0000000..3af61b5 --- /dev/null +++ b/0.0.3/UnicodePlot/GridPlot.html @@ -0,0 +1,866 @@ + + + + + + + Class: UnicodePlot::GridPlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::GridPlot + + + +

    +
    + +
    +
    Inherits:
    +
    + Plot + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/grid_plot.rb
    +
    + +
    + +
    +

    Direct Known Subclasses

    +

    Lineplot, Scatterplot

    +
    + + +

    + Constant Summary + collapse +

    + +
    + +
    MIN_WIDTH = + +
    +
    5
    + +
    DEFAULT_WIDTH = + +
    +
    40
    + +
    MIN_HEIGHT = + +
    +
    2
    + +
    DEFAULT_HEIGHT = + +
    +
    15
    + +
    + + + + + + +

    Constants inherited + from Plot

    +

    Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING

    + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Plot

    +

    #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from Plot

    +

    #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(x, y, canvas, width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT, xlim: [0, 0], ylim: [0, 0], grid: true, **kw) ⇒ GridPlot + + + + + +

    +
    +

    Returns a new instance of GridPlot.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 8
    +
    +def initialize(x, y, canvas,
    +               width: DEFAULT_WIDTH,
    +               height: DEFAULT_HEIGHT,
    +               xlim: [0, 0], 
    +               ylim: [0, 0],
    +               grid: true,
    +               **kw)
    +  if x.length != y.length
    +    raise ArgumentError, "x and y must be the same length"
    +  end
    +  unless x.length > 0
    +    raise ArgumentError, "x and y must not be empty"
    +  end
    +  unless xlim.length == 2 && ylim.length == 2
    +    raise ArgumentError, "xlim and ylim must be 2-length arrays"
    +  end
    +  width = [width, MIN_WIDTH].max
    +  height = [height, MIN_HEIGHT].max
    +  min_x, max_x = Utils.extend_limits(x, xlim)
    +  min_y, max_y = Utils.extend_limits(y, ylim)
    +  origin_x = min_x
    +  origin_y = min_y
    +  plot_width = max_x - origin_x
    +  plot_height = max_y - origin_y
    +  @canvas = Canvas.create(canvas, width, height,
    +                          origin_x: origin_x,
    +                          origin_y: origin_y,
    +                          plot_width: plot_width,
    +                          plot_height: plot_height)
    +  super(**kw)
    +
    +  min_x_str = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
    +  max_x_str = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
    +  min_y_str = (Utils.roundable?(min_y) ? min_y.round : min_y).to_s
    +  max_y_str = (Utils.roundable?(max_y) ? max_y.round : max_y).to_s
    +
    +  annotate_row!(:l, 0, max_y_str, color: :light_black)
    +  annotate_row!(:l, height-1, min_y_str, color: :light_black)
    +  annotate!(:bl, min_x_str, color: :light_black)
    +  annotate!(:br, max_x_str, color: :light_black)
    +
    +  if grid
    +    if min_y < 0 && 0 < max_y
    +      step = plot_width.fdiv(width * @canvas.x_pixel_per_char - 1)
    +      min_x.step(max_x, by: step) do |i|
    +        @canvas.point!(i, 0, :normal)
    +      end
    +    end
    +    if min_x < 0 && 0 < max_x
    +      step = plot_height.fdiv(height * @canvas.y_pixel_per_char - 1)
    +      min_y.step(max_y, by: step) do |i|
    +        @canvas.point!(0, i, :normal)
    +      end
    +    end
    +  end
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #lines!(x, y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +93
    +94
    +95
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 93
    +
    +def lines!(x, y, color)
    +  @canvas.lines!(x, y, color)
    +end
    +
    +
    + +
    +

    + + #n_columnsObject + + + + + +

    + + + + +
    +
    +
    +
    +85
    +86
    +87
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 85
    +
    +def n_columns
    +  @canvas.width
    +end
    +
    +
    + +
    +

    + + #n_rowsObject + + + + + +

    + + + + +
    +
    +
    +
    +81
    +82
    +83
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 81
    +
    +def n_rows
    +  @canvas.height
    +end
    +
    +
    + +
    +

    + + #origin_xObject + + + + + +

    + + + + +
    +
    +
    +
    +65
    +66
    +67
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 65
    +
    +def origin_x
    +  @canvas.origin_x
    +end
    +
    +
    + +
    +

    + + #origin_yObject + + + + + +

    + + + + +
    +
    +
    +
    +69
    +70
    +71
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 69
    +
    +def origin_y
    +  @canvas.origin_y
    +end
    +
    +
    + +
    +

    + + #plot_heightObject + + + + + +

    + + + + +
    +
    +
    +
    +77
    +78
    +79
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 77
    +
    +def plot_height
    +  @canvas.plot_height
    +end
    +
    +
    + +
    +

    + + #plot_widthObject + + + + + +

    + + + + +
    +
    +
    +
    +73
    +74
    +75
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 73
    +
    +def plot_width
    +  @canvas.plot_width
    +end
    +
    +
    + +
    +

    + + #points!(x, y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +89
    +90
    +91
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 89
    +
    +def points!(x, y, color)
    +  @canvas.points!(x, y, color)
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +97
    +98
    +99
    +
    +
    # File 'src/lib/unicode_plot/grid_plot.rb', line 97
    +
    +def print_row(out, row_index)
    +  @canvas.print_row(out, row_index)
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Lineplot.html b/0.0.3/UnicodePlot/Lineplot.html new file mode 100644 index 0000000..d8c82a7 --- /dev/null +++ b/0.0.3/UnicodePlot/Lineplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Lineplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Lineplot + + + +

    +
    + +
    +
    Inherits:
    +
    + GridPlot + +
      +
    • Object
    • + + + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/lineplot.rb
    +
    + +
    + + + + +

    Constant Summary

    + +

    Constants inherited + from GridPlot

    +

    GridPlot::DEFAULT_HEIGHT, GridPlot::DEFAULT_WIDTH, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

    + + + +

    Constants inherited + from Plot

    +

    Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING

    + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Plot

    +

    #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

    + + + + + + + + + +

    Method Summary

    + +

    Methods inherited from GridPlot

    +

    #initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

    + + + + + + + + + +

    Methods inherited from Plot

    +

    #annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +

    This class inherits a constructor from UnicodePlot::GridPlot

    + +
    + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/LookupCanvas.html b/0.0.3/UnicodePlot/LookupCanvas.html new file mode 100644 index 0000000..0a1bc56 --- /dev/null +++ b/0.0.3/UnicodePlot/LookupCanvas.html @@ -0,0 +1,425 @@ + + + + + + + Class: UnicodePlot::LookupCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::LookupCanvas + + + +

    +
    + +
    +
    Inherits:
    +
    + Canvas + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/lookup_canvas.rb
    +
    + +
    + +
    +

    Direct Known Subclasses

    +

    AsciiCanvas, DotCanvas

    +
    + + + +

    Constant Summary

    + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Canvas

    +

    #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods inherited from Canvas

    +

    #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

    + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char = 0, **kw) ⇒ LookupCanvas + + + + + +

    +
    +

    Returns a new instance of LookupCanvas.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    +
    # File 'src/lib/unicode_plot/lookup_canvas.rb', line 3
    +
    +def initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char=0, **kw)
    +  super(width, height,
    +        width * x_pixel_per_char,
    +        height * y_pixel_per_char,
    +        fill_char,
    +        x_pixel_per_char: x_pixel_per_char,
    +        y_pixel_per_char: y_pixel_per_char,
    +        **kw)
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/lookup_canvas.rb', line 13
    +
    +def pixel!(pixel_x, pixel_y, color)
    +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
    +         0 <= pixel_y && pixel_y <= pixel_height
    +    return color
    +  end
    +  pixel_x -= 1 unless pixel_x < pixel_width
    +  pixel_y -= 1 unless pixel_y < pixel_height
    +
    +  tx = pixel_x.fdiv(pixel_width) * width
    +  char_x = tx.floor + 1
    +  char_x_off = pixel_x % x_pixel_per_char + 1
    +  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
    +
    +  char_y = (pixel_y.fdiv(pixel_height) * height).floor + 1
    +  char_y_off = pixel_y % y_pixel_per_char + 1
    +
    +  index = index_at(char_x - 1, char_y - 1)
    +  if index
    +    @grid[index] |= lookup_encode(char_x_off - 1, char_y_off - 1)
    +    @colors[index] |= COLOR_ENCODE[color]
    +  end
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    +
    # File 'src/lib/unicode_plot/lookup_canvas.rb', line 36
    +
    +def print_row(out, row_index)
    +  unless 0 <= row_index && row_index < height
    +    raise ArgumentError, "row_index out of bounds"
    +  end
    +  y = row_index
    +  (0 ... width).each do |x|
    +    print_color(out, color_at(x, y), lookup_decode(char_at(x, y)))
    +  end
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Plot.html b/0.0.3/UnicodePlot/Plot.html new file mode 100644 index 0000000..52276cd --- /dev/null +++ b/0.0.3/UnicodePlot/Plot.html @@ -0,0 +1,1857 @@ + + + + + + + Class: UnicodePlot::Plot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Plot + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + +
    +
    Includes:
    +
    StyledPrinter
    +
    + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/plot.rb
    +
    + +
    + +
    +

    Direct Known Subclasses

    +

    Barplot, Boxplot, GridPlot

    +
    + + +

    + Constant Summary + collapse +

    + +
    + +
    DEFAULT_BORDER = + +
    +
    :solid
    + +
    DEFAULT_MARGIN = + +
    +
    3
    + +
    DEFAULT_PADDING = + +
    +
    1
    + +
    COLOR_CYCLE = + +
    +
    [
    +  :green,
    +  :blue,
    +  :red,
    +  :magenta,
    +  :yellow,
    +  :cyan
    +].freeze
    + +
    + + + + + + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #border ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute border.

      +
      + +
    • + + +
    • + + + #colors_deco ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute colors_deco.

      +
      + +
    • + + +
    • + + + #colors_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute colors_left.

      +
      + +
    • + + +
    • + + + #colors_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute colors_right.

      +
      + +
    • + + +
    • + + + #decorations ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute decorations.

      +
      + +
    • + + +
    • + + + #labels_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute labels_left.

      +
      + +
    • + + +
    • + + + #labels_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute labels_right.

      +
      + +
    • + + +
    • + + + #margin ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute margin.

      +
      + +
    • + + +
    • + + + #padding ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute padding.

      +
      + +
    • + + +
    • + + + #title ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute title.

      +
      + +
    • + + +
    • + + + #xlabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute xlabel.

      +
      + +
    • + + +
    • + + + #ylabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute ylabel.

      +
      + +
    • + + +
    + + + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(title: nil, xlabel: nil, ylabel: nil, border: DEFAULT_BORDER, margin: DEFAULT_MARGIN, padding: DEFAULT_PADDING, labels: true) ⇒ Plot + + + + + +

    +
    +

    Returns a new instance of Plot.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 9
    +
    +def initialize(title: nil,
    +               xlabel: nil,
    +               ylabel: nil,
    +               border: DEFAULT_BORDER,
    +               margin: DEFAULT_MARGIN,
    +               padding: DEFAULT_PADDING,
    +               labels: true)
    +  @title = title
    +  @xlabel = xlabel
    +  @ylabel = ylabel
    +  @border = border
    +  @margin = check_margin(margin)
    +  @padding = padding
    +  @labels_left = {}
    +  @colors_left = {}
    +  @labels_right = {}
    +  @colors_right = {}
    +  @decorations = {}
    +  @colors_deco = {}
    +  @show_labels = labels
    +  @auto_color = 0
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #borderObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute border.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def border
    +  @border
    +end
    +
    +
    + + + +
    +

    + + #colors_decoObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute colors_deco.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def colors_deco
    +  @colors_deco
    +end
    +
    +
    + + + +
    +

    + + #colors_leftObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute colors_left.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def colors_left
    +  @colors_left
    +end
    +
    +
    + + + +
    +

    + + #colors_rightObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute colors_right.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def colors_right
    +  @colors_right
    +end
    +
    +
    + + + +
    +

    + + #decorationsObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute decorations.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def decorations
    +  @decorations
    +end
    +
    +
    + + + +
    +

    + + #labels_leftObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute labels_left.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def labels_left
    +  @labels_left
    +end
    +
    +
    + + + +
    +

    + + #labels_rightObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute labels_right.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def labels_right
    +  @labels_right
    +end
    +
    +
    + + + +
    +

    + + #marginObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute margin.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def margin
    +  @margin
    +end
    +
    +
    + + + +
    +

    + + #paddingObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute padding.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def padding
    +  @padding
    +end
    +
    +
    + + + +
    +

    + + #titleObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute title.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def title
    +  @title
    +end
    +
    +
    + + + +
    +

    + + #xlabelObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute xlabel.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def xlabel
    +  @xlabel
    +end
    +
    +
    + + + +
    +

    + + #ylabelObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute ylabel.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +32
    +33
    +34
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 32
    +
    +def ylabel
    +  @ylabel
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #annotate!(loc, value, color: :normal) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +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
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 65
    +
    +def annotate!(loc, value, color: :normal)
    +  case loc
    +  when :l
    +    (0 ... n_rows).each do |row|
    +      if @labels_left.fetch(row, "") == ""
    +        @labels_left[row] = value
    +        @colors_left[row] = color
    +        break
    +      end
    +    end
    +  when :r
    +    (0 ... n_rows).each do |row|
    +      if @labels_right.fetch(row, "") == ""
    +        @labels_right[row] = value
    +        @colors_right[row] = color
    +        break
    +      end
    +    end
    +  when :t, :b, :tl, :tr, :bl, :br
    +    @decorations[loc] = value
    +    @colors_deco[loc] = color
    +  else
    +    raise ArgumentError,
    +      "unknown location to annotate (#{loc.inspect} for :t, :b, :l, :r, :tl, :tr, :bl, or :br)"
    +  end
    +end
    +
    +
    + +
    +

    + + #annotate_row!(loc, row_index, value, color: :normal) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 92
    +
    +def annotate_row!(loc, row_index, value, color: :normal)
    +  case loc
    +  when :l
    +    @labels_left[row_index] = value
    +    @colors_left[row_index] = color
    +  when :r
    +    @labels_right[row_index] = value
    +    @colors_right[row_index] = color
    +  else
    +    raise ArgumentError, "unknown location `#{loc}`, try :l or :r instead"
    +  end
    +end
    +
    +
    + +
    +

    + + #next_colorObject + + + + + +

    + + + + +
    +
    +
    +
    +118
    +119
    +120
    +121
    +122
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 118
    +
    +def next_color
    +  COLOR_CYCLE[@auto_color]
    +ensure
    +  @auto_color = (@auto_color + 1) % COLOR_CYCLE.length
    +end
    +
    +
    + +
    +

    + + #render(out) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +105
    +106
    +107
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 105
    +
    +def render(out)
    +  Renderer.render(out, self)
    +end
    +
    +
    + +
    +

    + + #show_labels?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +61
    +62
    +63
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 61
    +
    +def show_labels?
    +  @show_labels
    +end
    +
    +
    + +
    +

    + + #title_given?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +45
    +46
    +47
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 45
    +
    +def title_given?
    +  title && title != ""
    +end
    +
    +
    + +
    +

    + + #to_sObject + + + + + +

    + + + + +
    +
    +
    +
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 124
    +
    +def to_s
    +  StringIO.open do |sio|
    +    render(sio)
    +    sio.close
    +    sio.string
    +  end
    +end
    +
    +
    + +
    +

    + + #xlabel_given?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +49
    +50
    +51
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 49
    +
    +def xlabel_given?
    +  xlabel && xlabel != ""
    +end
    +
    +
    + +
    +

    + + #ylabel_given?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +53
    +54
    +55
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 53
    +
    +def ylabel_given?
    +  ylabel && ylabel != ""
    +end
    +
    +
    + +
    +

    + + #ylabel_lengthObject + + + + + +

    + + + + +
    +
    +
    +
    +57
    +58
    +59
    +
    +
    # File 'src/lib/unicode_plot/plot.rb', line 57
    +
    +def ylabel_length
    +  ylabel&.length || 0
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Renderer.html b/0.0.3/UnicodePlot/Renderer.html new file mode 100644 index 0000000..a30be23 --- /dev/null +++ b/0.0.3/UnicodePlot/Renderer.html @@ -0,0 +1,523 @@ + + + + + + + Class: UnicodePlot::Renderer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Renderer + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + +
    +
    Includes:
    +
    BorderPrinter
    +
    + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/renderer.rb
    +
    + +
    + + + + +

    Constant Summary

    + +

    Constants included + from StyledPrinter

    +

    StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

    + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #out ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute out.

      +
      + +
    • + + +
    • + + + #plot ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute plot.

      +
      + +
    • + + +
    + + + + + +

    + Class Method Summary + collapse +

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + + + + + + +

    Methods included from BorderPrinter

    +

    #print_border_bottom, #print_border_top

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +
    +

    + + #initialize(plot) ⇒ Renderer + + + + + +

    +
    +

    Returns a new instance of Renderer.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +66
    +67
    +68
    +69
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 66
    +
    +def initialize(plot)
    +  @plot = plot
    +  @out = nil
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #outObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute out.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +72
    +73
    +74
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 72
    +
    +def out
    +  @out
    +end
    +
    +
    + + + +
    +

    + + #plotObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute plot.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +71
    +72
    +73
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 71
    +
    +def plot
    +  @plot
    +end
    +
    +
    + +
    + + +
    +

    Class Method Details

    + + +
    +

    + + .render(out, plot) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +62
    +63
    +64
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 62
    +
    +def self.render(out, plot)
    +  new(plot).render(out)
    +end
    +
    +
    + +
    + +
    +

    Instance Method Details

    + + +
    +

    + + #render(out) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +
    +
    # File 'src/lib/unicode_plot/renderer.rb', line 74
    +
    +def render(out)
    +  @out = out
    +  init_render
    +
    +  render_top
    +  render_rows
    +  render_bottom
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Scatterplot.html b/0.0.3/UnicodePlot/Scatterplot.html new file mode 100644 index 0000000..b06fdba --- /dev/null +++ b/0.0.3/UnicodePlot/Scatterplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Scatterplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: UnicodePlot::Scatterplot + + + +

    +
    + +
    +
    Inherits:
    +
    + GridPlot + +
      +
    • Object
    • + + + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/scatterplot.rb
    +
    + +
    + + + + +

    Constant Summary

    + +

    Constants inherited + from GridPlot

    +

    GridPlot::DEFAULT_HEIGHT, GridPlot::DEFAULT_WIDTH, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

    + + + +

    Constants inherited + from Plot

    +

    Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING

    + + + +

    Constants included + from StyledPrinter

    +

    UnicodePlot::StyledPrinter::COLOR_DECODE, UnicodePlot::StyledPrinter::COLOR_ENCODE, UnicodePlot::StyledPrinter::DISABLE_TEXT_STYLE, UnicodePlot::StyledPrinter::TEXT_COLORS

    + + + + +

    Instance Attribute Summary

    + +

    Attributes inherited from Plot

    +

    #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

    + + + + + + + + + +

    Method Summary

    + +

    Methods inherited from GridPlot

    +

    #initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

    + + + + + + + + + +

    Methods inherited from Plot

    +

    #annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

    + + + + + + + + + +

    Methods included from StyledPrinter

    +

    #color?, #print_color, #print_styled

    +
    +

    Constructor Details

    + +

    This class inherits a constructor from UnicodePlot::GridPlot

    + +
    + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/StyledPrinter.html b/0.0.3/UnicodePlot/StyledPrinter.html new file mode 100644 index 0000000..babff1e --- /dev/null +++ b/0.0.3/UnicodePlot/StyledPrinter.html @@ -0,0 +1,421 @@ + + + + + + + Module: UnicodePlot::StyledPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::StyledPrinter + + + +

    +
    + + + + + + + + + +
    +
    Included in:
    +
    BorderPrinter, Plot
    +
    + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/styled_printer.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    TEXT_COLORS = + +
    +
    {
    +  black:         "\033[30m",
    +  red:           "\033[31m",
    +  green:         "\033[32m",
    +  yellow:        "\033[33m",
    +  blue:          "\033[34m",
    +  magenta:       "\033[35m",
    +  cyan:          "\033[36m",
    +  white:         "\033[37m",
    +  gray:          "\033[90m",
    +  light_black:   "\033[90m",
    +  light_red:     "\033[91m",
    +  light_green:   "\033[92m",
    +  light_yellow:  "\033[93m",
    +  light_blue:    "\033[94m",
    +  light_magenta: "\033[95m",
    +  light_cyan:    "\033[96m",
    +  normal:        "\033[0m",
    +  default:       "\033[39m",
    +  bold:          "\033[1m",
    +  underline:     "\033[4m",
    +  blink:         "\033[5m",
    +  reverse:       "\033[7m",
    +  hidden:        "\033[8m",
    +  nothing:       "",
    +}
    + +
    DISABLE_TEXT_STYLE = + +
    +
    {
    +  bold:      "\033[22m",
    +  underline: "\033[24m",
    +  blink:     "\033[25m",
    +  reverse:   "\033[27m",
    +  hidden:    "\033[28m",
    +  normal:    "",
    +  default:   "",
    +  nothing:   "",
    +}.freeze
    + +
    COLOR_ENCODE = + +
    +
    {
    +  normal:  0b000,
    +  blue:    0b001,
    +  red:     0b010,
    +  magenta: 0b011,
    +  green:   0b100,
    +  cyan:    0b101,
    +  yellow:  0b110,
    +  white:   0b111
    +}.freeze
    + +
    COLOR_DECODE = + +
    +
    COLOR_ENCODE.map {|k, v| [v, k] }.to_h.freeze
    + +
    + + + + + + + + + +

    + Instance Method Summary + collapse +

    + + + + + + +
    +

    Instance Method Details

    + + +
    +

    + + #color?(out) ⇒ Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +87
    +88
    +89
    +
    +
    # File 'src/lib/unicode_plot/styled_printer.rb', line 87
    +
    +def color?(out)
    +  out&.tty? || false
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +82
    +83
    +84
    +85
    +
    +
    # File 'src/lib/unicode_plot/styled_printer.rb', line 82
    +
    +def print_color(out, color, *args)
    +  color = COLOR_DECODE[color]
    +  print_styled(out, *args, color: color)
    +end
    +
    +
    + +
    + + + + + +
    +
    +
    +
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +
    +
    # File 'src/lib/unicode_plot/styled_printer.rb', line 60
    +
    +def print_styled(out, *args, bold: false, color: :normal)
    +  return out.print(*args) unless color?(out)
    +
    +  str = StringIO.open {|sio| sio.print(*args); sio.close; sio.string }
    +  color = :nothing if bold && color == :bold
    +  enable_ansi = TEXT_COLORS.fetch(color, TEXT_COLORS[:default]) +
    +                (bold ? TEXT_COLORS[:bold] : "")
    +  disable_ansi = (bold ? DISABLE_TEXT_STYLE[:bold] : "") +
    +                 DISABLE_TEXT_STYLE.fetch(color, TEXT_COLORS[:default])
    +  first = true
    +  StringIO.open do |sio|
    +    str.each_line do |line|
    +      sio.puts unless first
    +      first = false
    +      continue if line.empty?
    +      sio.print(enable_ansi, line, disable_ansi)
    +    end
    +    sio.close
    +    out.print(sio.string)
    +  end
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Utils.html b/0.0.3/UnicodePlot/Utils.html new file mode 100644 index 0000000..cae2eee --- /dev/null +++ b/0.0.3/UnicodePlot/Utils.html @@ -0,0 +1,613 @@ + + + + + + + Module: UnicodePlot::Utils + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::Utils + + + +

    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/utils.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    INT64_MIN = + +
    +
    -9223372036854775808
    + +
    INT64_MAX = + +
    +
    9223372036854775807
    + +
    + + + + + + + + + +

    + Class Method Summary + collapse +

    + + + + + + +
    +

    Class Method Details

    + + +
    +

    + + .ceil_neg_log10(x) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 59
    +
    +def ceil_neg_log10(x)
    +  if roundable?(-Math.log10(x))
    +    (-Math.log10(x)).ceil
    +  else
    +    (-Math.log10(x)).floor
    +  end
    +end
    +
    +
    + +
    +

    + + .extend_limits(values, limits) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 5
    +
    +def extend_limits(values, limits)
    +  mi, ma = limits.minmax.map(&:to_f)
    +  if mi == 0 && ma == 0
    +    mi, ma = values.minmax.map(&:to_f)
    +  end
    +  diff = ma - mi
    +  if diff == 0
    +    ma = mi + 1
    +    mi = mi - 1
    +  end
    +  if limits == [0, 0]
    +    plotting_range_narrow(mi, ma)
    +  else
    +    [mi, ma]
    +  end
    +end
    +
    +
    + +
    +

    + + .float_round_log10(x, m) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 29
    +
    +def float_round_log10(x, m)
    +  if x == 0
    +    0.0
    +  elsif x > 0
    +    x.round(ceil_neg_log10(m) + 1).to_f
    +  else
    +    -(-x).round(ceil_neg_log10(m) + 1).to_f
    +  end
    +end
    +
    +
    + +
    +

    + + .plotting_range_narrow(xmin, xmax) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +22
    +23
    +24
    +25
    +26
    +27
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 22
    +
    +def plotting_range_narrow(xmin, xmax)
    +  diff = xmax - xmin
    +  xmax = round_up_subtick(xmax, diff)
    +  xmin = round_down_subtick(xmin, diff)
    +  [xmin.to_f, xmax.to_f]
    +end
    +
    +
    + +
    +

    + + .round_down_subtick(x, m) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 49
    +
    +def round_down_subtick(x, m)
    +  if x == 0
    +    0.0
    +  elsif x > 0
    +    x.floor(ceil_neg_log10(m) + 1)
    +  else
    +    -(-x).ceil(ceil_neg_log10(m) + 1)
    +  end
    +end
    +
    +
    + +
    +

    + + .round_up_subtick(x, m) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 39
    +
    +def round_up_subtick(x, m)
    +  if x == 0
    +    0.0
    +  elsif x > 0
    +    x.ceil(ceil_neg_log10(m) + 1)
    +  else
    +    -(-x).floor(ceil_neg_log10(m) + 1)
    +  end
    +end
    +
    +
    + +
    +

    + + .roundable?(x) ⇒ Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +70
    +71
    +72
    +
    +
    # File 'src/lib/unicode_plot/utils.rb', line 70
    +
    +def roundable?(x)
    +  x.to_i == x && INT64_MIN <= x && x < INT64_MAX
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/ValueTransformer.html b/0.0.3/UnicodePlot/ValueTransformer.html new file mode 100644 index 0000000..797bcd2 --- /dev/null +++ b/0.0.3/UnicodePlot/ValueTransformer.html @@ -0,0 +1,317 @@ + + + + + + + Module: UnicodePlot::ValueTransformer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::ValueTransformer + + + +

    +
    + + + + + + + + + +
    +
    Included in:
    +
    Barplot
    +
    + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/value_transformer.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    PREDEFINED_TRANSFORM_FUNCTIONS = + +
    +
    {
    +  log: Math.method(:log),
    +  ln: Math.method(:log),
    +  log10: Math.method(:log10),
    +  lg: Math.method(:log10),
    +  log2: Math.method(:log2),
    +  lb: Math.method(:log2),
    +}.freeze
    + +
    + + + + + + + + + +

    + Class Method Summary + collapse +

    + + + +

    + Instance Method Summary + collapse +

    + + + + + + +
    +

    Class Method Details

    + + +
    +

    + + .transform_name(func, basename = "") ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    +
    # File 'src/lib/unicode_plot/value_transformer.rb', line 30
    +
    +module_function def transform_name(func, basename="")
    +  return basename unless func
    +  case func
    +  when String, Symbol
    +    name = func
    +  when ->(f) { f.respond_to?(:name) }
    +    name = func.name
    +  else
    +    name = "custom"
    +  end
    +  "#{basename} [#{name}]"
    +end
    +
    +
    + +
    + +
    +

    Instance Method Details

    + + +
    +

    + + #transform_values(func, values) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    +
    # File 'src/lib/unicode_plot/value_transformer.rb', line 12
    +
    +def transform_values(func, values)
    +  return values unless func
    +
    +  unless func.respond_to?(:call)
    +    func = PREDEFINED_TRANSFORM_FUNCTIONS[func]
    +    unless func.respond_to?(:call)
    +      raise ArgumentError, "func must be callable"
    +    end
    +  end
    +
    +  case values
    +  when Numeric
    +    func.(values)
    +  else
    +    values.map(&func)
    +  end
    +end
    +
    +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/UnicodePlot/Version.html b/0.0.3/UnicodePlot/Version.html new file mode 100644 index 0000000..63f2738 --- /dev/null +++ b/0.0.3/UnicodePlot/Version.html @@ -0,0 +1,121 @@ + + + + + + + Module: UnicodePlot::Version + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Module: UnicodePlot::Version + + + +

    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    src/lib/unicode_plot/version.rb
    +
    + +
    + + + +

    + Constant Summary + collapse +

    + +
    + +
    STRING = + +
    +
    VERSION
    + +
    + + + + + + + + + + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/_index.html b/0.0.3/_index.html new file mode 100644 index 0000000..d321aec --- /dev/null +++ b/0.0.3/_index.html @@ -0,0 +1,329 @@ + + + + + + + Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
    + + +

    Documentation by YARD 0.9.26

    +
    +

    Alphabetic Index

    + +

    File Listing

    + + +
    +

    Namespace Listing A-Z

    + + + + + + + + +
    + + + + + + + + +
      +
    • C
    • +
        + +
      • + Canvas + + (UnicodePlot) + +
      • + +
      +
    + + + + + +
      +
    • G
    • +
        + +
      • + GridPlot + + (UnicodePlot) + +
      • + +
      +
    + + + + + +
      +
    • P
    • +
        + +
      • + Plot + + (UnicodePlot) + +
      • + +
      +
    + + +
    + + +
      +
    • R
    • +
        + +
      • + Renderer + + (UnicodePlot) + +
      • + +
      +
    + + + + + + + + + + +
    + +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/0.0.3/class_list.html b/0.0.3/class_list.html new file mode 100644 index 0000000..24da60d --- /dev/null +++ b/0.0.3/class_list.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + Class List + + + +
    +
    +

    Class List

    + + + +
    + + +
    + + diff --git a/0.0.3/css/common.css b/0.0.3/css/common.css new file mode 100644 index 0000000..cf25c45 --- /dev/null +++ b/0.0.3/css/common.css @@ -0,0 +1 @@ +/* Override this file with custom rules */ \ No newline at end of file diff --git a/0.0.3/css/full_list.css b/0.0.3/css/full_list.css new file mode 100644 index 0000000..fa35982 --- /dev/null +++ b/0.0.3/css/full_list.css @@ -0,0 +1,58 @@ +body { + margin: 0; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + height: 101%; + overflow-x: hidden; + background: #fafafa; +} + +h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; } +.clear { clear: both; } +.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; } +#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; } +#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; } +#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; } +#full_list ul { padding: 0; } +#full_list li { padding: 0; margin: 0; list-style: none; } +#full_list li .item { padding: 5px 5px 5px 12px; } +#noresults { padding: 7px 12px; background: #fff; } +#content.insearch #noresults { margin-left: 7px; } +li.collapsed ul { display: none; } +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; } +li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; } +li { color: #888; cursor: pointer; } +li.deprecated { text-decoration: line-through; font-style: italic; } +li.odd { background: #f0f0f0; } +li.even { background: #fafafa; } +.item:hover { background: #ddd; } +li small:before { content: "("; } +li small:after { content: ")"; } +li small.search_info { display: none; } +a, a:visited { text-decoration: none; color: #05a; } +li.clicked > .item { background: #05a; color: #ccc; } +li.clicked > .item a, li.clicked > .item a:visited { color: #eee; } +li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; } +li.collapsed.clicked a.toggle { background-position: top right; } +#search input { border: 1px solid #bbb; border-radius: 3px; } +#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; } +#full_list_nav a, #nav a:visited { color: #358; } +#full_list_nav a:hover { background: transparent; color: #5af; } +#full_list_nav span:after { content: ' | '; } +#full_list_nav span:last-child:after { content: ''; } + +#content h1 { margin-top: 0; } +li { white-space: nowrap; cursor: normal; } +li small { display: block; font-size: 0.8em; } +li small:before { content: ""; } +li small:after { content: ""; } +li small.search_info { display: none; } +#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; } +#content.insearch #search { background-position: center right; } +#search input { width: 110px; } + +#full_list.insearch ul { display: block; } +#full_list.insearch .item { display: none; } +#full_list.insearch .found { display: block; padding-left: 11px !important; } +#full_list.insearch li a.toggle { display: none; } +#full_list.insearch li small.search_info { display: block; } diff --git a/0.0.3/css/style.css b/0.0.3/css/style.css new file mode 100644 index 0000000..eb0dbc8 --- /dev/null +++ b/0.0.3/css/style.css @@ -0,0 +1,497 @@ +html { + width: 100%; + height: 100%; +} +body { + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + width: 100%; + margin: 0; + padding: 0; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} + +#nav { + position: relative; + width: 100%; + height: 100%; + border: 0; + border-right: 1px dotted #eee; + overflow: auto; +} +.nav_wrap { + margin: 0; + padding: 0; + width: 20%; + height: 100%; + position: relative; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; + flex-shrink: 0; + -webkit-flex-shrink: 0; + -ms-flex: 1 0; +} +#resizer { + position: absolute; + right: -5px; + top: 0; + width: 10px; + height: 100%; + cursor: col-resize; + z-index: 9999; +} +#main { + flex: 5 1; + -webkit-flex: 5 1; + -ms-flex: 5 1; + outline: none; + position: relative; + background: #fff; + padding: 1.2em; + padding-top: 0.2em; + box-sizing: border-box; +} + +@media (max-width: 920px) { + .nav_wrap { width: 100%; top: 0; right: 0; overflow: visible; position: absolute; } + #resizer { display: none; } + #nav { + z-index: 9999; + background: #fff; + display: none; + position: absolute; + top: 40px; + right: 12px; + width: 500px; + max-width: 80%; + height: 80%; + overflow-y: scroll; + border: 1px solid #999; + border-collapse: collapse; + box-shadow: -7px 5px 25px #aaa; + border-radius: 2px; + } +} + +@media (min-width: 920px) { + body { height: 100%; overflow: hidden; } + #main { height: 100%; overflow: auto; } + #search { display: none; } +} + +#main img { max-width: 100%; } +h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; } +h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; } +h1.title { margin-bottom: 10px; } +h1.alphaindex { margin-top: 0; font-size: 22px; } +h2 { + padding: 0; + padding-bottom: 3px; + border-bottom: 1px #aaa solid; + font-size: 1.4em; + margin: 1.8em 0 0.5em; + position: relative; +} +h2 small { font-weight: normal; font-size: 0.7em; display: inline; position: absolute; right: 0; } +h2 small a { + display: block; + height: 20px; + border: 1px solid #aaa; + border-bottom: 0; + border-top-left-radius: 5px; + background: #f8f8f8; + position: relative; + padding: 2px 7px; +} +.clear { clear: both; } +.inline { display: inline; } +.inline p:first-child { display: inline; } +.docstring, .tags, #filecontents { font-size: 15px; line-height: 1.5145em; } +.docstring p > code, .docstring p > tt, .tags p > code, .tags p > tt { + color: #c7254e; background: #f9f2f4; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; } +.docstring h1 { font-size: 1.2em; } +.docstring h2 { font-size: 1.1em; } +.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; } +.summary_desc .object_link a, .docstring .object_link a { + font-family: monospace; font-size: 1.05em; + color: #05a; background: #EDF4FA; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.rdoc-term { padding-right: 25px; font-weight: bold; } +.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; } +.summary_desc pre.code .object_link a, .docstring pre.code .object_link a { + padding: 0px; background: inherit; color: inherit; border-radius: inherit; +} + +/* style for */ +#filecontents table, .docstring table { border-collapse: collapse; } +#filecontents table th, #filecontents table td, +.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; } +#filecontents table tr:nth-child(odd), +.docstring table tr:nth-child(odd) { background: #eee; } +#filecontents table tr:nth-child(even), +.docstring table tr:nth-child(even) { background: #fff; } +#filecontents table th, .docstring table th { background: #fff; } + +/* style for
      */ +#filecontents li > p, .docstring li > p { margin: 0px; } +#filecontents ul, .docstring ul { padding-left: 20px; } +/* style for
      */ +#filecontents dl, .docstring dl { border: 1px solid #ccc; } +#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; } +#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; } +#filecontents dd > p, .docstring dd > p { margin: 0px; } + +.note { + color: #222; + margin: 20px 0; + padding: 10px; + border: 1px solid #eee; + border-radius: 3px; + display: block; +} +.docstring .note { + border-left-color: #ccc; + border-left-width: 5px; +} +.note.todo { background: #ffffc5; border-color: #ececaa; } +.note.returns_void { background: #efefef; } +.note.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.title.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.private { background: #ffffc5; border-color: #ececaa; } +.note.title { padding: 3px 6px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; } +.summary_signature + .note.title { margin-left: 7px; } +h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; } +.note.title { background: #efefef; } +.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; } +.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.private { background: #d5d5d5; border-color: #c5c5c5; } +.note.title.not_defined_here { background: transparent; border: none; font-style: italic; } +.discussion .note { margin-top: 6px; } +.discussion .note:first-child { margin-top: 0; } + +h3.inherited { + font-style: italic; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + padding: 0; + margin: 0; + margin-top: 12px; + margin-bottom: 3px; + font-size: 13px; +} +p.inherited { + padding: 0; + margin: 0; + margin-left: 25px; +} + +.box_info dl { + margin: 0; + border: 0; + width: 100%; + font-size: 1em; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} +.box_info dl dt { + flex-shrink: 0; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + width: 100px; + text-align: right; + font-weight: bold; + border: 1px solid #aaa; + border-width: 1px 0px 0px 1px; + padding: 6px 0; + padding-right: 10px; +} +.box_info dl dd { + flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex: 1; + max-width: 420px; + padding: 6px 0; + padding-right: 20px; + border: 1px solid #aaa; + border-width: 1px 1px 0 0; + overflow: hidden; + position: relative; +} +.box_info dl:last-child > * { + border-bottom: 1px solid #aaa; +} +.box_info dl:nth-child(odd) > * { background: #eee; } +.box_info dl:nth-child(even) > * { background: #fff; } +.box_info dl > * { margin: 0; } + +ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; } +.index_inline_list { padding-left: 0; font-size: 1.1em; } + +.index_inline_list li { + list-style: none; + display: inline-block; + padding: 0 12px; + line-height: 30px; + margin-bottom: 5px; +} + +dl.constants { margin-left: 10px; } +dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; } +dl.constants.compact dt { display: inline-block; font-weight: normal } +dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; } +dl.constants .docstring .note:first-child { margin-top: 5px; } + +.summary_desc { + margin-left: 32px; + display: block; + font-family: sans-serif; + font-size: 1.1em; + margin-top: 8px; + line-height: 1.5145em; + margin-bottom: 0.8em; +} +.summary_desc tt { font-size: 0.9em; } +dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; } +dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; } +dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; } +dl.constants .discussion *:first-child { margin-top: 0; } +dl.constants .discussion *:last-child { margin-bottom: 0; } + +.method_details { border-top: 1px dotted #ccc; margin-top: 25px; padding-top: 0; } +.method_details.first { border: 0; margin-top: 5px; } +.method_details.first h3.signature { margin-top: 1em; } +p.signature, h3.signature { + font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace; + padding: 6px 10px; margin-top: 1em; + background: #E8F4FF; border: 1px solid #d8d8e5; border-radius: 5px; +} +p.signature tt, +h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; } +p.signature .overload, +h3.signature .overload { display: block; } +p.signature .extras, +h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; } +p.signature .not_defined_here, +h3.signature .not_defined_here, +p.signature .aliases, +h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; } +p.signature .aliases .names, +h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; } + +.tags .tag_title { font-size: 1.05em; margin-bottom: 0; font-weight: bold; } +.tags .tag_title tt { color: initial; padding: initial; background: initial; } +.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; } +.tags ul li { margin-bottom: 3px; } +.tags ul .name { font-family: monospace; font-weight: bold; } +.tags ul .note { padding: 3px 6px; } +.tags { margin-bottom: 12px; } + +.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; } +.tags .examples .inline p { padding: 0; margin: 0; font-weight: bold; font-size: 1em; } +.tags .examples .inline p:before { content: "▸"; font-size: 1em; margin-right: 5px; } + +.tags .overload .overload_item { list-style: none; margin-bottom: 25px; } +.tags .overload .overload_item .signature { + padding: 2px 8px; + background: #F1F8FF; border: 1px solid #d8d8e5; border-radius: 3px; +} +.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; } +.tags .overload .docstring { margin-top: 15px; } + +.defines { display: none; } + +#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; } + +.showSource { font-size: 0.9em; } +.showSource a, .showSource a:visited { text-decoration: none; color: #666; } + +#content a, #content a:visited { text-decoration: none; color: #05a; } +#content a:hover { background: #ffffa5; } + +ul.summary { + list-style: none; + font-family: monospace; + font-size: 1em; + line-height: 1.5em; + padding-left: 0px; +} +ul.summary a, ul.summary a:visited { + text-decoration: none; font-size: 1.1em; +} +ul.summary li { margin-bottom: 5px; } +.summary_signature { padding: 4px 8px; background: #f8f8f8; border: 1px solid #f0f0f0; border-radius: 5px; } +.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; } +.summary_signature.deprecated { background: #ffe5e5; border-color: #e9dada; } +ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;} +ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; } +#content .summary_signature:hover a, +#content .summary_signature:hover a:visited { + background: transparent; + color: #049; +} + +p.inherited a { font-family: monospace; font-size: 0.9em; } +p.inherited { word-spacing: 5px; font-size: 1.2em; } + +p.children { font-size: 1.2em; } +p.children a { font-size: 0.9em; } +p.children strong { font-size: 0.8em; } +p.children strong.modules { padding-left: 5px; } + +ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; } +ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; } +ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,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) no-repeat top center; } +ul.fullTree li:first-child { padding-top: 0; background: transparent; } +ul.fullTree li:last-child { padding-bottom: 0; } +.showAll ul.fullTree { display: block; } +.showAll .inheritName { display: none; } + +#search { position: absolute; right: 12px; top: 0px; z-index: 9000; } +#search a { + display: block; float: left; + padding: 4px 8px; text-decoration: none; color: #05a; fill: #05a; + border: 1px solid #d8d8e5; + border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; + background: #F1F8FF; + box-shadow: -1px 1px 3px #ddd; +} +#search a:hover { background: #f5faff; color: #06b; fill: #06b; } +#search a.active { + background: #568; padding-bottom: 20px; color: #fff; fill: #fff; + border: 1px solid #457; + border-top-left-radius: 5px; border-top-right-radius: 5px; +} +#search a.inactive { color: #999; fill: #999; } +.inheritanceTree, .toggleDefines { + float: right; + border-left: 1px solid #aaa; + position: absolute; top: 0; right: 0; + height: 100%; + background: #f6f6f6; + padding: 5px; + min-width: 55px; + text-align: center; +} + +#menu { font-size: 1.3em; color: #bbb; } +#menu .title, #menu a { font-size: 0.7em; } +#menu .title a { font-size: 1em; } +#menu .title { color: #555; } +#menu a, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; } +#menu a:hover { color: #05a; } + +#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; } +#footer a, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; } +#footer a:hover { color: #05a; } + +#listing ul.alpha { font-size: 1.1em; } +#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; } +#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; } +#listing ul.alpha ul { margin: 0; padding-left: 15px; } +#listing ul small { color: #666; font-size: 0.7em; } + +li.r1 { background: #f0f0f0; } +li.r2 { background: #fafafa; } + +#content ul.summary li.deprecated .summary_signature a, +#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; } + +#toc { + position: relative; + float: right; + overflow-x: auto; + right: -3px; + margin-left: 20px; + margin-bottom: 20px; + padding: 20px; padding-right: 30px; + max-width: 300px; + z-index: 5000; + background: #fefefe; + border: 1px solid #ddd; + box-shadow: -2px 2px 6px #bbb; +} +#toc .title { margin: 0; } +#toc ol { padding-left: 1.8em; } +#toc li { font-size: 1.1em; line-height: 1.7em; } +#toc > ol > li { font-size: 1.1em; font-weight: bold; } +#toc ol > li > ol { font-size: 0.9em; } +#toc ol ol > li > ol { padding-left: 2.3em; } +#toc ol + li { margin-top: 0.3em; } +#toc.hidden { padding: 10px; background: #fefefe; box-shadow: none; } +#toc.hidden:hover { background: #fafafa; } +#filecontents h1 + #toc.nofloat { margin-top: 0; } +@media (max-width: 560px) { + #toc { + margin-left: 0; + margin-top: 16px; + float: none; + max-width: none; + } +} + +/* syntax highlighting */ +.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; } +#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; } +#filecontents pre.code, .docstring pre.code { display: block; } +.source_code .lines { padding-right: 12px; color: #555; text-align: right; } +#filecontents pre.code, .docstring pre.code, +.tags pre.example { + padding: 9px 14px; + margin-top: 4px; + border: 1px solid #e1e1e8; + background: #f7f7f9; + border-radius: 4px; + font-size: 1em; + overflow-x: auto; + line-height: 1.2em; +} +pre.code { color: #000; tab-size: 2; } +pre.code .info.file { color: #555; } +pre.code .val { color: #036A07; } +pre.code .tstring_content, +pre.code .heredoc_beg, pre.code .heredoc_end, +pre.code .qwords_beg, pre.code .qwords_end, pre.code .qwords_sep, +pre.code .words_beg, pre.code .words_end, pre.code .words_sep, +pre.code .qsymbols_beg, pre.code .qsymbols_end, pre.code .qsymbols_sep, +pre.code .symbols_beg, pre.code .symbols_end, pre.code .symbols_sep, +pre.code .tstring, pre.code .dstring { color: #036A07; } +pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s, +pre.code .rubyid_to_sym, pre.code .rubyid_to_f, +pre.code .dot + pre.code .id, +pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; } +pre.code .comment { color: #0066FF; } +pre.code .const, pre.code .constant { color: #585CF6; } +pre.code .label, +pre.code .symbol { color: #C5060B; } +pre.code .kw, +pre.code .rubyid_require, +pre.code .rubyid_extend, +pre.code .rubyid_include { color: #0000FF; } +pre.code .ivar { color: #318495; } +pre.code .gvar, +pre.code .rubyid_backref, +pre.code .rubyid_nth_ref { color: #6D79DE; } +pre.code .regexp, .dregexp { color: #036A07; } +pre.code a { border-bottom: 1px dotted #bbf; } +/* inline code */ +*:not(pre) > code { + padding: 1px 3px 1px 3px; + border: 1px solid #E1E1E8; + background: #F7F7F9; + border-radius: 4px; +} + +/* Color fix for links */ +#content .summary_desc pre.code .id > .object_link a, /* identifier */ +#content .docstring pre.code .id > .object_link a { color: #0085FF; } +#content .summary_desc pre.code .const > .object_link a, /* constant */ +#content .docstring pre.code .const > .object_link a { color: #585CF6; } diff --git a/0.0.3/file.CHANGES.html b/0.0.3/file.CHANGES.html new file mode 100644 index 0000000..73900f0 --- /dev/null +++ b/0.0.3/file.CHANGES.html @@ -0,0 +1,91 @@ + + + + + + + File: CHANGES + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      master

      + +
        +
      • Add histogram support
      • +
      • Add barplot! method
      • +
      • Add scatterplot support
      • +
      • Add densityplot support
      • +
      + +

      0.0.2

      + +
        +
      • Add boxplot support
      • +
      + +

      0.0.1

      + +
        +
      • Add barplot support
      • +
      • Add lineplot support
      • +
      +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.3/file.LICENSE.html b/0.0.3/file.LICENSE.html new file mode 100644 index 0000000..084ca1a --- /dev/null +++ b/0.0.3/file.LICENSE.html @@ -0,0 +1,70 @@ + + + + + + + File: LICENSE + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +
      The MIT License (MIT)
      Copyright © 2019 Kenta Murata

      Permission is hereby granted, free of charge, to any person obtaining a copy
      of this software and associated documentation files (the “Software”), to deal
      in the Software without restriction, including without limitation the rights
      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      copies of the Software, and to permit persons to whom the Software is
      furnished to do so, subject to the following conditions:

      The above copyright notice and this permission notice shall be included in
      all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      THE SOFTWARE.
      + + + +
      + + \ No newline at end of file diff --git a/0.0.3/file.README.html b/0.0.3/file.README.html new file mode 100644 index 0000000..71ee5e0 --- /dev/null +++ b/0.0.3/file.README.html @@ -0,0 +1,120 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      UnicodePlot - Plot your data by Unicode characters

      + +

      UnicodePlot provides the feature to make charts with Unicode characters.

      + +

      Install

      + +
      $ gem install unicode_plot
      +
      + +

      Usage

      + +
      require 'unicode_plot'
      +
      +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
      +y_sin = x.map {|xi| Math.sin(xi) }
      +y_cos = x.map {|xi| Math.cos(xi) }
      +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
      +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
      +plot.render($stdout)
      +puts
      +
      + +

      You can get the results below by running the above script:

      + +

      + +

      Supported charts

      + +
        +
      • barplot
      • +
      • boxplot
      • +
      • densityplot
      • +
      • histogram
      • +
      • lineplot
      • +
      • scatterplot
      • +
      + +

      Acknowledgement

      + +

      This library is strongly inspired by UnicodePlot.jl.

      + +

      License

      + +

      MIT License

      + +

      Author

      + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.3/file_list.html b/0.0.3/file_list.html new file mode 100644 index 0000000..8bdafe2 --- /dev/null +++ b/0.0.3/file_list.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + File List + + + +
      +
      +

      File List

      + + + +
      + + +
      + + diff --git a/0.0.3/frames.html b/0.0.3/frames.html new file mode 100644 index 0000000..1310783 --- /dev/null +++ b/0.0.3/frames.html @@ -0,0 +1,17 @@ + + + + + Documentation by YARD 0.9.26 + + + + diff --git a/0.0.3/img/lineplot.png b/0.0.3/img/lineplot.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7b9bad02f412b570fd2ccf88557f8e872d0a52 GIT binary patch literal 37632 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 z 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 IJ0?&5FC)%i9{>OV literal 0 HcmV?d00001 diff --git a/0.0.3/index.html b/0.0.3/index.html new file mode 100644 index 0000000..3e0d804 --- /dev/null +++ b/0.0.3/index.html @@ -0,0 +1,120 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      UnicodePlot - Plot your data by Unicode characters

      + +

      UnicodePlot provides the feature to make charts with Unicode characters.

      + +

      Install

      + +
      $ gem install unicode_plot
      +
      + +

      Usage

      + +
      require 'unicode_plot'
      +
      +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
      +y_sin = x.map {|xi| Math.sin(xi) }
      +y_cos = x.map {|xi| Math.cos(xi) }
      +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
      +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
      +plot.render($stdout)
      +puts
      +
      + +

      You can get the results below by running the above script:

      + +

      + +

      Supported charts

      + +
        +
      • barplot
      • +
      • boxplot
      • +
      • densityplot
      • +
      • histogram
      • +
      • lineplot
      • +
      • scatterplot
      • +
      + +

      Acknowledgement

      + +

      This library is strongly inspired by UnicodePlot.jl.

      + +

      License

      + +

      MIT License

      + +

      Author

      + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.3/js/app.js b/0.0.3/js/app.js new file mode 100644 index 0000000..8d067fe --- /dev/null +++ b/0.0.3/js/app.js @@ -0,0 +1,314 @@ +(function() { + +var localStorage = {}, sessionStorage = {}; +try { localStorage = window.localStorage; } catch (e) { } +try { sessionStorage = window.sessionStorage; } catch (e) { } + +function createSourceLinks() { + $('.method_details_list .source_code'). + before("[View source]"); + $('.toggleSource').toggle(function() { + $(this).parent().nextAll('.source_code').slideDown(100); + $(this).text("Hide source"); + }, + function() { + $(this).parent().nextAll('.source_code').slideUp(100); + $(this).text("View source"); + }); +} + +function createDefineLinks() { + var tHeight = 0; + $('.defines').after(" more..."); + $('.toggleDefines').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).prev().css('display', 'inline'); + $(this).parent().prev().height($(this).parent().height()); + $(this).text("(less)"); + }, + function() { + $(this).prev().hide(); + $(this).parent().prev().height(tHeight); + $(this).text("more..."); + }); +} + +function createFullTreeLinks() { + var tHeight = 0; + $('.inheritanceTree').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).parent().toggleClass('showAll'); + $(this).text("(hide)"); + $(this).parent().prev().height($(this).parent().height()); + }, + function() { + $(this).parent().toggleClass('showAll'); + $(this).parent().prev().height(tHeight); + $(this).text("show all"); + }); +} + +function searchFrameButtons() { + $('.full_list_link').click(function() { + toggleSearchFrame(this, $(this).attr('href')); + return false; + }); + window.addEventListener('message', function(e) { + if (e.data === 'navEscape') { + $('#nav').slideUp(100); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); + + $(window).resize(function() { + if ($('#search:visible').length === 0) { + $('#nav').removeAttr('style'); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); +} + +function toggleSearchFrame(id, link) { + var frame = $('#nav'); + $('#search a').removeClass('active').addClass('inactive'); + if (frame.attr('src') === link && frame.css('display') !== "none") { + frame.slideUp(100); + $('#search a').removeClass('active inactive'); + } + else { + $(id).addClass('active').removeClass('inactive'); + if (frame.attr('src') !== link) frame.attr('src', link); + frame.slideDown(100); + } +} + +function linkSummaries() { + $('.summary_signature').click(function() { + document.location = $(this).find('a').attr('href'); + }); +} + +function summaryToggle() { + $('.summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('ul.summary').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('ul.summary').first().toggle(); + } + else if (next.hasClass('summary')) { + var list = $('
        '); + list.html(next.html()); + list.find('.summary_desc, .note').remove(); + list.find('a').each(function() { + $(this).html($(this).find('strong').html()); + $(this).parent().html($(this)[0].outerHTML); + }); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function constantSummaryToggle() { + $('.constants_summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.constants_summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('dl.constants').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('dl.constants').first().toggle(); + } + else if (next.hasClass('constants')) { + var list = $('
        '); + list.html(next.html()); + list.find('dt').each(function() { + $(this).addClass('summary_signature'); + $(this).text( $(this).text().split('=')[0]); + if ($(this).has(".deprecated").length) { + $(this).addClass('deprecated'); + }; + }); + // Add the value of the constant as "Tooltip" to the summary object + list.find('pre.code').each(function() { + console.log($(this).parent()); + var dt_element = $(this).parent().prev(); + var tooltip = $(this).text(); + if (dt_element.hasClass("deprecated")) { + tooltip = 'Deprecated. ' + tooltip; + }; + dt_element.attr('title', tooltip); + }); + list.find('.docstring, .tags, dd').remove(); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.constants_summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function generateTOC() { + if ($('#filecontents').length === 0) return; + var _toc = $('
          '); + var show = false; + var toc = _toc; + var counter = 0; + var tags = ['h2', 'h3', 'h4', 'h5', 'h6']; + var i; + var curli; + if ($('#filecontents h1').length > 1) tags.unshift('h1'); + for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; } + var lastTag = parseInt(tags[0][1], 10); + $(tags.join(', ')).each(function() { + if ($(this).parents('.method_details .docstring').length != 0) return; + if (this.id == "filecontents") return; + show = true; + var thisTag = parseInt(this.tagName[1], 10); + if (this.id.length === 0) { + var proposedId = $(this).attr('toc-id'); + if (typeof(proposedId) != "undefined") this.id = proposedId; + else { + var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_'); + if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; } + this.id = proposedId; + } + } + if (thisTag > lastTag) { + for (i = 0; i < thisTag - lastTag; i++) { + if ( typeof(curli) == "undefined" ) { + curli = $('
        1. '); + toc.append(curli); + } + toc = $('
            '); + curli.append(toc); + curli = undefined; + } + } + if (thisTag < lastTag) { + for (i = 0; i < lastTag - thisTag; i++) { + toc = toc.parent(); + toc = toc.parent(); + } + } + var title = $(this).attr('toc-title'); + if (typeof(title) == "undefined") title = $(this).text(); + curli =$('
          1. ' + title + '
          2. '); + toc.append(curli); + lastTag = thisTag; + }); + if (!show) return; + html = ''; + $('#content').prepend(html); + $('#toc').append(_toc); + $('#toc .hide_toc').toggle(function() { + $('#toc .top').slideUp('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }, function() { + $('#toc .top').slideDown('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }); +} + +function navResizeFn(e) { + if (e.which !== 1) { + navResizeFnStop(); + return; + } + + sessionStorage.navWidth = e.pageX.toString(); + $('.nav_wrap').css('width', e.pageX); + $('.nav_wrap').css('-ms-flex', 'inherit'); +} + +function navResizeFnStop() { + $(window).unbind('mousemove', navResizeFn); + window.removeEventListener('message', navMessageFn, false); +} + +function navMessageFn(e) { + if (e.data.action === 'mousemove') navResizeFn(e.data.event); + if (e.data.action === 'mouseup') navResizeFnStop(); +} + +function navResizer() { + $('#resizer').mousedown(function(e) { + e.preventDefault(); + $(window).mousemove(navResizeFn); + window.addEventListener('message', navMessageFn, false); + }); + $(window).mouseup(navResizeFnStop); + + if (sessionStorage.navWidth) { + navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)}); + } +} + +function navExpander() { + var done = false, timer = setTimeout(postMessage, 500); + function postMessage() { + if (done) return; + clearTimeout(timer); + var opts = { action: 'expand', path: pathId }; + document.getElementById('nav').contentWindow.postMessage(opts, '*'); + done = true; + } + + window.addEventListener('message', function(event) { + if (event.data === 'navReady') postMessage(); + return false; + }, false); +} + +function mainFocus() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + + setTimeout(function() { $('#main').focus(); }, 10); +} + +function navigationChange() { + // This works around the broken anchor navigation with the YARD template. + window.onpopstate = function() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + }; +} + +$(document).ready(function() { + navResizer(); + navExpander(); + createSourceLinks(); + createDefineLinks(); + createFullTreeLinks(); + searchFrameButtons(); + linkSummaries(); + summaryToggle(); + constantSummaryToggle(); + generateTOC(); + mainFocus(); + navigationChange(); +}); + +})(); diff --git a/0.0.3/js/full_list.js b/0.0.3/js/full_list.js new file mode 100644 index 0000000..59069c5 --- /dev/null +++ b/0.0.3/js/full_list.js @@ -0,0 +1,216 @@ +(function() { + +var $clicked = $(null); +var searchTimeout = null; +var searchCache = []; +var caseSensitiveMatch = false; +var ignoreKeyCodeMin = 8; +var ignoreKeyCodeMax = 46; +var commandKey = 91; + +RegExp.escape = function(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} + +function escapeShortcut() { + $(document).keydown(function(evt) { + if (evt.which == 27) { + window.parent.postMessage('navEscape', '*'); + } + }); +} + +function navResizer() { + $(window).mousemove(function(e) { + window.parent.postMessage({ + action: 'mousemove', event: {pageX: e.pageX, which: e.which} + }, '*'); + }).mouseup(function(e) { + window.parent.postMessage({action: 'mouseup'}, '*'); + }); + window.parent.postMessage("navReady", "*"); +} + +function clearSearchTimeout() { + clearTimeout(searchTimeout); + searchTimeout = null; +} + +function enableLinks() { + // load the target page in the parent window + $('#full_list li').on('click', function(evt) { + $('#full_list li').removeClass('clicked'); + $clicked = $(this); + $clicked.addClass('clicked'); + evt.stopPropagation(); + + if (evt.target.tagName === 'A') return true; + + var elem = $clicked.find('> .item .object_link a')[0]; + var e = evt.originalEvent; + var newEvent = new MouseEvent(evt.originalEvent.type); + newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); + elem.dispatchEvent(newEvent); + evt.preventDefault(); + return false; + }); +} + +function enableToggles() { + // show/hide nested classes on toggle click + $('#full_list a.toggle').on('click', function(evt) { + evt.stopPropagation(); + evt.preventDefault(); + $(this).parent().parent().toggleClass('collapsed'); + highlight(); + }); +} + +function populateSearchCache() { + $('#full_list li .item').each(function() { + var $node = $(this); + var $link = $node.find('.object_link a'); + if ($link.length > 0) { + searchCache.push({ + node: $node, + link: $link, + name: $link.text(), + fullName: $link.attr('title').split(' ')[0] + }); + } + }); +} + +function enableSearch() { + $('#search input').keyup(function(event) { + if (ignoredKeyPress(event)) return; + if (this.value === "") { + clearSearch(); + } else { + performSearch(this.value); + } + }); + + $('#full_list').after(""); +} + +function ignoredKeyPress(event) { + if ( + (event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) || + (event.keyCode == commandKey) + ) { + return true; + } else { + return false; + } +} + +function clearSearch() { + clearSearchTimeout(); + $('#full_list .found').removeClass('found').each(function() { + var $link = $(this).find('.object_link a'); + $link.text($link.text()); + }); + $('#full_list, #content').removeClass('insearch'); + $clicked.parents().removeClass('collapsed'); + highlight(); +} + +function performSearch(searchString) { + clearSearchTimeout(); + $('#full_list, #content').addClass('insearch'); + $('#noresults').text('').hide(); + partialSearch(searchString, 0); +} + +function partialSearch(searchString, offset) { + var lastRowClass = ''; + var i = null; + for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) { + var item = searchCache[i]; + var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name); + var matchString = buildMatchString(searchString); + var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i"); + if (searchName.match(matchRegexp) == null) { + item.node.removeClass('found'); + item.link.text(item.link.text()); + } + else { + item.node.addClass('found'); + item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1'); + lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2'; + item.link.html(item.name.replace(matchRegexp, "$&")); + } + } + if(i == searchCache.length) { + searchDone(); + } else { + searchTimeout = setTimeout(function() { + partialSearch(searchString, i); + }, 0); + } +} + +function searchDone() { + searchTimeout = null; + highlight(); + if ($('#full_list li:visible').size() === 0) { + $('#noresults').text('No results were found.').hide().fadeIn(); + } else { + $('#noresults').text('').hide(); + } + $('#content').removeClass('insearch'); +} + +function buildMatchString(searchString, event) { + caseSensitiveMatch = searchString.match(/[A-Z]/) != null; + var regexSearchString = RegExp.escape(searchString); + if (caseSensitiveMatch) { + regexSearchString += "|" + + $.map(searchString.split(''), function(e) { return RegExp.escape(e); }). + join('.+?'); + } + return regexSearchString; +} + +function highlight() { + $('#full_list li:visible').each(function(n) { + $(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even'); + }); +} + +/** + * Expands the tree to the target element and its immediate + * children. + */ +function expandTo(path) { + var $target = $(document.getElementById('object_' + path)); + $target.addClass('clicked'); + $target.removeClass('collapsed'); + $target.parentsUntil('#full_list', 'li').removeClass('collapsed'); + if($target[0]) { + window.scrollTo(window.scrollX, $target.offset().top - 250); + highlight(); + } +} + +function windowEvents(event) { + var msg = event.data; + if (msg.action === "expand") { + expandTo(msg.path); + } + return false; +} + +window.addEventListener("message", windowEvents, false); + +$(document).ready(function() { + escapeShortcut(); + navResizer(); + enableLinks(); + enableToggles(); + populateSearchCache(); + enableSearch(); +}); + +})(); diff --git a/0.0.3/js/jquery.js b/0.0.3/js/jquery.js new file mode 100644 index 0000000..198b3ff --- /dev/null +++ b/0.0.3/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
      "+""+"
      ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
      t
      ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
      ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/0.0.3/method_list.html b/0.0.3/method_list.html new file mode 100644 index 0000000..12d4c8c --- /dev/null +++ b/0.0.3/method_list.html @@ -0,0 +1,971 @@ + + + + + + + + + + + + + + + + + + Method List + + + +
      +
      +

      Method List

      + + + +
      + + +
      + + diff --git a/0.0.3/top-level-namespace.html b/0.0.3/top-level-namespace.html new file mode 100644 index 0000000..322347a --- /dev/null +++ b/0.0.3/top-level-namespace.html @@ -0,0 +1,110 @@ + + + + + + + Top Level Namespace + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Top Level Namespace + + + +

      +
      + + + + + + + + + + + +
      + +

      Defined Under Namespace

      +

      + + + Modules: UnicodePlot + + + + +

      + + + + + + + + + +
      + + + +
      + + \ No newline at end of file diff --git a/README.md b/README.md index 77c6cb3..f6c3ac1 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # UnicodePlot ## Documentation - - [0.0.4](0.0.4) +- [0.0.3](0.0.3) ## GitHub - https://github.com/red-data-tools/unicode_plot.rb diff --git a/_config.yml b/_config.yml index 67fb184..4b9404b 100644 --- a/_config.yml +++ b/_config.yml @@ -1,3 +1,4 @@ include: - - README.md + - 0.0.3 - 0.0.4 + - README.md From bfd9304a0ebb07fbfdb364bd30637beabdab21c6 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 17:22:50 +0900 Subject: [PATCH 11/14] Use kramdown and GFM --- _config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_config.yml b/_config.yml index 4b9404b..d26239f 100644 --- a/_config.yml +++ b/_config.yml @@ -1,3 +1,6 @@ +markdown: kramdown +kramdown: + input: GFM include: - 0.0.3 - 0.0.4 From ada0c7f15201611e6f9324421e3c9309c179337f Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 17:29:20 +0900 Subject: [PATCH 12/14] README: Add summary paragraph --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index f6c3ac1..e818af7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ # UnicodePlot +UnicodePlot provides the feature to make charts with Unicode characters. + ## Documentation - [0.0.4](0.0.4) - [0.0.3](0.0.3) ## GitHub + https://github.com/red-data-tools/unicode_plot.rb From 8979cf78b10da0fa4092f6acb4b1a30850c04228 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Mon, 22 Mar 2021 17:31:48 +0900 Subject: [PATCH 13/14] README: Make a URL a link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e818af7..b01501c 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ UnicodePlot provides the feature to make charts with Unicode characters. ## GitHub -https://github.com/red-data-tools/unicode_plot.rb +[red-data-tools/unicode_plot.rb](https://github.com/red-data-tools/unicode_plot.rb) From 9ac3c05b13f714488a64f826a3564e1c5fb79bb1 Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Tue, 23 Mar 2021 14:44:45 +0900 Subject: [PATCH 14/14] Add document for version 0.0.5 --- 0.0.5/UnicodePlot.html | 3334 +++++++++++++++++++++++ 0.0.5/UnicodePlot/AsciiCanvas.html | 488 ++++ 0.0.5/UnicodePlot/Barplot.html | 780 ++++++ 0.0.5/UnicodePlot/BlockCanvas.html | 433 +++ 0.0.5/UnicodePlot/BorderMaps.html | 158 ++ 0.0.5/UnicodePlot/BorderPrinter.html | 263 ++ 0.0.5/UnicodePlot/Boxplot.html | 786 ++++++ 0.0.5/UnicodePlot/BrailleCanvas.html | 466 ++++ 0.0.5/UnicodePlot/Canvas.html | 1721 ++++++++++++ 0.0.5/UnicodePlot/DensityCanvas.html | 467 ++++ 0.0.5/UnicodePlot/DotCanvas.html | 423 +++ 0.0.5/UnicodePlot/GridPlot.html | 861 ++++++ 0.0.5/UnicodePlot/IOContext.html | 301 ++ 0.0.5/UnicodePlot/Lineplot.html | 187 ++ 0.0.5/UnicodePlot/LookupCanvas.html | 431 +++ 0.0.5/UnicodePlot/NumericStemplot.html | 500 ++++ 0.0.5/UnicodePlot/Plot.html | 1862 +++++++++++++ 0.0.5/UnicodePlot/Renderer.html | 525 ++++ 0.0.5/UnicodePlot/Scatterplot.html | 187 ++ 0.0.5/UnicodePlot/Stemplot.html | 879 ++++++ 0.0.5/UnicodePlot/StringStemplot.html | 473 ++++ 0.0.5/UnicodePlot/StyledPrinter.html | 345 +++ 0.0.5/UnicodePlot/Utils.html | 613 +++++ 0.0.5/UnicodePlot/ValueTransformer.html | 317 +++ 0.0.5/UnicodePlot/Version.html | 121 + 0.0.5/_index.html | 380 +++ 0.0.5/class_list.html | 51 + 0.0.5/css/common.css | 1 + 0.0.5/css/full_list.css | 58 + 0.0.5/css/style.css | 497 ++++ 0.0.5/file.CHANGES.html | 144 + 0.0.5/file.LICENSE.html | 70 + 0.0.5/file.README.html | 158 ++ 0.0.5/file_list.html | 66 + 0.0.5/frames.html | 17 + 0.0.5/img/barplot.png | Bin 0 -> 17868 bytes 0.0.5/img/boxplot.png | Bin 0 -> 20279 bytes 0.0.5/img/densityplot.png | Bin 0 -> 86990 bytes 0.0.5/img/histogram.png | Bin 0 -> 51631 bytes 0.0.5/img/lineplot.png | Bin 0 -> 37632 bytes 0.0.5/img/scatterplot.png | Bin 0 -> 39042 bytes 0.0.5/index.html | 158 ++ 0.0.5/js/app.js | 314 +++ 0.0.5/js/full_list.js | 216 ++ 0.0.5/js/jquery.js | 4 + 0.0.5/method_list.html | 1171 ++++++++ 0.0.5/top-level-namespace.html | 110 + README.md | 1 + _config.yml | 1 + 49 files changed, 20338 insertions(+) create mode 100644 0.0.5/UnicodePlot.html create mode 100644 0.0.5/UnicodePlot/AsciiCanvas.html create mode 100644 0.0.5/UnicodePlot/Barplot.html create mode 100644 0.0.5/UnicodePlot/BlockCanvas.html create mode 100644 0.0.5/UnicodePlot/BorderMaps.html create mode 100644 0.0.5/UnicodePlot/BorderPrinter.html create mode 100644 0.0.5/UnicodePlot/Boxplot.html create mode 100644 0.0.5/UnicodePlot/BrailleCanvas.html create mode 100644 0.0.5/UnicodePlot/Canvas.html create mode 100644 0.0.5/UnicodePlot/DensityCanvas.html create mode 100644 0.0.5/UnicodePlot/DotCanvas.html create mode 100644 0.0.5/UnicodePlot/GridPlot.html create mode 100644 0.0.5/UnicodePlot/IOContext.html create mode 100644 0.0.5/UnicodePlot/Lineplot.html create mode 100644 0.0.5/UnicodePlot/LookupCanvas.html create mode 100644 0.0.5/UnicodePlot/NumericStemplot.html create mode 100644 0.0.5/UnicodePlot/Plot.html create mode 100644 0.0.5/UnicodePlot/Renderer.html create mode 100644 0.0.5/UnicodePlot/Scatterplot.html create mode 100644 0.0.5/UnicodePlot/Stemplot.html create mode 100644 0.0.5/UnicodePlot/StringStemplot.html create mode 100644 0.0.5/UnicodePlot/StyledPrinter.html create mode 100644 0.0.5/UnicodePlot/Utils.html create mode 100644 0.0.5/UnicodePlot/ValueTransformer.html create mode 100644 0.0.5/UnicodePlot/Version.html create mode 100644 0.0.5/_index.html create mode 100644 0.0.5/class_list.html create mode 100644 0.0.5/css/common.css create mode 100644 0.0.5/css/full_list.css create mode 100644 0.0.5/css/style.css create mode 100644 0.0.5/file.CHANGES.html create mode 100644 0.0.5/file.LICENSE.html create mode 100644 0.0.5/file.README.html create mode 100644 0.0.5/file_list.html create mode 100644 0.0.5/frames.html create mode 100644 0.0.5/img/barplot.png create mode 100644 0.0.5/img/boxplot.png create mode 100644 0.0.5/img/densityplot.png create mode 100644 0.0.5/img/histogram.png create mode 100644 0.0.5/img/lineplot.png create mode 100644 0.0.5/img/scatterplot.png create mode 100644 0.0.5/index.html create mode 100644 0.0.5/js/app.js create mode 100644 0.0.5/js/full_list.js create mode 100644 0.0.5/js/jquery.js create mode 100644 0.0.5/method_list.html create mode 100644 0.0.5/top-level-namespace.html diff --git a/0.0.5/UnicodePlot.html b/0.0.5/UnicodePlot.html new file mode 100644 index 0000000..be2208c --- /dev/null +++ b/0.0.5/UnicodePlot.html @@ -0,0 +1,3334 @@ + + + + + + + Module: UnicodePlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot + + + +

      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/plot.rb,
      + src/lib/unicode_plot/utils.rb,
      src/lib/unicode_plot/canvas.rb,
      src/lib/unicode_plot/stairs.rb,
      src/lib/unicode_plot/barplot.rb,
      src/lib/unicode_plot/boxplot.rb,
      src/lib/unicode_plot/version.rb,
      src/lib/unicode_plot/lineplot.rb,
      src/lib/unicode_plot/renderer.rb,
      src/lib/unicode_plot/stemplot.rb,
      src/lib/unicode_plot/grid_plot.rb,
      src/lib/unicode_plot/histogram.rb,
      src/lib/unicode_plot/io_context.rb,
      src/lib/unicode_plot/densityplot.rb,
      src/lib/unicode_plot/scatterplot.rb,
      src/lib/unicode_plot/styled_printer.rb,
      src/lib/unicode_plot/canvas/dot_canvas.rb,
      src/lib/unicode_plot/value_transformer.rb,
      src/lib/unicode_plot/canvas/ascii_canvas.rb,
      src/lib/unicode_plot/canvas/block_canvas.rb,
      src/lib/unicode_plot/canvas/lookup_canvas.rb,
      src/lib/unicode_plot/canvas/braille_canvas.rb,
      src/lib/unicode_plot/canvas/density_canvas.rb
      +
      +
      + +
      + +

      Defined Under Namespace

      +

      + + + Modules: BorderMaps, BorderPrinter, StyledPrinter, Utils, ValueTransformer, Version + + + + Classes: AsciiCanvas, Barplot, BlockCanvas, Boxplot, BrailleCanvas, Canvas, DensityCanvas, DotCanvas, GridPlot, IOContext, Lineplot, LookupCanvas, NumericStemplot, Plot, Renderer, Scatterplot, Stemplot, StringStemplot + + +

      + + +

      + Constant Summary + collapse +

      + +
      + +
      VERSION = + +
      +
      "0.0.5"
      + +
      BORDER_MAP = + +
      +
      {
      +  solid:   BorderMaps::BORDER_SOLID,
      +  corners: BorderMaps::BORDER_CORNERS,
      +  barplot: BorderMaps::BORDER_BARPLOT,
      +}.freeze
      + +
      + + + + + + + + + +

      + Class Method Summary + collapse +

      + + + + + + +
      +

      Class Method Details

      + + +
      +

      + + + .barplot(text, heights, xscale: nil, title: nil, xlabel: nil, ylabel: nil, labels: true, border: :barplot, margin: Plot::DEFAULT_MARGIN, padding: Plot::DEFAULT_PADDING, color: Barplot::DEFAULT_COLOR, width: Plot::DEFAULT_WIDTH, symbol: Barplot::DEFAULT_SYMBOL) ⇒ Barplot + + .barplot(data, **kwargs) ⇒ Barplot + + + + + + +

      +
      + + + +
      +
      +
      + +

      Overloads:

      +
        + + +
      • + .barplot(text, heights, xscale: nil, title: nil, xlabel: nil, ylabel: nil, labels: true, border: :barplot, margin: Plot::DEFAULT_MARGIN, padding: Plot::DEFAULT_PADDING, color: Barplot::DEFAULT_COLOR, width: Plot::DEFAULT_WIDTH, symbol: Barplot::DEFAULT_SYMBOL) ⇒ Barplot +
        +
        +

        Draws a horizontal barplot.

        + + +
        +
        +
        + +
        +

        Examples:

        + + +

        Example usage of barplot on IRB:

        +

        + +
        
        +>> UnicodePlot.barplot(["Paris", "New York", "Moskau", "Madrid"],
        +                       [2.244, 8.406, 11.92, 3.165],
        +                       xlabel: "population [in mil]").render
        +            ┌                                        ┐
        +      Paris ┤■■■■■■ 2.244
        +   New York ┤■■■■■■■■■■■■■■■■■■■■■■■ 8.406
        +     Moskau ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 11.92
        +     Madrid ┤■■■■■■■■■ 3.165
        +            └                                        ┘
        +                       population [in mil]
        +=> nil
        + +
        +

        Parameters:

        +
          + +
        • + + text + + + (Array<String>) + + + + — +

          The lables / captions of the bars.

          +
          + +
        • + +
        • + + heights + + + (Array<Numeric>) + + + + — +

          The values / heights of the bars.

          +
          + +
        • + +
        • + + xscale + + + (nil, :log, :ln, :log10, :lg, :log2, :lb, callable) + + + (defaults to: nil) + + + — +

          A function name symbol or callable object to transform the bar
          +length before plotting. This effectively scales the x-axis
          +without influencing the captions of the individual bars.
          +e.g. use xscale: :log10 for logscale.

          +
          + +
        • + +
        • + + title + + + + + + (defaults to: nil) + + +
        • + +
        • + + xlabel + + + + + + (defaults to: nil) + + +
        • + +
        • + + ylabel + + + + + + (defaults to: nil) + + +
        • + +
        • + + labels + + + + + + (defaults to: true) + + +
        • + +
        • + + border + + + + + + (defaults to: :barplot) + + +
        • + +
        • + + margin + + + + + + (defaults to: Plot::DEFAULT_MARGIN) + + +
        • + +
        • + + padding + + + + + + (defaults to: Plot::DEFAULT_PADDING) + + +
        • + +
        • + + color + + + + + + (defaults to: Barplot::DEFAULT_COLOR) + + +
        • + +
        • + + width + + + + + + (defaults to: Plot::DEFAULT_WIDTH) + + +
        • + +
        • + + symbol + + + (String) + + + (defaults to: Barplot::DEFAULT_SYMBOL) + + + — +

          Specifies the character that should be used
          +to render the bars.

          +
          + +
        • + +
        + +

        Returns:

        +
          + +
        • + + + (Barplot) + + + + — +

          A plot object.

          +
          + +
        • + +
        + +

        See Also:

        + + +
        +
      • + + +
      • + .barplot(data, **kwargs) ⇒ Barplot +
        +
        +

        The different variation of barplot described above.

        + + +
        +
        +
        +

        Parameters:

        +
          + +
        • + + data + + + (Hash) + + + + — +

          A hash in which the keys will be used as text and
          +the values will be utilized as heights.

          +
          + +
        • + +
        • + + kwargs + + + + + + + — +

          Optional keyword arguments same as ones described above.

          +
          + +
        • + +
        + +

        Returns:

        +
          + +
        • + + + (Barplot) + + + + — +

          A plot object.

          +
          + +
        • + +
        + +
        +
      • + +
      + + +
      + + + + +
      +
      +
      +
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 123
      +
      +module_function def barplot(*args,
      +                            width: Plot::DEFAULT_WIDTH,
      +                            color: Barplot::DEFAULT_COLOR,
      +                            symbol: Barplot::DEFAULT_SYMBOL,
      +                            border: :barplot,
      +                            xscale: nil,
      +                            xlabel: nil,
      +                            data: nil,
      +                            **kw)
      +  case args.length
      +  when 0
      +    data = Hash(data)
      +    keys = data.keys.map(&:to_s)
      +    heights = data.values
      +  when 2
      +    keys = Array(args[0])
      +    heights = Array(args[1])
      +  else
      +    raise ArgumentError, "invalid arguments"
      +  end
      +
      +  unless keys.length == heights.length
      +    raise ArgumentError, "The given vectors must be of the same length"
      +  end
      +  unless heights.min >= 0
      +    raise ArgumentError, "All values have to be positive. Negative bars are not supported."
      +  end
      +
      +  xlabel ||= ValueTransformer.transform_name(xscale)
      +  plot = Barplot.new(heights, width, color, symbol, xscale,
      +                     border: border, xlabel: xlabel,
      +                     **kw)
      +  keys.each_with_index do |key, i|
      +    plot.annotate_row!(:l, i, key)
      +  end
      +
      +  plot
      +end
      +
      + + +
      +

      + + + .barplot!(plot, text, heights) ⇒ Barplot + + .barplot!(plot, data) ⇒ Barplot + + + + + + +

      +
      + + + +
      +
      +
      + +

      Overloads:

      +
        + + +
      • + .barplot!(plot, text, heights) ⇒ Barplot +
        +
        +

        Draw additional bars on the given existing plot.

        + + +
        +
        +
        +

        Parameters:

        +
          + +
        • + + plot + + + (Barplot) + + + + — +

          the existing plot.

          +
          + +
        • + +
        + +

        Returns:

        +
          + +
        • + + + (Barplot) + + + + — +

          A plot object.

          +
          + +
        • + +
        + +

        See Also:

        + + +
        +
      • + + +
      • + .barplot!(plot, data) ⇒ Barplot +
        +
        +

        The different variation of barplot! that takes the plotting data in a hash.

        + + +
        +
        +
        +

        Parameters:

        +
          + +
        • + + plot + + + (Barplot) + + + + — +

          the existing plot.

          +
          + +
        • + +
        + +

        Returns:

        +
          + +
        • + + + (Barplot) + + + + — +

          A plot object.

          +
          + +
        • + +
        + +
        +
      • + +
      + + +
      + + + + +
      +
      +
      +
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 177
      +
      +module_function def barplot!(plot,
      +                             *args,
      +                             data: nil)
      +  case args.length
      +  when 0
      +    data = Hash(data)
      +    keys = data.keys.map(&:to_s)
      +    heights = data.values
      +  when 2
      +    keys = Array(args[0])
      +    heights = Array(args[1])
      +  else
      +    raise ArgumentError, "invalid arguments"
      +  end
      +
      +  unless keys.length == heights.length
      +    raise ArgumentError, "The given vectors must be of the same length"
      +  end
      +  if keys.empty?
      +    raise ArgumentError, "Can't append empty array to barplot"
      +  end
      +
      +  cur_idx = plot.n_rows
      +  plot.add_row!(heights)
      +  keys.each_with_index do |key, i|
      +    plot.annotate_row!(:l, cur_idx + i, key)
      +  end
      +  plot
      +end
      +
      +
      + +
      +

      + + .border_typesObject + + + + + +

      + + + + +
      +
      +
      +
      +43
      +44
      +45
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 43
      +
      +def self.border_types
      +  BORDER_MAP.keys
      +end
      +
      +
      + +
      +

      + + .boxplot(*args, data: nil, border: :corners, color: Boxplot::DEFAULT_COLOR, width: Plot::DEFAULT_WIDTH, xlim: [0, 0], **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +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
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 94
      +
      +module_function def boxplot(*args,
      +                            data: nil,
      +                            border: :corners,
      +                            color: Boxplot::DEFAULT_COLOR,
      +                            width: Plot::DEFAULT_WIDTH,
      +                            xlim: [0, 0],
      +                            **kw)
      +  case args.length
      +  when 0
      +    data = Hash(data)
      +    text = data.keys
      +    data = data.values
      +  when 1
      +    data = args[0]
      +  when 2
      +    text = Array(args[0])
      +    data = args[1]
      +  else
      +    raise ArgumentError, "wrong number of arguments"
      +  end
      +
      +  case data[0]
      +  when Numeric
      +    data = [data]
      +  when Array
      +    # do nothing
      +  else
      +    data = data.to_ary
      +  end
      +  text ||= Array.new(data.length, "")
      +
      +  unless text.length == data.length
      +    raise ArgumentError, "wrong number of text"
      +  end
      +
      +  unless xlim.length == 2
      +    raise ArgumentError, "xlim must be a length 2 array"
      +  end
      +
      +  min_x, max_x = Utils.extend_limits(data.map(&:minmax).flatten, xlim)
      +  width = [width, Boxplot::MIN_WIDTH].max
      +
      +  plot = Boxplot.new(data[0], width, color, min_x, max_x,
      +                     border: border, **kw)
      +  (1 ... data.length).each do |i|
      +    plot.add_series!(data[i])
      +  end
      +
      +  mean_x = (min_x + max_x) / 2.0
      +  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
      +  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
      +  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
      +  plot.annotate!(:bl, min_x_str, color: :light_black)
      +  plot.annotate!(:b,  mean_x_str, color: :light_black)
      +  plot.annotate!(:br, max_x_str, color: :light_black)
      +
      +  text.each_with_index do |name, i|
      +    plot.annotate_row!(:l, i*3+1, name) if name.length > 0
      +  end
      +
      +  plot
      +end
      +
      +
      + +
      +

      + + .boxplot!(plot, *args, **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 157
      +
      +module_function def boxplot!(plot, *args, **kw)
      +  case args.length
      +  when 1
      +    data = args[0]
      +    name = kw[:name] || ""
      +  when 2
      +    name = args[0]
      +    data = args[1]
      +  else
      +    raise ArgumentError, "worng number of arguments"
      +  end
      +
      +  if data.empty?
      +    raise ArgumentError, "Can't append empty array to boxplot"
      +  end
      +
      +  plot.add_series!(data)
      +
      +  plot.annotate_row!(:l, (plot.n_data - 1)*3+1, name) if name && name != ""
      +
      +  min_x = plot.min_x
      +  max_x = plot.max_x
      +  mean_x = (min_x + max_x) / 2.0
      +  min_x_str  = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
      +  mean_x_str = (Utils.roundable?(mean_x) ? mean_x.round : mean_x).to_s
      +  max_x_str  = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
      +  plot.annotate!(:bl, min_x_str, color: :light_black)
      +  plot.annotate!(:b,  mean_x_str, color: :light_black)
      +  plot.annotate!(:br, max_x_str, color: :light_black)
      +
      +  plot
      +end
      +
      +
      + +
      +

      + + .canvas_typesObject + + + + + +

      + + + + +
      +
      +
      +
      +167
      +168
      +169
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 167
      +
      +def self.canvas_types
      +  Canvas::CANVAS_CLASS_MAP.keys
      +end
      +
      +
      + +
      +

      + + .compute_stair_lines(x, y, style: :post) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/stairs.rb', line 63
      +
      +module_function def compute_stair_lines(x, y, style: :post)
      +  x_vex = Array.new(x.length * 2 - 1, 0)
      +  y_vex = Array.new(x.length * 2 - 1, 0)
      +  x_vex[0] = x[0]
      +  y_vex[0] = y[0]
      +  o = 0
      +  if style == :post
      +    (1 ... x.length).each do |i|
      +      x_vex[i + o] = x[i]
      +      x_vex[i + o + 1] = x[i]
      +      y_vex[i + o] = y[i-1]
      +      y_vex[i + o + 1] = y[i]
      +      o += 1
      +    end
      +  elsif style == :pre
      +    (1 ... x.length).each do |i|
      +      x_vex[i + o] = x[i-1]
      +      x_vex[i + o + 1] = x[i]
      +      y_vex[i + o] = y[i]
      +      y_vex[i + o + 1] = y[i]
      +      o += 1
      +    end
      +  end
      +  return [x_vex, y_vex]
      +end
      +
      +
      + +
      +

      + + .densityplot(x, y, color: :auto, grid: false, name: "", **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +2
      +3
      +4
      +5
      +
      +
      # File 'src/lib/unicode_plot/densityplot.rb', line 2
      +
      +module_function def densityplot(x, y, color: :auto, grid: false, name: "", **kw)
      +  plot = GridPlot.new(x, y, :density, grid: grid, **kw)
      +  scatterplot!(plot, x, y, color: color, name: name)
      +end
      +
      +
      + +
      +

      + + .densityplot!(plot, x, y, **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +7
      +8
      +9
      +
      +
      # File 'src/lib/unicode_plot/densityplot.rb', line 7
      +
      +module_function def densityplot!(plot, x, y, **kw)
      +  scatterplot!(plot, x, y, **kw)
      +end
      +
      +
      + +
      +

      + + .histogram(x, nbins: nil, closed: :left, symbol: "▇", **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/histogram.rb', line 4
      +
      +module_function def histogram(x,
      +                              nbins: nil,
      +                              closed: :left,
      +                              symbol: "",
      +                              **kw)
      +  hist = x.histogram(*[nbins].compact, closed: closed)
      +  edge, counts = hist.edge, hist.weights
      +  labels = []
      +  bin_width = edge[1] - edge[0]
      +  pad_left, pad_right = 0, 0
      +  (0 ... edge.length).each do |i|
      +    val1 = Utils.float_round_log10(edge[i], bin_width)
      +    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
      +    a1 = val1.to_s.split('.', 2).map(&:length)
      +    a2 = val2.to_s.split('.', 2).map(&:length)
      +    pad_left  = [pad_left,  a1[0], a2[0]].max
      +    pad_right = [pad_right, a1[1], a2[1]].max
      +  end
      +  l_str = hist.closed == :right ? "(" : "["
      +  r_str = hist.closed == :right ? "]" : ")"
      +  counts.each_with_index do |n, i|
      +    val1 = Utils.float_round_log10(edge[i], bin_width)
      +    val2 = Utils.float_round_log10(val1 + bin_width, bin_width)
      +    a1 = val1.to_s.split('.', 2).map(&:length)
      +    a2 = val2.to_s.split('.', 2).map(&:length)
      +    labels[i] = "\e[90m#{l_str}\e[0m" +
      +                (" " * (pad_left - a1[0])) +
      +                val1.to_s +
      +                (" " * (pad_right - a1[1])) +
      +                "\e[90m, \e[0m" +
      +                (" " * (pad_left - a2[0])) +
      +                val2.to_s +
      +                (" " * (pad_right - a2[1])) +
      +                "\e[90m#{r_str}\e[0m"
      +  end
      +  xscale = kw.delete(:xscale)
      +  xlabel = kw.delete(:xlabel) ||
      +           ValueTransformer.transform_name(xscale, "Frequency")
      +  barplot(labels, counts,
      +          symbol: symbol,
      +          xscale: xscale,
      +          xlabel: xlabel,
      +          **kw)
      +end
      +
      +
      + +
      +

      + + .lineplot([x], y, name: "", canvas: :braille, title: "", xlabel: "", ylabel: "", labels: true, border: :solid, margin: Plot::DEFAULT_MARGIN, padding: Plot::DEFAULT_PADDING, color: :auto, width: Plot::DEFAULT_WIDTH, height: GridPlot::DEFAULT_HEIGHT, xlim: [0, 0], ylim: [0, 0], canvas: :braille, grid: true) ⇒ Lineplot + + + + + +

      +
      + + + +
      +
      +
      + +
      +
      +

      Draws a path through the given points on a new canvas.

      + +

      The first (optional) array x should contain the horizontal positions for all the points along the path.
      +The second array y should then contain the corresponding vertical positions respectively.
      +This means that the two vectors must be of the same length and ordering.

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + x + + + (Array<Numeric>) + + + + — +

        Optional. The horizontal position for each point. If omitted, the axes of y will be used as x.

        +
        + +
      • + +
      • + + y + + + (Array<Numeric>) + + + + — +

        The vertical position for each point.

        +
        + +
      • + +
      • + + name + + + (String) + + + (defaults to: "") + + + — +

        Annotation of the current drawing to be displayed on the right.

        +
        + +
      • + +
      • + + title + + + + + + (defaults to: "") + + +
      • + +
      • + + xlabel + + + + + + (defaults to: "") + + +
      • + +
      • + + ylabel + + + + + + (defaults to: "") + + +
      • + +
      • + + labels + + + + + + (defaults to: true) + + +
      • + +
      • + + border + + + + + + (defaults to: :solid) + + +
      • + +
      • + + margin + + + + + + (defaults to: Plot::DEFAULT_MARGIN) + + +
      • + +
      • + + padding + + + + + + (defaults to: Plot::DEFAULT_PADDING) + + +
      • + +
      • + + color + + + + + + (defaults to: :auto) + + +
      • + +
      • + + width + + + + + + (defaults to: Plot::DEFAULT_WIDTH) + + +
      • + +
      • + + height + + + + + + (defaults to: GridPlot::DEFAULT_HEIGHT) + + +
      • + +
      • + + xlim + + + + + + (defaults to: [0, 0]) + + +
      • + +
      • + + ylim + + + + + + (defaults to: [0, 0]) + + +
      • + +
      • + + canvas + + + (Symbol) + + + (defaults to: :braille) + + + — +

        The type of canvas that should be used for drawing.

        +
        + +
      • + +
      • + + grid + + + (true, false) + + + (defaults to: true) + + + — +

        If true, draws grid-lines at the origin.

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Lineplot) + + + + — +

        A plot object.

        +
        + +
      • + +
      + +
      + + +
      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/lineplot.rb', line 33
      +
      +module_function def lineplot(*args,
      +                             canvas: :braille,
      +                             color: :auto,
      +                             name: "",
      +                             **kw)
      +  case args.length
      +  when 1
      +    # y only
      +    y = Array(args[0])
      +    x = Array(1 .. y.length)
      +  when 2
      +    # x and y
      +    x = Array(args[0])
      +    y = Array(args[1])
      +  else
      +    raise ArgumentError, "wrong number of arguments"
      +  end
      +
      +  case x[0]
      +  when Time, Date
      +    if x[0].is_a? Time
      +      d = x.map(&:to_f)
      +    else
      +      origin = Date.new(1, 1, 1)
      +      d = x.map {|xi| xi - origin }
      +    end
      +    plot = lineplot(d, y, canvas: canvas, color: color, name: name, **kw)
      +    xmin, xmax = x.minmax
      +    plot.annotate!(:bl, xmin.to_s, color: :light_black)
      +    plot.annotate!(:br, xmax.to_s, color: :light_black)
      +    plot
      +  else
      +    plot = Lineplot.new(x, y, canvas, **kw)
      +    lineplot!(plot, x, y, color: color, name: name)
      +  end
      +end
      +
      +
      + +
      +

      + + .lineplot!(plot, [x], y, name: "", color: :auto) ⇒ Lineplot + + + + + +

      +
      + + + +
      +
      +
      + +
      +
      +

      Draws a path through the given points on the given canvas.

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + plot + + + (Lineplot) + + + + — +

        The plot object.

        +
        + +
      • + +
      • + + x + + + (Array<Numeric>) + + + + — +

        Optional. The horizontal position for each point. If omitted, the axes of y will be used as x.

        +
        + +
      • + +
      • + + y + + + (Array<Numeric>) + + + + — +

        The vertical position for each point.

        +
        + +
      • + +
      • + + name + + + (String) + + + (defaults to: "") + + + — +

        Annotation of the current drawing to be displayed on the right.

        +
        + +
      • + +
      • + + color + + + + + + (defaults to: :auto) + + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Lineplot) + + + + — +

        The plot object same as the plot parameter.

        +
        + +
      • + +
      + +
      + + +
      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/lineplot.rb', line 80
      +
      +module_function def lineplot!(plot,
      +                              *args,
      +                              color: :auto,
      +                              name: "")
      +  case args.length
      +  when 1
      +    # y only
      +    y = Array(args[0])
      +    x = Array(1 .. y.length)
      +  when 2
      +    # x and y
      +    x = Array(args[0])
      +    y = Array(args[1])
      +
      +    if x.length == 1 && y.length == 1
      +      # intercept and slope
      +      intercept = x[0]
      +      slope = y[0]
      +      xmin = plot.origin_x
      +      xmax = plot.origin_x + plot.plot_width
      +      ymin = plot.origin_y
      +      ymax = plot.origin_y + plot.plot_height
      +      x = [xmin, xmax]
      +      y = [intercept + xmin*slope, intercept + xmax*slope]
      +    end
      +  else
      +    raise ArgumentError, "wrong number of arguments"
      +  end
      +
      +  case x[0]
      +  when Time, Date
      +    if x[0].is_a? Time
      +      d = x.map(&:to_f)
      +    else
      +      origin = Date.new(1, 1, 1)
      +      d = x.map {|xi| xi - origin }
      +    end
      +    lineplot!(plot, d, y, color: color, name: name)
      +  else
      +    color = color == :auto ? plot.next_color : color
      +    plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
      +    plot.lines!(x, y, color)
      +  end
      +  plot
      +end
      +
      +
      + +
      +

      + + .scatterplot(*args, canvas: :braille, color: :auto, name: "", **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +
      +
      # File 'src/lib/unicode_plot/scatterplot.rb', line 5
      +
      +module_function def scatterplot(*args,
      +                                canvas: :braille,
      +                                color: :auto,
      +                                name: "",
      +                                **kw)
      +  case args.length
      +  when 1
      +    # y only
      +    y = Array(args[0])
      +    x = Array(1 .. y.length)
      +  when 2
      +    # x and y
      +    x = Array(args[0])
      +    y = Array(args[1])
      +  else
      +    raise ArgumentError, "worng number of arguments"
      +  end
      +
      +  plot = Scatterplot.new(x, y, canvas, **kw)
      +  scatterplot!(plot, x, y, color: color, name: name)
      +end
      +
      +
      + +
      +

      + + .scatterplot!(plot, *args, color: :auto, name: "") ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +
      +
      # File 'src/lib/unicode_plot/scatterplot.rb', line 27
      +
      +module_function def scatterplot!(plot,
      +                                 *args,
      +                                 color: :auto,
      +                                 name: "")
      +  case args.length
      +  when 1
      +    # y only
      +    y = Array(args[0])
      +    x = Array(1 .. y.length)
      +  when 2
      +    # x and y
      +    x = Array(args[0])
      +    y = Array(args[1])
      +  else
      +    raise ArgumentError, "worng number of arguments"
      +  end
      +
      +  color = color == :auto ? plot.next_color : color
      +  plot.annotate!(:r, name.to_s, color: color) unless name.nil? || name == ""
      +  plot.points!(x, y, color)
      +  plot
      +end
      +
      +
      + +
      +

      + + .stairs(x, y, style: :post, name: "", title: "", xlabel: "", ylabel: "", labels: true, border: :solid, margin: 3, padding: 1, color: :auto, width: 40, height: 15, xlim: [0, 0], ylim: [0, 0], canvas: :braille, grid: true) ⇒ Plot + + + + + +

      +
      + + + +
      +
      +
      + +
      +
      +

      Draws a staircase plot on a new canvas.

      + +

      The first vector x should contain the horizontal
      +positions for all the points. The second vector y should then
      +contain the corresponding vertical positions respectively. This
      +means that the two vectors must be of the same length and
      +ordering.

      + + +
      +
      +
      + +
      +

      Examples:

      + + +

      Example usage of stairs on IRB:

      +

      + +
      
      +>> UnicodePlot.stairs([1, 2, 4, 7, 8], [1, 3, 4, 2, 7], style: :post, title: "My Staircase Plot").render
      +                 My Staircase Plot
      +     ┌────────────────────────────────────────┐
      +   7 │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⡄⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⢸⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⢸│
      +     │⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠧⠤⠤⠤⠤⠼│
      +     │⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
      +   1 │⣀⣀⣀⣀⣀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
      +     └────────────────────────────────────────┘
      +     1                                        8
      +=> nil
      + +
      +

      Parameters:

      +
        + +
      • + + x + + + (Array<Numeric>) + + + + — +

        The horizontal position for each point.

        +
        + +
      • + +
      • + + y + + + (Array<Numeric>) + + + + — +

        The vertical position for each point.

        +
        + +
      • + +
      • + + style + + + (Symbol) + + + (defaults to: :post) + + + — +

        Specifies where the transition of the stair takes place. Can be either :pre or :post.

        +
        + +
      • + +
      • + + name + + + (String) + + + (defaults to: "") + + + — +

        Annotation of the current drawing to be displayed on the right.

        +
        + +
      • + +
      • + + height + + + (Integer) + + + (defaults to: 15) + + + — +

        Number of character rows that should be used for plotting.

        +
        + +
      • + +
      • + + xlim + + + (Array<Numeric>) + + + (defaults to: [0, 0]) + + + — +

        Plotting range for the x axis. [0, 0] stands for automatic.

        +
        + +
      • + +
      • + + ylim + + + (Array<Numeric>) + + + (defaults to: [0, 0]) + + + — +

        Plotting range for the y axis. [0, 0] stands for automatic.

        +
        + +
      • + +
      • + + canvas + + + (Symbol) + + + (defaults to: :braille) + + + — +

        The type of canvas that should be used for drawing.

        +
        + +
      • + +
      • + + grid + + + (Boolean) + + + (defaults to: true) + + + — +

        If true, draws grid-lines at the origin.

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Plot) + + + + — +

        A plot object.

        +
        + +
      • + +
      + +

      See Also:

      + + +
      + + +
      + + + + +
      +
      +
      +
      +52
      +53
      +54
      +55
      +
      +
      # File 'src/lib/unicode_plot/stairs.rb', line 52
      +
      +module_function def stairs(xvec, yvec, style: :post, **kw)
      +  x_vex, y_vex = compute_stair_lines(xvec, yvec, style: style)
      +  lineplot(x_vex, y_vex, **kw)
      +end
      +
      +
      + +
      +

      + + .stairs!(plot, xvec, yvec, style: :post, **kw) ⇒ Object + + + + + +

      +
      +

      Similar to stairs, but takes an existing plot object as a first argument.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +58
      +59
      +60
      +61
      +
      +
      # File 'src/lib/unicode_plot/stairs.rb', line 58
      +
      +module_function def stairs!(plot, xvec, yvec, style: :post, **kw)
      +  x_vex, y_vex = compute_stair_lines(xvec, yvec, style: style)
      +  lineplot!(plot, x_vex, y_vex, **kw)
      +end
      +
      +
      + +
      +

      + + .stemplot(*args, scale: 10, **kw) ⇒ Object + + + + + +

      +
      +

      Generates one or more Stemplot objects from the input data
      +and prints a Single or Double stemplot using stemplot1! or stemplot2!

      + + +
      +
      +
      + +
      +

      Examples:

      + + +

      Single sided stemplot

      +

      + +
      >> UnicodePlot.stemplot(eighty_ints)
      +0 | 257
      +1 | 00335679
      +2 | 034455899
      +3 | 145588
      +4 | 0022223
      +5 | 0223399
      +6 | 012345568889
      +7 | 01133334466777888
      +8 | 013689
      +9 | 22667
      +Key: 1|0 = 10
      +The decimal is 1 digit(s) to the right of |
      + + +

      Back-to-back stemplot

      +

      + +
      >> UnicodePlot.stemplot(eighty_ints, another_eighty_ints)
      +              752 | 0 | 1244457899
      +         97653300 | 1 | 4799
      +        998554430 | 2 | 015668
      +           885541 | 3 | 0144557888899
      +          3222200 | 4 | 00268
      +          9933220 | 5 | 0234778
      +     988865543210 | 6 | 122222357889
      +88877766443333110 | 7 | 134556689
      +           986310 | 8 | 24589
      +            76622 | 9 | 022234468
      +Key: 1|0 = 10
      +The decimal is 1 digit(s) to the right of |
      + +
      + + +

      See Also:

      + + +
      + + + + +
      +
      +
      +
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 323
      +
      +def stemplot(*args, scale: 10, **kw)
      +  case args.length
      +  when 1
      +    # Stemplot object
      +    plt = Stemplot.factory(args[0], scale: scale, **kw)
      +    # Dispatch to plot routine
      +    stemplot1!(plt, scale: scale, **kw)
      +  when 2
      +    # Stemplot object
      +    plt1 = Stemplot.factory(args[0], scale: scale)
      +    plt2 = Stemplot.factory(args[1], scale: scale)
      +    raise ArgumentError, "Plot types must be the same for back-to-back stemplot " +
      +          "#{plt1.class} != #{plt2.class}" unless plt1.class == plt2.class
      +    # Dispatch to plot routine
      +    stemplot2!(plt1, plt2, scale: scale, **kw)
      +  else
      +    raise ArgumentError, "Expecting one or two arguments"
      +  end
      +end
      +
      +
      + +
      +

      + + .stemplot1!(plt, scale: 10, divider: "|", padchar: " ", trim: false, **_kw) ⇒ Object + + + + + +

      +
      +

      Print a Single-Vector stemplot to STDOUT.

      + +
        +
      • Stem data is printed on the left.
      • +
      • Leaf data is printed on the right.
      • +
      • Key is printed at the bottom.
      • +
      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + plt + + + (Stemplot) + + + + — +

        Stemplot object

        +
        + +
      • + +
      • + + scale + + + (Integer) + + + (defaults to: 10) + + + — +

        Scale, should be a power of 10

        +
        + +
      • + +
      • + + divider + + + (String) + + + (defaults to: "|") + + + — +

        Divider character between stem and leaf

        +
        + +
      • + +
      • + + padchar + + + (String) + + + (defaults to: " ") + + + — +

        Padding character

        +
        + +
      • + +
      • + + trim + + + (Boolean) + + + (defaults to: false) + + + — +

        Trim missing stems from the plot

        +
        + +
      • + +
      + + +
      + + + + +
      +
      +
      +
      +233
      +234
      +235
      +236
      +237
      +238
      +239
      +240
      +241
      +242
      +243
      +244
      +245
      +246
      +247
      +248
      +249
      +250
      +251
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 233
      +
      +def stemplot1!(plt, 
      +               scale: 10,
      +               divider: "|",
      +               padchar: " ",
      +               trim: false,
      +               **_kw
      +              )
      +
      +  stem_labels = plt.stems(all: !trim)
      +  label_len = stem_labels.map(&:length).max
      +  column_len = label_len + 1
      +  
      +  stem_labels.each do |stem|
      +    leaves = plt.leaves(stem).sort
      +    stemlbl = stem.rjust(label_len, padchar).ljust(column_len, padchar)
      +    puts stemlbl + divider + padchar + leaves.join
      +  end
      +  plt.print_key(scale, divider)
      +end
      +
      +
      + +
      +

      + + .stemplot2!(plt1, plt2, scale: 10, divider: "|", padchar: " ", trim: false, **_kw) ⇒ Object + + + + + +

      +
      +

      Print a Back-to-Back Stemplot to STDOUT

      + +
        +
      • +plt1+ Leaf data is printed on the left.
      • +
      • Common stem data is printed in the center.
      • +
      • +plt2+ Leaf data is printed on the right.
      • +
      • Key is printed at the bottom.
      • +
      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + plt1 + + + (Stemplot) + + + + — +

        Stemplot object for the left side

        +
        + +
      • + +
      • + + plt2 + + + (Stemplot) + + + + — +

        Stemplot object for the right side

        +
        + +
      • + +
      • + + scale + + + (Integer) + + + (defaults to: 10) + + + — +

        Scale, should be a power of 10

        +
        + +
      • + +
      • + + divider + + + (String) + + + (defaults to: "|") + + + — +

        Divider character between stem and leaf

        +
        + +
      • + +
      • + + padchar + + + (String) + + + (defaults to: " ") + + + — +

        Padding character

        +
        + +
      • + +
      • + + trim + + + (Boolean) + + + (defaults to: false) + + + — +

        Trim missing stems from the plot

        +
        + +
      • + +
      + + +
      + + + + +
      +
      +
      +
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 265
      +
      +def stemplot2!(plt1, plt2,
      +               scale: 10,
      +               divider: "|",
      +               padchar: " ",
      +               trim: false,
      +               **_kw
      +              )
      +  stem_labels = plt1.class.sorted_stem_list( (plt1.raw_stems + plt2.raw_stems).uniq, all: !trim )
      +  label_len = stem_labels.map(&:length).max
      +  column_len = label_len + 1
      +
      +  leftleaf_len = plt1.max_stem_length
      +
      +  stem_labels.each do |stem|
      +    left_leaves = plt1.leaves(stem).sort.join('')
      +    right_leaves = plt2.leaves(stem).sort.join('')
      +    left_leaves_just = left_leaves.reverse.rjust(leftleaf_len, padchar)
      +    stem = stem.rjust(column_len, padchar).ljust(column_len+1, padchar)
      +    puts left_leaves_just + padchar + divider + stem + divider + padchar + right_leaves
      +  end
      +
      +  plt1.print_key(scale, divider)
      +
      +end
      +
      +
      + + + + + + + + + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/AsciiCanvas.html b/0.0.5/UnicodePlot/AsciiCanvas.html new file mode 100644 index 0000000..2b9f2cc --- /dev/null +++ b/0.0.5/UnicodePlot/AsciiCanvas.html @@ -0,0 +1,488 @@ + + + + + + + Class: UnicodePlot::AsciiCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::AsciiCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + LookupCanvas + + + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/ascii_canvas.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      ASCII_SIGNS = + +
      +
      [
      +  [ 0b100_000_000, 0b000_100_000, 0b000_000_100 ].freeze,
      +  [ 0b010_000_000, 0b000_010_000, 0b000_000_010 ].freeze,
      +  [ 0b001_000_000, 0b000_001_000, 0b000_000_001 ].freeze
      +].freeze
      + +
      ASCII_LOOKUP = + +
      +
      {
      +  0b101_000_000 => '"',
      +  0b111_111_111 => '@',
      + #0b011_110_011 => '$',
      +  0b010_000_000 => '\'',
      +  0b010_100_010 => '(',
      +  0b010_001_010 => ')',
      +  0b000_010_000 => '*',
      +  0b010_111_010 => '+',
      +  0b000_010_010 => ',',
      +  0b000_100_100 => ',',
      +  0b000_001_001 => ',',
      +  0b000_111_000 => '-',
      +  0b000_000_010 => '.',
      +  0b000_000_100 => '.',
      +  0b000_000_001 => '.',
      +  0b001_010_100 => '/',
      +  0b010_100_000 => '/',
      +  0b001_010_110 => '/',
      +  0b011_010_010 => '/',
      +  0b001_010_010 => '/',
      +  0b110_010_111 => '1',
      + #0b111_010_100 => '7',
      +  0b010_000_010 => ':',
      +  0b111_000_111 => '=',
      + #0b010_111_101 => 'A',
      + #0b011_100_011 => 'C',
      + #0b110_101_110 => 'D',
      + #0b111_110_100 => 'F',
      + #0b011_101_011 => 'G',
      + #0b101_111_101 => 'H',
      +  0b111_010_111 => 'I',
      + #0b011_001_111 => 'J',
      + #0b101_110_101 => 'K',
      +  0b100_100_111 => 'L',
      + #0b111_111_101 => 'M',
      + #0b101_101_101 => 'N',
      + #0b111_101_111 => 'O',
      + #0b111_111_100 => 'P',
      +  0b111_010_010 => 'T',
      + #0b101_101_111 => 'U',
      +  0b101_101_010 => 'V',
      + #0b101_111_111 => 'W',
      +  0b101_010_101 => 'X',
      +  0b101_010_010 => 'Y',
      +  0b110_100_110 => '[',
      +  0b010_001_000 => '\\',
      +  0b100_010_001 => '\\',
      +  0b110_010_010 => '\\',
      +  0b100_010_011 => '\\',
      +  0b100_010_010 => '\\',
      +  0b011_001_011 => ']',
      +  0b010_101_000 => '^',
      +  0b000_000_111 => '_',
      +  0b100_000_000 => '`',
      + #0b000_111_111 => 'a',
      + #0b100_111_111 => 'b',
      + #0b001_111_111 => 'd',
      + #0b001_111_010 => 'f',
      + #0b100_111_101 => 'h',
      + #0b100_101_101 => 'k',
      +  0b110_010_011 => 'l',
      + #0b000_111_101 => 'n',
      +  0b000_111_100 => 'r',
      + #0b000_101_111 => 'u',
      +  0b000_101_010 => 'v',
      +  0b011_110_011 => '{',
      +  0b010_010_010 => '|',
      +  0b100_100_100 => '|',
      +  0b001_001_001 => '|',
      +  0b110_011_110 => '}',
      +}.freeze
      + +
      ASCII_DECODE = + +
      +
      [' ']
      + +
      PIXEL_PER_CHAR = + +
      +
      3
      + +
      + + + + + + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from LookupCanvas

      +

      #pixel!, #print_row

      + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, **kw) ⇒ AsciiCanvas + + + + + +

      +
      +

      Returns a new instance of AsciiCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +110
      +111
      +112
      +113
      +114
      +
      +
      # File 'src/lib/unicode_plot/canvas/ascii_canvas.rb', line 110
      +
      +def initialize(width, height, **kw)
      +  super(width, height,
      +        PIXEL_PER_CHAR, PIXEL_PER_CHAR,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #lookup_decode(code) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +120
      +121
      +122
      +
      +
      # File 'src/lib/unicode_plot/canvas/ascii_canvas.rb', line 120
      +
      +def lookup_decode(code)
      +  ASCII_DECODE[code]
      +end
      +
      +
      + +
      +

      + + #lookup_encode(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +116
      +117
      +118
      +
      +
      # File 'src/lib/unicode_plot/canvas/ascii_canvas.rb', line 116
      +
      +def lookup_encode(x, y)
      +  ASCII_SIGNS[x][y]
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Barplot.html b/0.0.5/UnicodePlot/Barplot.html new file mode 100644 index 0000000..e315d32 --- /dev/null +++ b/0.0.5/UnicodePlot/Barplot.html @@ -0,0 +1,780 @@ + + + + + + + Class: UnicodePlot::Barplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Barplot + + + +

      +
      + +
      +
      Inherits:
      +
      + Plot + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + +
      +
      Includes:
      +
      ValueTransformer
      +
      + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/barplot.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      MIN_WIDTH = + +
      +
      10
      + +
      DEFAULT_COLOR = + +
      +
      :green
      + +
      DEFAULT_SYMBOL = + +
      +
      ""
      + +
      + + + + + + +

      Constants included + from ValueTransformer

      +

      ValueTransformer::PREDEFINED_TRANSFORM_FUNCTIONS

      + + + +

      Constants inherited + from Plot

      +

      Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + +

      Instance Attribute Summary collapse

      +
        + +
      • + + + #max_freq ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute max_freq.

        +
        + +
      • + + +
      • + + + #max_len ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute max_len.

        +
        + +
      • + + +
      • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute width.

        +
        + +
      • + + +
      + + + + + +

      Attributes inherited from Plot

      +

      #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods included from ValueTransformer

      +

      transform_name, #transform_values

      + + + + + + + + + +

      Methods inherited from Plot

      +

      #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(bars, width, color, symbol, transform, **kw) ⇒ Barplot + + + + + +

      +
      +

      Returns a new instance of Barplot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 9
      +
      +def initialize(bars, width, color, symbol, transform, **kw)
      +  if symbol.length > 1
      +    raise ArgumentError, "symbol must be a single character"
      +  end
      +  @bars = bars
      +  @symbol = symbol
      +  @max_freq, i = find_max(transform_values(transform, bars))
      +  @max_len = bars[i].to_s.length
      +  @width = [width, max_len + 7, MIN_WIDTH].max
      +  @color = color
      +  @symbol = symbol
      +  @transform = transform
      +  super(**kw)
      +end
      +
      +
      + +
      + +
      +

      Instance Attribute Details

      + + + +
      +

      + + #max_freqObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute max_freq.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +24
      +25
      +26
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 24
      +
      +def max_freq
      +  @max_freq
      +end
      +
      +
      + + + +
      +

      + + #max_lenObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute max_len.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +25
      +26
      +27
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 25
      +
      +def max_len
      +  @max_len
      +end
      +
      +
      + + + +
      +

      + + #widthObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute width.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +26
      +27
      +28
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 26
      +
      +def width
      +  @width
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #add_row!(bars) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +36
      +37
      +38
      +39
      +40
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 36
      +
      +def add_row!(bars)
      +  @bars.concat(bars)
      +  @max_freq, i = find_max(transform_values(@transform, bars))
      +  @max_len = @bars[i].to_s.length
      +end
      +
      +
      + +
      +

      + + #n_columnsObject + + + + + +

      + + + + +
      +
      +
      +
      +32
      +33
      +34
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 32
      +
      +def n_columns
      +  @width
      +end
      +
      +
      + +
      +

      + + #n_rowsObject + + + + + +

      + + + + +
      +
      +
      +
      +28
      +29
      +30
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 28
      +
      +def n_rows
      +  @bars.length
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +
      +
      # File 'src/lib/unicode_plot/barplot.rb', line 42
      +
      +def print_row(out, row_index)
      +  check_row_index(row_index)
      +  bar = @bars[row_index]
      +  max_bar_width = [width - 2 - max_len, 1].max
      +  val = transform_values(@transform, bar)
      +  bar_len = max_freq > 0 ?
      +    ([val, 0].max.fdiv(max_freq) * max_bar_width).round :
      +    0
      +  bar_str = max_freq > 0 ? @symbol * bar_len : ""
      +  bar_lbl = bar.to_s
      +  print_styled(out, bar_str, color: @color)
      +  print_styled(out, " ", bar_lbl, color: :normal)
      +  pan_len = [max_bar_width + 1 + max_len - bar_len - bar_lbl.length, 0].max
      +  pad = " " * pan_len.round
      +  out.print(pad)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/BlockCanvas.html b/0.0.5/UnicodePlot/BlockCanvas.html new file mode 100644 index 0000000..eb43372 --- /dev/null +++ b/0.0.5/UnicodePlot/BlockCanvas.html @@ -0,0 +1,433 @@ + + + + + + + Class: UnicodePlot::BlockCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::BlockCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + LookupCanvas + + + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/block_canvas.rb
      +
      + +
      + +

      Overview

      +
      +

      The BlockCanvas is also Unicode-based.
      +It has half the resolution of the BrailleCanvas.
      +In contrast to BrailleCanvas, the pixels don’t
      +have visible spacing between them.
      +This canvas effectively turns every character
      +into 4 pixels that can individually be manipulated
      +using binary operations.

      + + +
      +
      +
      + + +
      + +

      + Constant Summary + collapse +

      + +
      + +
      X_PIXEL_PER_CHAR = + +
      +
      2
      + +
      Y_PIXEL_PER_CHAR = + +
      +
      2
      + +
      BLOCK_SIGNS = + +
      +
      [
      +  [0b1000, 0b0010].freeze,
      +  [0b0100, 0b0001].freeze
      +].freeze
      + +
      BLOCK_DECODE = + +
      +
      [
      +  -' ', -'', -'', -'',
      +  -'', -'', -'', -'',
      +  -'', -'', -'', -'',
      +  -'', -'', -'', -''
      +].freeze
      + +
      + + + + + + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from LookupCanvas

      +

      #pixel!, #print_row

      + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, fill_char = 0, **kw) ⇒ BlockCanvas + + + + + +

      +
      +

      Returns a new instance of BlockCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +
      +
      # File 'src/lib/unicode_plot/canvas/block_canvas.rb', line 15
      +
      +def initialize(width, height, fill_char=0, **kw)
      +  super(width, height,
      +        X_PIXEL_PER_CHAR,
      +        Y_PIXEL_PER_CHAR,
      +        fill_char,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #lookup_decode(x) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +36
      +
      +
      # File 'src/lib/unicode_plot/canvas/block_canvas.rb', line 36
      +
      +def lookup_decode(x) ; BLOCK_DECODE[x] ; end
      +
      +
      + +
      +

      + + #lookup_encode(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +35
      +
      +
      # File 'src/lib/unicode_plot/canvas/block_canvas.rb', line 35
      +
      +def lookup_encode(x,y) ; BLOCK_SIGNS[x][y] ; end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/BorderMaps.html b/0.0.5/UnicodePlot/BorderMaps.html new file mode 100644 index 0000000..7c0a03d --- /dev/null +++ b/0.0.5/UnicodePlot/BorderMaps.html @@ -0,0 +1,158 @@ + + + + + + + Module: UnicodePlot::BorderMaps + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::BorderMaps + + + +

      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/renderer.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      BORDER_SOLID = + +
      +
      {
      +  tl: "",
      +  tr: "",
      +  bl: "",
      +  br: "",
      +  t:  "",
      +  l:  "",
      +  b:  "",
      +  r:  ""
      +}.freeze
      + +
      BORDER_CORNERS = + +
      +
      {
      +  tl: "",
      +  tr: "",
      +  bl: "",
      +  br: "",
      +  t:  " ",
      +  l:  " ",
      +  b:  " ",
      +  r:  " ",
      +}.freeze
      + +
      BORDER_BARPLOT = + +
      +
      {
      +  tl: "",
      +  tr: "",
      +  bl: "",
      +  br: "",
      +  t:  " ",
      +  l:  "",
      +  b:  " ",
      +  r:  " ",
      +}.freeze
      + +
      + + + + + + + + + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/BorderPrinter.html b/0.0.5/UnicodePlot/BorderPrinter.html new file mode 100644 index 0000000..b01288a --- /dev/null +++ b/0.0.5/UnicodePlot/BorderPrinter.html @@ -0,0 +1,263 @@ + + + + + + + Module: UnicodePlot::BorderPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::BorderPrinter + + + +

      +
      + + + + + + +
      +
      Includes:
      +
      StyledPrinter
      +
      + + + + +
      +
      Included in:
      +
      Canvas, Renderer
      +
      + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/renderer.rb
      +
      + +
      + + + + +

      Constant Summary

      + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      + + +
      +

      Instance Method Details

      + + +
      + + + + + +
      +
      +
      +
      +56
      +57
      +58
      +59
      +60
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 56
      +
      +def print_border_bottom(out, padding, length, border=:solid, color: :light_black)
      +  return if border == :none
      +  b = BORDER_MAP[border]
      +  print_styled(out, padding, b[:bl], b[:b] * length, b[:br], color: color)
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +50
      +51
      +52
      +53
      +54
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 50
      +
      +def print_border_top(out, padding, length, border=:solid, color: :light_black)
      +  return if border == :none
      +  b = BORDER_MAP[border]
      +  print_styled(out, padding, b[:tl], b[:t] * length, b[:tr], color: color)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Boxplot.html b/0.0.5/UnicodePlot/Boxplot.html new file mode 100644 index 0000000..af43e3f --- /dev/null +++ b/0.0.5/UnicodePlot/Boxplot.html @@ -0,0 +1,786 @@ + + + + + + + Class: UnicodePlot::Boxplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Boxplot + + + +

      +
      + +
      +
      Inherits:
      +
      + Plot + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/boxplot.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      MIN_WIDTH = + +
      +
      10
      + +
      DEFAULT_COLOR = + +
      +
      :green
      + +
      + + + + + + +

      Constants inherited + from Plot

      +

      Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + +

      Instance Attribute Summary collapse

      +
        + +
      • + + + #max_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute max_x.

        +
        + +
      • + + +
      • + + + #min_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute min_x.

        +
        + +
      • + + +
      + + + + + +

      Attributes inherited from Plot

      +

      #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Plot

      +

      #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(data, width, color, min_x, max_x, **kw) ⇒ Boxplot + + + + + +

      +
      +

      Returns a new instance of Boxplot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 8
      +
      +def initialize(data, width, color, min_x, max_x, **kw)
      +  if min_x == max_x
      +    min_x -= 1
      +    max_x += 1
      +  end
      +  width = [width, MIN_WIDTH].max
      +  @data = [data.percentile([0, 25, 50, 75, 100])]
      +  @color = color
      +  @width = [width, MIN_WIDTH].max
      +  @min_x = min_x
      +  @max_x = max_x
      +  super(**kw)
      +end
      +
      +
      + +
      + +
      +

      Instance Attribute Details

      + + + +
      +

      + + #max_xObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute max_x.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +23
      +24
      +25
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 23
      +
      +def max_x
      +  @max_x
      +end
      +
      +
      + + + +
      +

      + + #min_xObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute min_x.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +22
      +23
      +24
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 22
      +
      +def min_x
      +  @min_x
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #add_series!(data) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +37
      +38
      +39
      +40
      +41
      +42
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 37
      +
      +def add_series!(data)
      +  mi, ma = data.minmax
      +  @data << data.percentile([0, 25, 50, 75, 100])
      +  @min_x = [mi, @min_x].min
      +  @max_x = [ma, @max_x].max
      +end
      +
      +
      + +
      +

      + + #n_columnsObject + + + + + +

      + + + + +
      +
      +
      +
      +33
      +34
      +35
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 33
      +
      +def n_columns
      +  @width
      +end
      +
      +
      + +
      +

      + + #n_dataObject + + + + + +

      + + + + +
      +
      +
      +
      +25
      +26
      +27
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 25
      +
      +def n_data
      +  @data.length
      +end
      +
      +
      + +
      +

      + + #n_rowsObject + + + + + +

      + + + + +
      +
      +
      +
      +29
      +30
      +31
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 29
      +
      +def n_rows
      +  3 * @data.length
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/boxplot.rb', line 44
      +
      +def print_row(out, row_index)
      +  check_row_index(row_index)
      +  series = @data[(row_index / 3.0).to_i]
      +
      +  series_row = row_index % 3
      +
      +  min_char       = ['', '' , ''][series_row]
      +  line_char      = [' ', '' , ' '][series_row]
      +  left_box_char  = ['', '' , ''][series_row]
      +  line_box_char  = ['', ' ' , ''][series_row]
      +  median_char    = ['', '' , ''][series_row]
      +  right_box_char = ['', '' , ''][series_row]
      +  max_char       = ['', '' , ''][series_row]
      +
      +  line = (0 ... @width).map { ' ' }
      +
      +  # Draw shapes first - this is most important,
      +  # so they'll always be drawn even if there's not enough space
      +
      +  transformed = transform(series)
      +  line[transformed[0] - 1] = min_char
      +  line[transformed[1] - 1] = left_box_char
      +  line[transformed[2] - 1] = median_char
      +  line[transformed[3] - 1] = right_box_char
      +  line[transformed[4] - 1] = max_char
      +
      +  (transformed[0] ... (transformed[1] - 1)).each do |i|
      +    line[i] = line_char
      +  end
      +  (transformed[1] ... (transformed[2] - 1)).each do |i|
      +    line[i] = line_box_char
      +  end
      +  (transformed[2] ... (transformed[3] - 1)).each do |i|
      +    line[i] = line_box_char
      +  end
      +  (transformed[3] ... (transformed[4] - 1)).each do |i|
      +    line[i] = line_char
      +  end
      +
      +  print_styled(out, line.join(''), color: @color)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/BrailleCanvas.html b/0.0.5/UnicodePlot/BrailleCanvas.html new file mode 100644 index 0000000..6bed863 --- /dev/null +++ b/0.0.5/UnicodePlot/BrailleCanvas.html @@ -0,0 +1,466 @@ + + + + + + + Class: UnicodePlot::BrailleCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::BrailleCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + Canvas + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/braille_canvas.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      X_PIXEL_PER_CHAR = + +
      +
      2
      + +
      Y_PIXEL_PER_CHAR = + +
      +
      4
      + +
      BRAILLE_SIGNS = + +
      +
      [
      +  [
      +    0x2801,
      +    0x2802,
      +    0x2804,
      +    0x2840,
      +  ].freeze,
      +  [
      +    0x2808,
      +    0x2810,
      +    0x2820,
      +    0x2880
      +  ].freeze
      +].freeze
      + +
      + + + + + + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, **kw) ⇒ BrailleCanvas + + + + + +

      +
      +

      Returns a new instance of BrailleCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +
      +
      # File 'src/lib/unicode_plot/canvas/braille_canvas.rb', line 23
      +
      +def initialize(width, height, **kw)
      +  super(width, height,
      +        width * X_PIXEL_PER_CHAR,
      +        height * Y_PIXEL_PER_CHAR,
      +        "\u{2800}",
      +        x_pixel_per_char: X_PIXEL_PER_CHAR,
      +        y_pixel_per_char: Y_PIXEL_PER_CHAR,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +
      +
      # File 'src/lib/unicode_plot/canvas/braille_canvas.rb', line 33
      +
      +def pixel!(pixel_x, pixel_y, color)
      +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
      +         0 <= pixel_y && pixel_y <= pixel_height
      +    return color
      +  end
      +  pixel_x -= 1 unless pixel_x < pixel_width
      +  pixel_y -= 1 unless pixel_y < pixel_height
      +  tx = pixel_x.fdiv(pixel_width) * width
      +  char_x = tx.floor + 1
      +  char_x_off = pixel_x % X_PIXEL_PER_CHAR + 1
      +  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
      +
      +  char_y_off = pixel_y % Y_PIXEL_PER_CHAR + 1
      +  char_y = ((pixel_y - (char_y_off - 1)) / Y_PIXEL_PER_CHAR) + 1
      +
      +  index = index_at(char_x - 1, char_y - 1)
      +  if index
      +    @grid[index] = (@grid[index].ord | BRAILLE_SIGNS[char_x_off - 1][char_y_off - 1]).chr(Encoding::UTF_8)
      +    @colors[index] |= COLOR_ENCODE[color]
      +  end
      +  color
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +
      +
      # File 'src/lib/unicode_plot/canvas/braille_canvas.rb', line 56
      +
      +def print_row(out, row_index)
      +  unless 0 <= row_index && row_index < height
      +    raise ArgumentError, "row_index out of bounds"
      +  end
      +  y = row_index
      +  (0 ... width).each do |x|
      +    print_color(out, color_at(x, y), char_at(x, y))
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Canvas.html b/0.0.5/UnicodePlot/Canvas.html new file mode 100644 index 0000000..32d60b1 --- /dev/null +++ b/0.0.5/UnicodePlot/Canvas.html @@ -0,0 +1,1721 @@ + + + + + + + Class: UnicodePlot::Canvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Canvas + + + +

      +
      + +
      +
      Inherits:
      +
      + Object + +
        +
      • Object
      • + + + +
      + show all + +
      +
      + + + + + + +
      +
      Includes:
      +
      BorderPrinter
      +
      + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas.rb
      +
      + +
      + +
      +

      Direct Known Subclasses

      +

      BrailleCanvas, DensityCanvas, LookupCanvas

      +
      + + +

      + Constant Summary + collapse +

      + +
      + +
      CANVAS_CLASS_MAP = + +
      +
      {}
      + +
      + + + + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + +

      Instance Attribute Summary collapse

      +
        + +
      • + + + #height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute height.

        +
        + +
      • + + +
      • + + + #origin_x ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute origin_x.

        +
        + +
      • + + +
      • + + + #origin_y ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute origin_y.

        +
        + +
      • + + +
      • + + + #pixel_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute pixel_height.

        +
        + +
      • + + +
      • + + + #pixel_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute pixel_width.

        +
        + +
      • + + +
      • + + + #plot_height ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute plot_height.

        +
        + +
      • + + +
      • + + + #plot_width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute plot_width.

        +
        + +
      • + + +
      • + + + #width ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute width.

        +
        + +
      • + + +
      • + + + #x_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute x_pixel_per_char.

        +
        + +
      • + + +
      • + + + #y_pixel_per_char ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute y_pixel_per_char.

        +
        + +
      • + + +
      + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, pixel_width, pixel_height, fill_char, origin_x: 0, origin_y: 0, plot_width: 1, plot_height: 1, x_pixel_per_char: 1, y_pixel_per_char: 1) ⇒ Canvas + + + + + +

      +
      +

      Returns a new instance of Canvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 17
      +
      +def initialize(width, height, pixel_width, pixel_height, fill_char,
      +               origin_x: 0,
      +               origin_y: 0,
      +               plot_width: 1,
      +               plot_height: 1,
      +               x_pixel_per_char: 1,
      +               y_pixel_per_char: 1)
      +  @width = width
      +  @height = height
      +  @pixel_width = check_positive(pixel_width, :pixel_width)
      +  @pixel_height = check_positive(pixel_height, :pixel_height)
      +  @origin_x = origin_x
      +  @origin_y = origin_y
      +  @plot_width = plot_width
      +  @plot_height = plot_height
      +  @x_pixel_per_char = x_pixel_per_char
      +  @y_pixel_per_char = y_pixel_per_char
      +  @grid = Array.new(@width * @height, fill_char)
      +  @colors = Array.new(@width * @height, COLOR_ENCODE[:normal])
      +end
      +
      +
      + +
      + +
      +

      Instance Attribute Details

      + + + +
      +

      + + #heightObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute height.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +39
      +40
      +41
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 39
      +
      +def height
      +  @height
      +end
      +
      +
      + + + +
      +

      + + #origin_xObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute origin_x.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +42
      +43
      +44
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 42
      +
      +def origin_x
      +  @origin_x
      +end
      +
      +
      + + + +
      +

      + + #origin_yObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute origin_y.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +43
      +44
      +45
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 43
      +
      +def origin_y
      +  @origin_y
      +end
      +
      +
      + + + +
      +

      + + #pixel_heightObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute pixel_height.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +41
      +42
      +43
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 41
      +
      +def pixel_height
      +  @pixel_height
      +end
      +
      +
      + + + +
      +

      + + #pixel_widthObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute pixel_width.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +40
      +41
      +42
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 40
      +
      +def pixel_width
      +  @pixel_width
      +end
      +
      +
      + + + +
      +

      + + #plot_heightObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute plot_height.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +45
      +46
      +47
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 45
      +
      +def plot_height
      +  @plot_height
      +end
      +
      +
      + + + +
      +

      + + #plot_widthObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute plot_width.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +44
      +45
      +46
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 44
      +
      +def plot_width
      +  @plot_width
      +end
      +
      +
      + + + +
      +

      + + #widthObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute width.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +38
      +39
      +40
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 38
      +
      +def width
      +  @width
      +end
      +
      +
      + + + +
      +

      + + #x_pixel_per_charObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute x_pixel_per_char.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +46
      +47
      +48
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 46
      +
      +def x_pixel_per_char
      +  @x_pixel_per_char
      +end
      +
      +
      + + + +
      +

      + + #y_pixel_per_charObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute y_pixel_per_char.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +47
      +48
      +49
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 47
      +
      +def y_pixel_per_char
      +  @y_pixel_per_char
      +end
      +
      +
      + +
      + + +
      +

      Class Method Details

      + + +
      +

      + + .create(canvas_type, width, height, **kw) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 7
      +
      +def self.create(canvas_type, width, height, **kw)
      +  canvas_class = CANVAS_CLASS_MAP[canvas_type]
      +  case canvas_class
      +  when Class
      +    canvas_class.new(width, height, **kw)
      +  else
      +    raise ArgumentError, "unknown canvas type: #{canvas_type}"
      +  end
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +

      + + #char_at(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +71
      +72
      +73
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 71
      +
      +def char_at(x, y)
      +  @grid[index_at(x, y)]
      +end
      +
      +
      + +
      +

      + + #color_at(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +75
      +76
      +77
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 75
      +
      +def color_at(x, y)
      +  @colors[index_at(x, y)]
      +end
      +
      +
      + +
      +

      + + #index_at(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +79
      +80
      +81
      +82
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 79
      +
      +def index_at(x, y)
      +  return nil unless 0 <= x && x < width && 0 <= y && y < height
      +  y * width + x
      +end
      +
      +
      + +
      +

      + + #line!(x1, y1, x2, y2, color) ⇒ Object + + + + + +

      +
      +

      digital differential analyzer algorithm

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 112
      +
      +def line!(x1, y1, x2, y2, color)
      +  if (x1 < origin_x && x2 < origin_x) ||
      +      (x1 > origin_x + plot_width && x2 > origin_x + plot_width)
      +    return color
      +  end
      +  if (y1 < origin_y && y2 < origin_y) ||
      +      (y1 > origin_y + plot_height && y2 > origin_y + plot_height)
      +    return color
      +  end
      +
      +  toff = x1 - origin_x
      +  px1 = toff.fdiv(plot_width) * pixel_width
      +  toff = x2 - origin_x
      +  px2 = toff.fdiv(plot_width) * pixel_width
      +
      +  toff = y1 - origin_y
      +  py1 = pixel_height - toff.fdiv(plot_height) * pixel_height
      +  toff = y2 - origin_y
      +  py2 = pixel_height - toff.fdiv(plot_height) * pixel_height
      +
      +  dx = px2 - px1
      +  dy = py2 - py1
      +  nsteps = dx.abs > dy.abs ? dx.abs : dy.abs
      +  inc_x = dx.fdiv(nsteps)
      +  inc_y = dy.fdiv(nsteps)
      +
      +  cur_x = px1
      +  cur_y = py1
      +  pixel!(cur_x.floor, cur_y.floor, color)
      +  1.upto(nsteps) do |i|
      +    cur_x += inc_x
      +    cur_y += inc_y
      +    pixel!(cur_x.floor, cur_y.floor, color)
      +  end
      +  color
      +end
      +
      +
      + +
      +

      + + #lines!(x, y, color = :normal) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 149
      +
      +def lines!(x, y, color = :normal)
      +  if x.length != y.length
      +    raise ArgumentError, "x and y must be the same length"
      +  end
      +  unless x.length > 0
      +    raise ArgumentError, "x and y must not be empty"
      +  end
      +  (0 ... (x.length - 1)).each do |i|
      +    line!(x[i], y[i], x[i+1], y[i+1], color)
      +  end
      +end
      +
      +
      + +
      +

      + + #point!(x, y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 84
      +
      +def point!(x, y, color)
      +  unless origin_x <= x && x <= origin_x + plot_width &&
      +         origin_y <= y && y <= origin_y + plot_height
      +    return color
      +  end
      +
      +  plot_offset_x = x - origin_x
      +  pixel_x = plot_offset_x.fdiv(plot_width) * pixel_width
      +
      +  plot_offset_y = y - origin_y
      +  pixel_y = pixel_height - plot_offset_y.fdiv(plot_height) * pixel_height
      +
      +  pixel!(pixel_x.floor, pixel_y.floor, color)
      +end
      +
      +
      + +
      +

      + + #points!(x, y, color = :normal) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 99
      +
      +def points!(x, y, color = :normal)
      +  if x.length != y.length
      +    raise ArgumentError, "x and y must be the same length"
      +  end
      +  unless x.length > 0
      +    raise ArgumentError, "x and y must not be empty"
      +  end
      +  (0 ... x.length).each do |i|
      +    point!(x[i], y[i], color)
      +  end
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +64
      +65
      +66
      +67
      +68
      +69
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 64
      +
      +def print(out)
      +  (0 ... height).each do |row_index|
      +    print_row(out, row_index)
      +    out.puts if row_index < height - 1
      +  end
      +end
      +
      +
      + +
      +

      + + #show(out) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +
      +
      # File 'src/lib/unicode_plot/canvas.rb', line 49
      +
      +def show(out)
      +  b = BorderMaps::BORDER_SOLID
      +  border_length = width
      +
      +  print_border_top(out, "", border_length, :solid, color: :light_black)
      +  out.puts
      +  (0 ... height).each do |row_index|
      +    print_styled(out, b[:l], color: :light_black)
      +    print_row(out, row_index)
      +    print_styled(out, b[:r], color: :light_black)
      +    out.puts
      +  end
      +  print_border_bottom(out, "", border_length, :solid, color: :light_black)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/DensityCanvas.html b/0.0.5/UnicodePlot/DensityCanvas.html new file mode 100644 index 0000000..ca8fe45 --- /dev/null +++ b/0.0.5/UnicodePlot/DensityCanvas.html @@ -0,0 +1,467 @@ + + + + + + + Class: UnicodePlot::DensityCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::DensityCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + Canvas + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/density_canvas.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      DENSITY_SIGNS = + +
      +
      [" ", "", "", "", ""].freeze
      + +
      MIN_WIDTH = + +
      +
      5
      + +
      MIN_HEIGHT = + +
      +
      5
      + +
      X_PIXEL_PER_CHAR = + +
      +
      1
      + +
      Y_PIXEL_PER_CHAR = + +
      +
      2
      + +
      + + + + + + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, **kw) ⇒ DensityCanvas + + + + + +

      +
      +

      Returns a new instance of DensityCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      +
      # File 'src/lib/unicode_plot/canvas/density_canvas.rb', line 13
      +
      +def initialize(width, height, **kw)
      +  width = [width, MIN_WIDTH].max
      +  height = [height, MIN_HEIGHT].max
      +  @max_density = 1
      +  super(width, height,
      +        width * X_PIXEL_PER_CHAR,
      +        height * Y_PIXEL_PER_CHAR,
      +        0,
      +        x_pixel_per_char: X_PIXEL_PER_CHAR,
      +        y_pixel_per_char: Y_PIXEL_PER_CHAR,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +
      +
      # File 'src/lib/unicode_plot/canvas/density_canvas.rb', line 26
      +
      +def pixel!(pixel_x, pixel_y, color)
      +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
      +         0 <= pixel_y && pixel_y <= pixel_height
      +    return color
      +  end
      +
      +  pixel_x -= 1 unless pixel_x < pixel_width
      +  pixel_y -= 1 unless pixel_y < pixel_height
      +
      +  char_x = (pixel_x.fdiv(pixel_width) * width).floor
      +  char_y = (pixel_y.fdiv(pixel_height) * height).floor
      +
      +  index = index_at(char_x, char_y)
      +  @grid[index] += 1
      +  @max_density = [@max_density, @grid[index]].max
      +  @colors[index] |= COLOR_ENCODE[color]
      +  color
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +
      +
      # File 'src/lib/unicode_plot/canvas/density_canvas.rb', line 45
      +
      +def print_row(out, row_index)
      +  unless 0 <= row_index && row_index < height
      +    raise ArgumentError, "row_index out of bounds"
      +  end
      +  y = row_index
      +  den_sign_count = DENSITY_SIGNS.length
      +  val_scale = (den_sign_count - 1).fdiv(@max_density)
      +  (0 ... width).each do |x|
      +    den_index = (char_at(x, y) * val_scale).round
      +    print_color(out, color_at(x, y), DENSITY_SIGNS[den_index])
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/DotCanvas.html b/0.0.5/UnicodePlot/DotCanvas.html new file mode 100644 index 0000000..ae67aa4 --- /dev/null +++ b/0.0.5/UnicodePlot/DotCanvas.html @@ -0,0 +1,423 @@ + + + + + + + Class: UnicodePlot::DotCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::DotCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + LookupCanvas + + + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/dot_canvas.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      DOT_SIGNS = + +
      +
      [
      +  [
      +    0b10,
      +    0b01
      +  ].freeze
      +].freeze
      + +
      DOT_DECODE = + +
      +
      [
      +  -' ', # 0b00
      +  -'.', # 0b01
      +  -"'", # 0b10
      +  -':', # 0b11
      +].freeze
      + +
      X_PIXEL_PER_CHAR = + +
      +
      1
      + +
      Y_PIXEL_PER_CHAR = + +
      +
      2
      + +
      + + + + + + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from LookupCanvas

      +

      #pixel!, #print_row

      + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, **kw) ⇒ DotCanvas + + + + + +

      +
      +

      Returns a new instance of DotCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +22
      +23
      +24
      +25
      +26
      +
      +
      # File 'src/lib/unicode_plot/canvas/dot_canvas.rb', line 22
      +
      +def initialize(width, height, **kw)
      +  super(width, height,
      +        X_PIXEL_PER_CHAR, Y_PIXEL_PER_CHAR,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #lookup_decode(code) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +32
      +33
      +34
      +
      +
      # File 'src/lib/unicode_plot/canvas/dot_canvas.rb', line 32
      +
      +def lookup_decode(code)
      +  DOT_DECODE[code]
      +end
      +
      +
      + +
      +

      + + #lookup_encode(x, y) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +28
      +29
      +30
      +
      +
      # File 'src/lib/unicode_plot/canvas/dot_canvas.rb', line 28
      +
      +def lookup_encode(x, y)
      +  DOT_SIGNS[x][y]
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/GridPlot.html b/0.0.5/UnicodePlot/GridPlot.html new file mode 100644 index 0000000..7ac75e2 --- /dev/null +++ b/0.0.5/UnicodePlot/GridPlot.html @@ -0,0 +1,861 @@ + + + + + + + Class: UnicodePlot::GridPlot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::GridPlot + + + +

      +
      + +
      +
      Inherits:
      +
      + Plot + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/grid_plot.rb
      +
      + +
      + +
      +

      Direct Known Subclasses

      +

      Lineplot, Scatterplot

      +
      + + +

      + Constant Summary + collapse +

      + +
      + +
      MIN_WIDTH = + +
      +
      5
      + +
      MIN_HEIGHT = + +
      +
      2
      + +
      DEFAULT_HEIGHT = + +
      +
      15
      + +
      + + + + + + +

      Constants inherited + from Plot

      +

      Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Plot

      +

      #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Plot

      +

      #annotate!, #annotate_row!, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(x, y, canvas, width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT, xlim: [0, 0], ylim: [0, 0], grid: true, **kw) ⇒ GridPlot + + + + + +

      +
      +

      Returns a new instance of GridPlot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 7
      +
      +def initialize(x, y, canvas,
      +               width: DEFAULT_WIDTH,
      +               height: DEFAULT_HEIGHT,
      +               xlim: [0, 0], 
      +               ylim: [0, 0],
      +               grid: true,
      +               **kw)
      +  if x.length != y.length
      +    raise ArgumentError, "x and y must be the same length"
      +  end
      +  unless x.length > 0
      +    raise ArgumentError, "x and y must not be empty"
      +  end
      +  unless xlim.length == 2 && ylim.length == 2
      +    raise ArgumentError, "xlim and ylim must be 2-length arrays"
      +  end
      +  width = [width, MIN_WIDTH].max
      +  height = [height, MIN_HEIGHT].max
      +  min_x, max_x = Utils.extend_limits(x, xlim)
      +  min_y, max_y = Utils.extend_limits(y, ylim)
      +  origin_x = min_x
      +  origin_y = min_y
      +  plot_width = max_x - origin_x
      +  plot_height = max_y - origin_y
      +  @canvas = Canvas.create(canvas, width, height,
      +                          origin_x: origin_x,
      +                          origin_y: origin_y,
      +                          plot_width: plot_width,
      +                          plot_height: plot_height)
      +  super(**kw)
      +
      +  min_x_str = (Utils.roundable?(min_x) ? min_x.round : min_x).to_s
      +  max_x_str = (Utils.roundable?(max_x) ? max_x.round : max_x).to_s
      +  min_y_str = (Utils.roundable?(min_y) ? min_y.round : min_y).to_s
      +  max_y_str = (Utils.roundable?(max_y) ? max_y.round : max_y).to_s
      +
      +  annotate_row!(:l, 0, max_y_str, color: :light_black)
      +  annotate_row!(:l, height-1, min_y_str, color: :light_black)
      +  annotate!(:bl, min_x_str, color: :light_black)
      +  annotate!(:br, max_x_str, color: :light_black)
      +
      +  if grid
      +    if min_y < 0 && 0 < max_y
      +      step = plot_width.fdiv(width * @canvas.x_pixel_per_char - 1)
      +      min_x.step(max_x, by: step) do |i|
      +        @canvas.point!(i, 0, :normal)
      +      end
      +    end
      +    if min_x < 0 && 0 < max_x
      +      step = plot_height.fdiv(height * @canvas.y_pixel_per_char - 1)
      +      min_y.step(max_y, by: step) do |i|
      +        @canvas.point!(0, i, :normal)
      +      end
      +    end
      +  end
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #lines!(x, y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +92
      +93
      +94
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 92
      +
      +def lines!(x, y, color)
      +  @canvas.lines!(x, y, color)
      +end
      +
      +
      + +
      +

      + + #n_columnsObject + + + + + +

      + + + + +
      +
      +
      +
      +84
      +85
      +86
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 84
      +
      +def n_columns
      +  @canvas.width
      +end
      +
      +
      + +
      +

      + + #n_rowsObject + + + + + +

      + + + + +
      +
      +
      +
      +80
      +81
      +82
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 80
      +
      +def n_rows
      +  @canvas.height
      +end
      +
      +
      + +
      +

      + + #origin_xObject + + + + + +

      + + + + +
      +
      +
      +
      +64
      +65
      +66
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 64
      +
      +def origin_x
      +  @canvas.origin_x
      +end
      +
      +
      + +
      +

      + + #origin_yObject + + + + + +

      + + + + +
      +
      +
      +
      +68
      +69
      +70
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 68
      +
      +def origin_y
      +  @canvas.origin_y
      +end
      +
      +
      + +
      +

      + + #plot_heightObject + + + + + +

      + + + + +
      +
      +
      +
      +76
      +77
      +78
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 76
      +
      +def plot_height
      +  @canvas.plot_height
      +end
      +
      +
      + +
      +

      + + #plot_widthObject + + + + + +

      + + + + +
      +
      +
      +
      +72
      +73
      +74
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 72
      +
      +def plot_width
      +  @canvas.plot_width
      +end
      +
      +
      + +
      +

      + + #points!(x, y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +88
      +89
      +90
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 88
      +
      +def points!(x, y, color)
      +  @canvas.points!(x, y, color)
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +96
      +97
      +98
      +
      +
      # File 'src/lib/unicode_plot/grid_plot.rb', line 96
      +
      +def print_row(out, row_index)
      +  @canvas.print_row(out, row_index)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/IOContext.html b/0.0.5/UnicodePlot/IOContext.html new file mode 100644 index 0000000..3d6a7ff --- /dev/null +++ b/0.0.5/UnicodePlot/IOContext.html @@ -0,0 +1,301 @@ + + + + + + + Class: UnicodePlot::IOContext + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::IOContext + + + +

      +
      + +
      +
      Inherits:
      +
      + Object + +
        +
      • Object
      • + + + +
      + show all + +
      +
      + + + + +
      +
      Extended by:
      +
      Forwardable
      +
      + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/io_context.rb
      +
      + +
      + + + + + + + + + +

      + Instance Method Summary + collapse +

      + + + + + +
      +

      Constructor Details

      + +
      +

      + + #initialize(io, color: :auto) ⇒ IOContext + + + + + +

      +
      +

      Returns a new instance of IOContext.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +7
      +8
      +9
      +10
      +
      +
      # File 'src/lib/unicode_plot/io_context.rb', line 7
      +
      +def initialize(io, color: :auto)
      +  @io = io
      +  @color = check_color(color)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #color?Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +
      +
      # File 'src/lib/unicode_plot/io_context.rb', line 14
      +
      +def color?
      +  case @color
      +  when :auto
      +    @io.respond_to?(:tty?) ? @io.tty? : false
      +  else
      +    @color
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Lineplot.html b/0.0.5/UnicodePlot/Lineplot.html new file mode 100644 index 0000000..0982f0f --- /dev/null +++ b/0.0.5/UnicodePlot/Lineplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Lineplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Lineplot + + + +

      +
      + +
      +
      Inherits:
      +
      + GridPlot + +
        +
      • Object
      • + + + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/lineplot.rb
      +
      + +
      + + + + +

      Constant Summary

      + +

      Constants inherited + from GridPlot

      +

      GridPlot::DEFAULT_HEIGHT, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

      + + + +

      Constants inherited + from Plot

      +

      Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Plot

      +

      #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

      + + + + + + + + + +

      Method Summary

      + +

      Methods inherited from GridPlot

      +

      #initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

      + + + + + + + + + +

      Methods inherited from Plot

      +

      #annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +

      This class inherits a constructor from UnicodePlot::GridPlot

      + +
      + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/LookupCanvas.html b/0.0.5/UnicodePlot/LookupCanvas.html new file mode 100644 index 0000000..970c3f7 --- /dev/null +++ b/0.0.5/UnicodePlot/LookupCanvas.html @@ -0,0 +1,431 @@ + + + + + + + Class: UnicodePlot::LookupCanvas + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::LookupCanvas + + + +

      +
      + +
      +
      Inherits:
      +
      + Canvas + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/canvas/lookup_canvas.rb
      +
      + +
      + +
      +

      Direct Known Subclasses

      +

      AsciiCanvas, BlockCanvas, DotCanvas

      +
      + + + +

      Constant Summary

      + +

      Constants inherited + from Canvas

      +

      Canvas::CANVAS_CLASS_MAP

      + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Canvas

      +

      #height, #origin_x, #origin_y, #pixel_height, #pixel_width, #plot_height, #plot_width, #width, #x_pixel_per_char, #y_pixel_per_char

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Canvas

      +

      #char_at, #color_at, create, #index_at, #line!, #lines!, #point!, #points!, #print, #show

      + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char = 0, **kw) ⇒ LookupCanvas + + + + + +

      +
      +

      Returns a new instance of LookupCanvas.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +
      +
      # File 'src/lib/unicode_plot/canvas/lookup_canvas.rb', line 3
      +
      +def initialize(width, height, x_pixel_per_char, y_pixel_per_char, fill_char=0, **kw)
      +  super(width, height,
      +        width * x_pixel_per_char,
      +        height * y_pixel_per_char,
      +        fill_char,
      +        x_pixel_per_char: x_pixel_per_char,
      +        y_pixel_per_char: y_pixel_per_char,
      +        **kw)
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #pixel!(pixel_x, pixel_y, color) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +
      +
      # File 'src/lib/unicode_plot/canvas/lookup_canvas.rb', line 13
      +
      +def pixel!(pixel_x, pixel_y, color)
      +  unless 0 <= pixel_x && pixel_x <= pixel_width &&
      +         0 <= pixel_y && pixel_y <= pixel_height
      +    return color
      +  end
      +  pixel_x -= 1 unless pixel_x < pixel_width
      +  pixel_y -= 1 unless pixel_y < pixel_height
      +
      +  tx = pixel_x.fdiv(pixel_width) * width
      +  char_x = tx.floor + 1
      +  char_x_off = pixel_x % x_pixel_per_char + 1
      +  char_x += 1 if char_x < tx.round + 1 && char_x_off == 1
      +
      +  char_y_off = pixel_y % y_pixel_per_char + 1
      +  char_y = ((pixel_y - (char_y_off - 1)) / y_pixel_per_char) + 1
      +
      +  index = index_at(char_x - 1, char_y - 1)
      +  if index
      +    @grid[index] |= lookup_encode(char_x_off - 1, char_y_off - 1)
      +    @colors[index] |= COLOR_ENCODE[color]
      +  end
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +
      +
      # File 'src/lib/unicode_plot/canvas/lookup_canvas.rb', line 36
      +
      +def print_row(out, row_index)
      +  unless 0 <= row_index && row_index < height
      +    raise ArgumentError, "row_index out of bounds"
      +  end
      +  y = row_index
      +  (0 ... width).each do |x|
      +    print_color(out, color_at(x, y), lookup_decode(char_at(x, y)))
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/NumericStemplot.html b/0.0.5/UnicodePlot/NumericStemplot.html new file mode 100644 index 0000000..74e3ca6 --- /dev/null +++ b/0.0.5/UnicodePlot/NumericStemplot.html @@ -0,0 +1,500 @@ + + + + + + + Class: UnicodePlot::NumericStemplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::NumericStemplot + + + +

      +
      + +
      +
      Inherits:
      +
      + Stemplot + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/stemplot.rb
      +
      + +
      + + + + + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Stemplot

      +

      factory, #insert, #leaves, #max_stem_length, #raw_stems, #stems

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(vector, scale: 10, **kw) ⇒ NumericStemplot + + + + + +

      +
      +

      Returns a new instance of NumericStemplot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 138
      +
      +def initialize(vector, scale: 10, **kw)
      +  super
      +  Array(vector).each do |value|
      +    fvalue = value.to_f.fdiv(scale/10.0)
      +    stemnum = (fvalue/10).to_i
      +    leafnum = (fvalue - (stemnum*10)).to_i
      +    stemsign = value.negative? ? "-" : ''
      +    stem = stemsign + stemnum.abs.to_s
      +    leaf = leafnum.abs.to_s
      +    self.insert(stem, leaf)
      +  end
      +end
      +
      +
      + +
      + + +
      +

      Class Method Details

      + + +
      +

      + + .sorted_stem_list(stems, all: true) ⇒ Array + + + + + +

      +
      +

      Used when we have stems from a back-to-back stemplot and a combined list of stems is given

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + stems + + + (Array) + + + + — +

        Concatenated list of stems from two plots

        +
        + +
      • + +
      • + + all + + + (Boolean) + + + (defaults to: true) + + + — +

        Return all stems if true, otherwise only return stems if a leaf exists for a stem

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Array) + + + + — +

        Sorted list of stems

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 168
      +
      +def self.sorted_stem_list(stems, all: true)
      +  negkeys, poskeys = stems.partition { |str| str[0] == '-'}
      +  if all
      +    negmin, negmax = negkeys.map(&:to_i).map(&:abs).minmax
      +    posmin, posmax = poskeys.map(&:to_i).minmax
      +    negrange = negmin ? (negmin..negmax).to_a.reverse.map { |s| "-"+s.to_s } : []
      +    posrange = posmin ? (posmin..posmax).to_a.map(&:to_s) : []
      +    return negrange + posrange
      +  else
      +    negkeys.sort! { |a,b| a.to_i <=> b.to_i }
      +    poskeys.sort! { |a,b| a.to_i <=> b.to_i }
      +    return negkeys + poskeys
      +  end
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +
      +
      +

      Print key to STDOUT

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + scale + + + (Integer) + + + + — +

        Scale, should be a power of 10

        +
        + +
      • + +
      • + + divider + + + (String) + + + + — +

        Divider character between stem and leaf

        +
        + +
      • + +
      + + +
      + + + + +
      +
      +
      +
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 154
      +
      +def print_key(scale, divider)
      +  # First print the key
      +  puts "Key: 1#{divider}0 = #{scale}"
      +  # Description of where the decimal is
      +  trunclog = Math.log10(scale).truncate
      +  ndigits = trunclog.abs
      +  right_or_left = (trunclog < 0) ? "left" : "right"
      +  puts "The decimal is #{ndigits} digit(s) to the #{right_or_left} of #{divider}"
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Plot.html b/0.0.5/UnicodePlot/Plot.html new file mode 100644 index 0000000..65735cb --- /dev/null +++ b/0.0.5/UnicodePlot/Plot.html @@ -0,0 +1,1862 @@ + + + + + + + Class: UnicodePlot::Plot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Plot + + + +

      +
      + +
      +
      Inherits:
      +
      + Object + +
        +
      • Object
      • + + + +
      + show all + +
      +
      + + + + + + +
      +
      Includes:
      +
      StyledPrinter
      +
      + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/plot.rb
      +
      + +
      + +
      +

      Direct Known Subclasses

      +

      Barplot, Boxplot, GridPlot

      +
      + + +

      + Constant Summary + collapse +

      + +
      + +
      DEFAULT_WIDTH = + +
      +
      40
      + +
      DEFAULT_BORDER = + +
      +
      :solid
      + +
      DEFAULT_MARGIN = + +
      +
      3
      + +
      DEFAULT_PADDING = + +
      +
      1
      + +
      COLOR_CYCLE = + +
      +
      [
      +  :green,
      +  :blue,
      +  :red,
      +  :magenta,
      +  :yellow,
      +  :cyan
      +].freeze
      + +
      + + + + + + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + +

      Instance Attribute Summary collapse

      +
        + +
      • + + + #border ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute border.

        +
        + +
      • + + +
      • + + + #colors_deco ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute colors_deco.

        +
        + +
      • + + +
      • + + + #colors_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute colors_left.

        +
        + +
      • + + +
      • + + + #colors_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute colors_right.

        +
        + +
      • + + +
      • + + + #decorations ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute decorations.

        +
        + +
      • + + +
      • + + + #labels_left ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute labels_left.

        +
        + +
      • + + +
      • + + + #labels_right ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute labels_right.

        +
        + +
      • + + +
      • + + + #margin ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute margin.

        +
        + +
      • + + +
      • + + + #padding ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute padding.

        +
        + +
      • + + +
      • + + + #title ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute title.

        +
        + +
      • + + +
      • + + + #xlabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute xlabel.

        +
        + +
      • + + +
      • + + + #ylabel ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute ylabel.

        +
        + +
      • + + +
      + + + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(title: nil, xlabel: nil, ylabel: nil, border: DEFAULT_BORDER, margin: DEFAULT_MARGIN, padding: DEFAULT_PADDING, labels: true) ⇒ Plot + + + + + +

      +
      +

      Returns a new instance of Plot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 10
      +
      +def initialize(title: nil,
      +               xlabel: nil,
      +               ylabel: nil,
      +               border: DEFAULT_BORDER,
      +               margin: DEFAULT_MARGIN,
      +               padding: DEFAULT_PADDING,
      +               labels: true)
      +  @title = title
      +  @xlabel = xlabel
      +  @ylabel = ylabel
      +  @border = check_border(border)
      +  @margin = check_margin(margin)
      +  @padding = padding
      +  @labels_left = {}
      +  @colors_left = {}
      +  @labels_right = {}
      +  @colors_right = {}
      +  @decorations = {}
      +  @colors_deco = {}
      +  @show_labels = labels
      +  @auto_color = 0
      +end
      +
      +
      + +
      + +
      +

      Instance Attribute Details

      + + + +
      +

      + + #borderObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute border.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +36
      +37
      +38
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 36
      +
      +def border
      +  @border
      +end
      +
      +
      + + + +
      +

      + + #colors_decoObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute colors_deco.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +44
      +45
      +46
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 44
      +
      +def colors_deco
      +  @colors_deco
      +end
      +
      +
      + + + +
      +

      + + #colors_leftObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute colors_left.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +40
      +41
      +42
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 40
      +
      +def colors_left
      +  @colors_left
      +end
      +
      +
      + + + +
      +

      + + #colors_rightObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute colors_right.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +42
      +43
      +44
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 42
      +
      +def colors_right
      +  @colors_right
      +end
      +
      +
      + + + +
      +

      + + #decorationsObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute decorations.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +43
      +44
      +45
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 43
      +
      +def decorations
      +  @decorations
      +end
      +
      +
      + + + +
      +

      + + #labels_leftObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute labels_left.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +39
      +40
      +41
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 39
      +
      +def labels_left
      +  @labels_left
      +end
      +
      +
      + + + +
      +

      + + #labels_rightObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute labels_right.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +41
      +42
      +43
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 41
      +
      +def labels_right
      +  @labels_right
      +end
      +
      +
      + + + +
      +

      + + #marginObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute margin.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +37
      +38
      +39
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 37
      +
      +def margin
      +  @margin
      +end
      +
      +
      + + + +
      +

      + + #paddingObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute padding.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +38
      +39
      +40
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 38
      +
      +def padding
      +  @padding
      +end
      +
      +
      + + + +
      +

      + + #titleObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute title.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +33
      +34
      +35
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 33
      +
      +def title
      +  @title
      +end
      +
      +
      + + + +
      +

      + + #xlabelObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute xlabel.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +34
      +35
      +36
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 34
      +
      +def xlabel
      +  @xlabel
      +end
      +
      +
      + + + +
      +

      + + #ylabelObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute ylabel.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +35
      +36
      +37
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 35
      +
      +def ylabel
      +  @ylabel
      +end
      +
      +
      + +
      + + +
      +

      Instance Method Details

      + + +
      +

      + + #annotate!(loc, value, color: :normal) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +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
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 66
      +
      +def annotate!(loc, value, color: :normal)
      +  case loc
      +  when :l
      +    (0 ... n_rows).each do |row|
      +      if @labels_left.fetch(row, "") == ""
      +        @labels_left[row] = value
      +        @colors_left[row] = color
      +        break
      +      end
      +    end
      +  when :r
      +    (0 ... n_rows).each do |row|
      +      if @labels_right.fetch(row, "") == ""
      +        @labels_right[row] = value
      +        @colors_right[row] = color
      +        break
      +      end
      +    end
      +  when :t, :b, :tl, :tr, :bl, :br
      +    @decorations[loc] = value
      +    @colors_deco[loc] = color
      +  else
      +    raise ArgumentError,
      +      "unknown location to annotate (#{loc.inspect} for :t, :b, :l, :r, :tl, :tr, :bl, or :br)"
      +  end
      +end
      +
      +
      + +
      +

      + + #annotate_row!(loc, row_index, value, color: :normal) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 93
      +
      +def annotate_row!(loc, row_index, value, color: :normal)
      +  case loc
      +  when :l
      +    @labels_left[row_index] = value
      +    @colors_left[row_index] = color
      +  when :r
      +    @labels_right[row_index] = value
      +    @colors_right[row_index] = color
      +  else
      +    raise ArgumentError, "unknown location `#{loc}`, try :l or :r instead"
      +  end
      +end
      +
      +
      + +
      +

      + + #next_colorObject + + + + + +

      + + + + +
      +
      +
      +
      +119
      +120
      +121
      +122
      +123
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 119
      +
      +def next_color
      +  COLOR_CYCLE[@auto_color]
      +ensure
      +  @auto_color = (@auto_color + 1) % COLOR_CYCLE.length
      +end
      +
      +
      + +
      +

      + + #render(out = $stdout, newline: true, color: :auto) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +106
      +107
      +108
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 106
      +
      +def render(out=$stdout, newline: true, color: :auto)
      +  Renderer.render(IOContext.new(out, color: color), self, newline)
      +end
      +
      +
      + +
      +

      + + #show_labels?Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +62
      +63
      +64
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 62
      +
      +def show_labels?
      +  @show_labels
      +end
      +
      +
      + +
      +

      + + #title_given?Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +46
      +47
      +48
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 46
      +
      +def title_given?
      +  title && title != ""
      +end
      +
      +
      + +
      +

      + + #to_sObject + + + + + +

      + + + + +
      +
      +
      +
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 125
      +
      +def to_s
      +  StringIO.open do |sio|
      +    render(sio, newline: false)
      +    sio.close
      +    sio.string
      +  end
      +end
      +
      +
      + +
      +

      + + #xlabel_given?Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +50
      +51
      +52
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 50
      +
      +def xlabel_given?
      +  xlabel && xlabel != ""
      +end
      +
      +
      + +
      +

      + + #ylabel_given?Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +54
      +55
      +56
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 54
      +
      +def ylabel_given?
      +  ylabel && ylabel != ""
      +end
      +
      +
      + +
      +

      + + #ylabel_lengthObject + + + + + +

      + + + + +
      +
      +
      +
      +58
      +59
      +60
      +
      +
      # File 'src/lib/unicode_plot/plot.rb', line 58
      +
      +def ylabel_length
      +  ylabel&.length || 0
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Renderer.html b/0.0.5/UnicodePlot/Renderer.html new file mode 100644 index 0000000..634d2e1 --- /dev/null +++ b/0.0.5/UnicodePlot/Renderer.html @@ -0,0 +1,525 @@ + + + + + + + Class: UnicodePlot::Renderer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Renderer + + + +

      +
      + +
      +
      Inherits:
      +
      + Object + +
        +
      • Object
      • + + + +
      + show all + +
      +
      + + + + + + +
      +
      Includes:
      +
      BorderPrinter
      +
      + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/renderer.rb
      +
      + +
      + + + + +

      Constant Summary

      + +

      Constants included + from StyledPrinter

      +

      StyledPrinter::COLOR_DECODE, StyledPrinter::COLOR_ENCODE, StyledPrinter::DISABLE_TEXT_STYLE, StyledPrinter::TEXT_COLORS

      + + +

      Instance Attribute Summary collapse

      +
        + +
      • + + + #out ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute out.

        +
        + +
      • + + +
      • + + + #plot ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

        Returns the value of attribute plot.

        +
        + +
      • + + +
      + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods included from BorderPrinter

      +

      #print_border_bottom, #print_border_top

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(plot) ⇒ Renderer + + + + + +

      +
      +

      Returns a new instance of Renderer.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +70
      +71
      +72
      +73
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 70
      +
      +def initialize(plot)
      +  @plot = plot
      +  @out = nil
      +end
      +
      +
      + +
      + +
      +

      Instance Attribute Details

      + + + +
      +

      + + #outObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute out.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +76
      +77
      +78
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 76
      +
      +def out
      +  @out
      +end
      +
      +
      + + + +
      +

      + + #plotObject (readonly) + + + + + +

      +
      +

      Returns the value of attribute plot.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +75
      +76
      +77
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 75
      +
      +def plot
      +  @plot
      +end
      +
      +
      + +
      + + +
      +

      Class Method Details

      + + +
      +

      + + .render(out, plot, newline) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +66
      +67
      +68
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 66
      +
      +def self.render(out, plot, newline)
      +  new(plot).render(out, newline)
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +

      + + #render(out, newline) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +
      +
      # File 'src/lib/unicode_plot/renderer.rb', line 78
      +
      +def render(out, newline)
      +  @out = out
      +  init_render
      +
      +  render_top
      +  render_rows
      +  render_bottom
      +  out.puts if newline
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Scatterplot.html b/0.0.5/UnicodePlot/Scatterplot.html new file mode 100644 index 0000000..fca72de --- /dev/null +++ b/0.0.5/UnicodePlot/Scatterplot.html @@ -0,0 +1,187 @@ + + + + + + + Class: UnicodePlot::Scatterplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Scatterplot + + + +

      +
      + +
      +
      Inherits:
      +
      + GridPlot + +
        +
      • Object
      • + + + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/scatterplot.rb
      +
      + +
      + + + + +

      Constant Summary

      + +

      Constants inherited + from GridPlot

      +

      GridPlot::DEFAULT_HEIGHT, GridPlot::MIN_HEIGHT, GridPlot::MIN_WIDTH

      + + + +

      Constants inherited + from Plot

      +

      Plot::COLOR_CYCLE, Plot::DEFAULT_BORDER, Plot::DEFAULT_MARGIN, Plot::DEFAULT_PADDING, Plot::DEFAULT_WIDTH

      + + + +

      Constants included + from StyledPrinter

      +

      UnicodePlot::StyledPrinter::COLOR_DECODE, UnicodePlot::StyledPrinter::COLOR_ENCODE, UnicodePlot::StyledPrinter::DISABLE_TEXT_STYLE, UnicodePlot::StyledPrinter::TEXT_COLORS

      + + + + +

      Instance Attribute Summary

      + +

      Attributes inherited from Plot

      +

      #border, #colors_deco, #colors_left, #colors_right, #decorations, #labels_left, #labels_right, #margin, #padding, #title, #xlabel, #ylabel

      + + + + + + + + + +

      Method Summary

      + +

      Methods inherited from GridPlot

      +

      #initialize, #lines!, #n_columns, #n_rows, #origin_x, #origin_y, #plot_height, #plot_width, #points!, #print_row

      + + + + + + + + + +

      Methods inherited from Plot

      +

      #annotate!, #annotate_row!, #initialize, #next_color, #render, #show_labels?, #title_given?, #to_s, #xlabel_given?, #ylabel_given?, #ylabel_length

      + + + + + + + + + +

      Methods included from StyledPrinter

      +

      #print_color, #print_styled

      +
      +

      Constructor Details

      + +

      This class inherits a constructor from UnicodePlot::GridPlot

      + +
      + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Stemplot.html b/0.0.5/UnicodePlot/Stemplot.html new file mode 100644 index 0000000..114712e --- /dev/null +++ b/0.0.5/UnicodePlot/Stemplot.html @@ -0,0 +1,879 @@ + + + + + + + Class: UnicodePlot::Stemplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::Stemplot + + + +

      +
      + +
      +
      Inherits:
      +
      + Object + +
        +
      • Object
      • + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/stemplot.rb
      +
      + +
      + +

      Overview

      +
      +

      Description

      + +

      Draw a stem-leaf plot of the given vector +vec+.

      + +
      stemplot(vec, **kwargs)
      +
      + +

      Draw a back-to-back stem-leaf plot of the given vectors +vec1+ and +vec2+.

      + +
      stemplot(vec1, vec2, **kwargs)
      +
      + +

      The vectors can be any object that converts to an Array, e.g. an Array, Range, etc.
      +If all elements of the vector are Numeric, the stem-leaf plot is classified as a
      +NumericStemplot, otherwise it is classified as a StringStemplot. Back-to-back
      +stem-leaf plots must be the same type, i.e. String and Numeric stem-leaf plots cannot
      +be mixed in a back-to-back plot.

      + +

      Usage

      + +
      stemplot(vec, [vec2], scale:, divider:, padchar:, trim: )
      +
      + +

      Arguments

      + +
        +
      • +vec+: Vector for which the stem leaf plot should be computed.
      • +
      • +vec2+: Optional secondary vector, will be used to create a back-to-back stem-leaf plot.
      • +
      • +scale+: Set scale of plot. Default = 10. Scale is changed via orders of magnitude. Common values are 0.1, 1, and 10. For String stems, the default value of 10 is a one character stem, 100 is a two character stem.
      • +
      • + + + + + + + +
        +divider+: Character for break between stem and leaf. Default = “
        +
      • +
      • +padchar+: Character(s) to separate stems, leaves and dividers. Default = “ “
      • +
      • +trim+: Trims the stem labels when there are no leaves. This can be useful if your data is sparse. Default = +false+
      • +
      • +string_padchar+: Character used to replace missing position for input strings shorter than the stem-size. Default = “_”
      • +
      + +

      Result

      +

      A plot of object type is sent to $stdout

      + + +
      +
      +
      + +
      +

      Examples:

      + + +

      Examples using Numbers

      +

      + +
      # Generate some numbers
      +fifty_floats = 50.times.map { rand(-1000..1000)/350.0 }
      +eighty_ints = 80.times.map { rand(1..100) }
      +another_eighty_ints = 80.times.map { rand(1..100) }
      +three_hundred_ints = 300.times.map { rand(-100..100) }
      +
      +# Single sided stem-plot 
      +UnicodePlot.stemplot(eighty_ints)
      +
      +# Single sided stem-plot with positive and negative values
      +UnicodePlot.stemplot(three_hundred_ints)
      +
      +# Single sided stem-plot using floating point values, scaled
      +UnicodePlot.stemplot(fifty_floats, scale: 1)
      +
      +# Single sided stem-plot using floating point values, scaled with new divider
      +UnicodePlot.stemplot(fifty_floats, scale: 1, divider: "😄")
      +
      +# Back to back stem-plot 
      +UnicodePlot.stemplot(eighty_ints, another_eighty_ints)
      + + +

      Examples using Strings

      +

      + +
      # Generate some strings
      +words_1 = %w[apple junk ant age bee bar baz dog egg a]
      +words_2 = %w[ape flan can cat juice elf gnome child fruit]
      +
      +# Single sided stem-plot 
      +UnicodePlot.stemplot(words_1)
      +
      +# Back to back stem-plot 
      +UnicodePlot.stemplot(words_1, words_2)
      +
      +# Scaled stem plot using scale=100 (two letters for the stem) and trimmed stems
      +UnicodePlot.stemplot(words_1, scale: 100, trim: true)
      +
      +# Above, but changing the string_padchar
      +UnicodePlot.stemplot(words_1, scale: 100, trim: true, string_padchar: '?')
      + +
      + + +
      +

      Direct Known Subclasses

      +

      NumericStemplot, StringStemplot

      +
      + + + + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + +
      +

      Constructor Details

      + +
      +

      + + #initialize(*_args, **_kw) ⇒ Stemplot + + + + + +

      +
      +

      Use factory method – should not be directly called.

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +84
      +85
      +86
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 84
      +
      +def initialize(*_args, **_kw)
      +  @stemleafs = {}
      +end
      +
      +
      + +
      + + +
      +

      Class Method Details

      + + +
      +

      + + .factory(vector, **kw) ⇒ NumericStemplot, StringStemplot + + + + + +

      +
      +

      Factory method to create a Stemplot, creates either a NumericStemplot
      +or StringStemplot depending on input.

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + vector + + + (Array) + + + + — +

        An array of elements to stem-leaf plot

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (NumericStemplot) + + + + — +

        If all elements are Numeric

        +
        + +
      • + +
      • + + + (StringStemplot) + + + + — +

        If any elements are not Numeric

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 94
      +
      +def self.factory(vector, **kw)
      +  vec = Array(vector)
      +  if vec.all? { |item| item.is_a?(Numeric) }
      +    NumericStemplot.new(vec, **kw)
      +  else
      +    StringStemplot.new(vec, **kw)
      +  end
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +

      + + #insert(stem, leaf) ⇒ Object + + + + + +

      +
      +

      Insert a stem and leaf

      + + +
      +
      +
      + + +
      + + + + +
      +
      +
      +
      +104
      +105
      +106
      +107
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 104
      +
      +def insert(stem, leaf)
      +  @stemleafs[stem] ||= []
      +  @stemleafs[stem] << leaf
      +end
      +
      +
      + +
      +

      + + #leaves(stem) ⇒ Array + + + + + +

      +
      +

      Returns a list of leaves for a given stem

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + stem + + + (Object) + + + + — +

        The stem

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Array) + + + + — +

        Unsorted list of leaves

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +118
      +119
      +120
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 118
      +
      +def leaves(stem)
      +  @stemleafs[stem] || []
      +end
      +
      +
      + +
      +

      + + #max_stem_lengthInteger + + + + + +

      +
      +

      Determines largest length of any stem

      + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Integer) + + + + — +

        Length value

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +124
      +125
      +126
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 124
      +
      +def max_stem_length
      +  @stemleafs.values.map(&:length).max
      +end
      +
      +
      + +
      +

      + + #raw_stemsArray + + + + + +

      +
      +

      Returns an unsorted list of stems

      + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Array) + + + + — +

        Unsorted list of stems

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +111
      +112
      +113
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 111
      +
      +def raw_stems
      +  @stemleafs.keys
      +end
      +
      +
      + +
      +

      + + #stems(all: true) ⇒ Array + + + + + +

      +
      +

      Returns a sorted list of stems

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + all + + + (Boolean) + + + (defaults to: true) + + + — +

        Return all stems if true, otherwise only return stems if a leaf exists for a stem

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Array) + + + + — +

        Sorted list of stems

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +131
      +132
      +133
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 131
      +
      +def stems(all: true)
      +  self.class.sorted_stem_list(raw_stems, all: all)
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/StringStemplot.html b/0.0.5/UnicodePlot/StringStemplot.html new file mode 100644 index 0000000..084cfb0 --- /dev/null +++ b/0.0.5/UnicodePlot/StringStemplot.html @@ -0,0 +1,473 @@ + + + + + + + Class: UnicodePlot::StringStemplot + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Class: UnicodePlot::StringStemplot + + + +

      +
      + +
      +
      Inherits:
      +
      + Stemplot + +
        +
      • Object
      • + + + + + +
      + show all + +
      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/stemplot.rb
      +
      + +
      + + + + + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + + + + + + + + +

      Methods inherited from Stemplot

      +

      factory, #insert, #leaves, #max_stem_length, #raw_stems, #stems

      +
      +

      Constructor Details

      + +
      +

      + + #initialize(vector, scale: 10, string_padchar: '_', **_kw) ⇒ StringStemplot + + + + + +

      +
      +

      Returns a new instance of StringStemplot.

      + + +
      +
      +
      + +

      Raises:

      +
        + +
      • + + + (ArgumentError) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 186
      +
      +def initialize(vector, scale: 10, string_padchar: '_', **_kw)
      +  super
      +  stem_places = Math.log10(scale).floor
      +  raise ArgumentError, "Cannot take fewer than 1 place from stem.  Scale parameter should be greater than or equal to 10." if stem_places < 1
      +  vector.each do |value|
      +    # Strings may be shorter than the number of places we desire,
      +    # so we will pad them with a string-pad-character.
      +    padded_value = value.ljust(stem_places+1, string_padchar)
      +    stem = padded_value[0...stem_places]
      +    leaf = padded_value[stem_places]
      +    self.insert(stem, leaf)
      +  end
      +end
      +
      +
      + +
      + + +
      +

      Class Method Details

      + + +
      +

      + + .sorted_stem_list(stems, all: true) ⇒ Array + + + + + +

      +
      +

      Used when we have stems from a back-to-back stemplot and a combined list of stems is given

      + + +
      +
      +
      +

      Parameters:

      +
        + +
      • + + stems + + + (Array) + + + + — +

        Concatenated list of stems from two plots

        +
        + +
      • + +
      • + + all + + + (Boolean) + + + (defaults to: true) + + + — +

        Return all stems if true, otherwise only return stems if a leaf exists for a stem

        +
        + +
      • + +
      + +

      Returns:

      +
        + +
      • + + + (Array) + + + + — +

        Sorted list of stems

        +
        + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +212
      +213
      +214
      +215
      +216
      +217
      +218
      +219
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 212
      +
      +def self.sorted_stem_list(stems, all: true)
      +  if all
      +    rmin, rmax = stems.minmax
      +    return (rmin .. rmax).to_a
      +  else
      +    stems.sort
      +  end
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +
      +
      +

      Function prototype to provide same interface as NumericStemplot.
      +This function does not do anything.

      + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (false) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +203
      +204
      +205
      +206
      +
      +
      # File 'src/lib/unicode_plot/stemplot.rb', line 203
      +
      +def print_key(_scale, _divider)
      +  # intentionally empty
      +  return false
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/StyledPrinter.html b/0.0.5/UnicodePlot/StyledPrinter.html new file mode 100644 index 0000000..e660c33 --- /dev/null +++ b/0.0.5/UnicodePlot/StyledPrinter.html @@ -0,0 +1,345 @@ + + + + + + + Module: UnicodePlot::StyledPrinter + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::StyledPrinter + + + +

      +
      + + + + + + + + + +
      +
      Included in:
      +
      BorderPrinter, Plot
      +
      + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/styled_printer.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      TEXT_COLORS = + +
      +
      {
      +  black:         "\033[30m",
      +  red:           "\033[31m",
      +  green:         "\033[32m",
      +  yellow:        "\033[33m",
      +  blue:          "\033[34m",
      +  magenta:       "\033[35m",
      +  cyan:          "\033[36m",
      +  white:         "\033[37m",
      +  gray:          "\033[90m",
      +  light_black:   "\033[90m",
      +  light_red:     "\033[91m",
      +  light_green:   "\033[92m",
      +  light_yellow:  "\033[93m",
      +  light_blue:    "\033[94m",
      +  light_magenta: "\033[95m",
      +  light_cyan:    "\033[96m",
      +  normal:        "\033[0m",
      +  default:       "\033[39m",
      +  bold:          "\033[1m",
      +  underline:     "\033[4m",
      +  blink:         "\033[5m",
      +  reverse:       "\033[7m",
      +  hidden:        "\033[8m",
      +  nothing:       "",
      +}
      + +
      DISABLE_TEXT_STYLE = + +
      +
      {
      +  bold:      "\033[22m",
      +  underline: "\033[24m",
      +  blink:     "\033[25m",
      +  reverse:   "\033[27m",
      +  hidden:    "\033[28m",
      +  normal:    "",
      +  default:   "",
      +  nothing:   "",
      +}.freeze
      + +
      COLOR_ENCODE = + +
      +
      {
      +  normal:  0b000,
      +  blue:    0b001,
      +  red:     0b010,
      +  magenta: 0b011,
      +  green:   0b100,
      +  cyan:    0b101,
      +  yellow:  0b110,
      +  white:   0b111
      +}.freeze
      + +
      COLOR_DECODE = + +
      +
      COLOR_ENCODE.map {|k, v| [v, k] }.to_h.freeze
      + +
      + + + + + + + + + +

      + Instance Method Summary + collapse +

      + + + + + + +
      +

      Instance Method Details

      + + +
      + + + + + +
      +
      +
      +
      +82
      +83
      +84
      +85
      +
      +
      # File 'src/lib/unicode_plot/styled_printer.rb', line 82
      +
      +def print_color(out, color, *args)
      +  color = COLOR_DECODE[color]
      +  print_styled(out, *args, color: color)
      +end
      +
      +
      + +
      + + + + + +
      +
      +
      +
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +
      +
      # File 'src/lib/unicode_plot/styled_printer.rb', line 60
      +
      +def print_styled(out, *args, bold: false, color: :normal)
      +  return out.print(*args) unless out.color?
      +
      +  str = StringIO.open {|sio| sio.print(*args); sio.close; sio.string }
      +  color = :nothing if bold && color == :bold
      +  enable_ansi = TEXT_COLORS.fetch(color, TEXT_COLORS[:default]) +
      +                (bold ? TEXT_COLORS[:bold] : "")
      +  disable_ansi = (bold ? DISABLE_TEXT_STYLE[:bold] : "") +
      +                 DISABLE_TEXT_STYLE.fetch(color, TEXT_COLORS[:default])
      +  first = true
      +  StringIO.open do |sio|
      +    str.each_line do |line|
      +      sio.puts unless first
      +      first = false
      +      continue if line.empty?
      +      sio.print(enable_ansi, line, disable_ansi)
      +    end
      +    sio.close
      +    out.print(sio.string)
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Utils.html b/0.0.5/UnicodePlot/Utils.html new file mode 100644 index 0000000..9bd5c15 --- /dev/null +++ b/0.0.5/UnicodePlot/Utils.html @@ -0,0 +1,613 @@ + + + + + + + Module: UnicodePlot::Utils + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::Utils + + + +

      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/utils.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      INT64_MIN = + +
      +
      -9223372036854775808
      + +
      INT64_MAX = + +
      +
      9223372036854775807
      + +
      + + + + + + + + + +

      + Class Method Summary + collapse +

      + + + + + + +
      +

      Class Method Details

      + + +
      +

      + + .ceil_neg_log10(x) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 59
      +
      +def ceil_neg_log10(x)
      +  if roundable?(-Math.log10(x))
      +    (-Math.log10(x)).ceil
      +  else
      +    (-Math.log10(x)).floor
      +  end
      +end
      +
      +
      + +
      +

      + + .extend_limits(values, limits) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 5
      +
      +def extend_limits(values, limits)
      +  mi, ma = limits.minmax.map(&:to_f)
      +  if mi == 0 && ma == 0
      +    mi, ma = values.minmax.map(&:to_f)
      +  end
      +  diff = ma - mi
      +  if diff == 0
      +    ma = mi + 1
      +    mi = mi - 1
      +  end
      +  if limits == [0, 0]
      +    plotting_range_narrow(mi, ma)
      +  else
      +    [mi, ma]
      +  end
      +end
      +
      +
      + +
      +

      + + .float_round_log10(x, m) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 29
      +
      +def float_round_log10(x, m)
      +  if x == 0
      +    0.0
      +  elsif x > 0
      +    x.round(ceil_neg_log10(m) + 1).to_f
      +  else
      +    -(-x).round(ceil_neg_log10(m) + 1).to_f
      +  end
      +end
      +
      +
      + +
      +

      + + .plotting_range_narrow(xmin, xmax) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +22
      +23
      +24
      +25
      +26
      +27
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 22
      +
      +def plotting_range_narrow(xmin, xmax)
      +  diff = xmax - xmin
      +  xmax = round_up_subtick(xmax, diff)
      +  xmin = round_down_subtick(xmin, diff)
      +  [xmin.to_f, xmax.to_f]
      +end
      +
      +
      + +
      +

      + + .round_down_subtick(x, m) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 49
      +
      +def round_down_subtick(x, m)
      +  if x == 0
      +    0.0
      +  elsif x > 0
      +    x.floor(ceil_neg_log10(m) + 1)
      +  else
      +    -(-x).ceil(ceil_neg_log10(m) + 1)
      +  end
      +end
      +
      +
      + +
      +

      + + .round_up_subtick(x, m) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 39
      +
      +def round_up_subtick(x, m)
      +  if x == 0
      +    0.0
      +  elsif x > 0
      +    x.ceil(ceil_neg_log10(m) + 1)
      +  else
      +    -(-x).floor(ceil_neg_log10(m) + 1)
      +  end
      +end
      +
      +
      + +
      +

      + + .roundable?(x) ⇒ Boolean + + + + + +

      +
      + + + +
      +
      +
      + +

      Returns:

      +
        + +
      • + + + (Boolean) + + + +
      • + +
      + +
      + + + + +
      +
      +
      +
      +70
      +71
      +72
      +
      +
      # File 'src/lib/unicode_plot/utils.rb', line 70
      +
      +def roundable?(x)
      +  x.to_i == x && INT64_MIN <= x && x < INT64_MAX
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/ValueTransformer.html b/0.0.5/UnicodePlot/ValueTransformer.html new file mode 100644 index 0000000..4e31ed5 --- /dev/null +++ b/0.0.5/UnicodePlot/ValueTransformer.html @@ -0,0 +1,317 @@ + + + + + + + Module: UnicodePlot::ValueTransformer + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::ValueTransformer + + + +

      +
      + + + + + + + + + +
      +
      Included in:
      +
      Barplot
      +
      + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/value_transformer.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      PREDEFINED_TRANSFORM_FUNCTIONS = + +
      +
      {
      +  log: Math.method(:log),
      +  ln: Math.method(:log),
      +  log10: Math.method(:log10),
      +  lg: Math.method(:log10),
      +  log2: Math.method(:log2),
      +  lb: Math.method(:log2),
      +}.freeze
      + +
      + + + + + + + + + +

      + Class Method Summary + collapse +

      + + + +

      + Instance Method Summary + collapse +

      + + + + + + +
      +

      Class Method Details

      + + +
      +

      + + .transform_name(func, basename = "") ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +
      +
      # File 'src/lib/unicode_plot/value_transformer.rb', line 30
      +
      +module_function def transform_name(func, basename="")
      +  return basename unless func
      +  case func
      +  when String, Symbol
      +    name = func
      +  when ->(f) { f.respond_to?(:name) }
      +    name = func.name
      +  else
      +    name = "custom"
      +  end
      +  "#{basename} [#{name}]"
      +end
      +
      +
      + +
      + +
      +

      Instance Method Details

      + + +
      +

      + + #transform_values(func, values) ⇒ Object + + + + + +

      + + + + +
      +
      +
      +
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +
      +
      # File 'src/lib/unicode_plot/value_transformer.rb', line 12
      +
      +def transform_values(func, values)
      +  return values unless func
      +
      +  unless func.respond_to?(:call)
      +    func = PREDEFINED_TRANSFORM_FUNCTIONS[func]
      +    unless func.respond_to?(:call)
      +      raise ArgumentError, "func must be callable"
      +    end
      +  end
      +
      +  case values
      +  when Numeric
      +    func.(values)
      +  else
      +    values.map(&func)
      +  end
      +end
      +
      +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/UnicodePlot/Version.html b/0.0.5/UnicodePlot/Version.html new file mode 100644 index 0000000..261a5e1 --- /dev/null +++ b/0.0.5/UnicodePlot/Version.html @@ -0,0 +1,121 @@ + + + + + + + Module: UnicodePlot::Version + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Module: UnicodePlot::Version + + + +

      +
      + + + + + + + + + + + +
      +
      Defined in:
      +
      src/lib/unicode_plot/version.rb
      +
      + +
      + + + +

      + Constant Summary + collapse +

      + +
      + +
      STRING = + +
      +
      VERSION
      + +
      + + + + + + + + + + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/_index.html b/0.0.5/_index.html new file mode 100644 index 0000000..00c2f0a --- /dev/null +++ b/0.0.5/_index.html @@ -0,0 +1,380 @@ + + + + + + + Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
      + + +

      Documentation by YARD 0.9.26

      +
      +

      Alphabetic Index

      + +

      File Listing

      + + +
      +

      Namespace Listing A-Z

      + + + + + + + + +
      + + + + + + + + +
        +
      • C
      • +
          + +
        • + Canvas + + (UnicodePlot) + +
        • + +
        +
      + + + + + +
        +
      • G
      • +
          + +
        • + GridPlot + + (UnicodePlot) + +
        • + +
        +
      + + +
        +
      • I
      • + +
      + + + + + +
      + + + + + +
        +
      • P
      • +
          + +
        • + Plot + + (UnicodePlot) + +
        • + +
        +
      + + +
        +
      • R
      • +
          + +
        • + Renderer + + (UnicodePlot) + +
        • + +
        +
      + + + + + + + + + + +
      + +
      + +
      + + + +
      + + \ No newline at end of file diff --git a/0.0.5/class_list.html b/0.0.5/class_list.html new file mode 100644 index 0000000..6990e7f --- /dev/null +++ b/0.0.5/class_list.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + Class List + + + +
      +
      +

      Class List

      + + + +
      + + +
      + + diff --git a/0.0.5/css/common.css b/0.0.5/css/common.css new file mode 100644 index 0000000..cf25c45 --- /dev/null +++ b/0.0.5/css/common.css @@ -0,0 +1 @@ +/* Override this file with custom rules */ \ No newline at end of file diff --git a/0.0.5/css/full_list.css b/0.0.5/css/full_list.css new file mode 100644 index 0000000..fa35982 --- /dev/null +++ b/0.0.5/css/full_list.css @@ -0,0 +1,58 @@ +body { + margin: 0; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + height: 101%; + overflow-x: hidden; + background: #fafafa; +} + +h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; } +.clear { clear: both; } +.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; } +#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; } +#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; } +#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; } +#full_list ul { padding: 0; } +#full_list li { padding: 0; margin: 0; list-style: none; } +#full_list li .item { padding: 5px 5px 5px 12px; } +#noresults { padding: 7px 12px; background: #fff; } +#content.insearch #noresults { margin-left: 7px; } +li.collapsed ul { display: none; } +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; } +li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; } +li { color: #888; cursor: pointer; } +li.deprecated { text-decoration: line-through; font-style: italic; } +li.odd { background: #f0f0f0; } +li.even { background: #fafafa; } +.item:hover { background: #ddd; } +li small:before { content: "("; } +li small:after { content: ")"; } +li small.search_info { display: none; } +a, a:visited { text-decoration: none; color: #05a; } +li.clicked > .item { background: #05a; color: #ccc; } +li.clicked > .item a, li.clicked > .item a:visited { color: #eee; } +li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; } +li.collapsed.clicked a.toggle { background-position: top right; } +#search input { border: 1px solid #bbb; border-radius: 3px; } +#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; } +#full_list_nav a, #nav a:visited { color: #358; } +#full_list_nav a:hover { background: transparent; color: #5af; } +#full_list_nav span:after { content: ' | '; } +#full_list_nav span:last-child:after { content: ''; } + +#content h1 { margin-top: 0; } +li { white-space: nowrap; cursor: normal; } +li small { display: block; font-size: 0.8em; } +li small:before { content: ""; } +li small:after { content: ""; } +li small.search_info { display: none; } +#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; } +#content.insearch #search { background-position: center right; } +#search input { width: 110px; } + +#full_list.insearch ul { display: block; } +#full_list.insearch .item { display: none; } +#full_list.insearch .found { display: block; padding-left: 11px !important; } +#full_list.insearch li a.toggle { display: none; } +#full_list.insearch li small.search_info { display: block; } diff --git a/0.0.5/css/style.css b/0.0.5/css/style.css new file mode 100644 index 0000000..eb0dbc8 --- /dev/null +++ b/0.0.5/css/style.css @@ -0,0 +1,497 @@ +html { + width: 100%; + height: 100%; +} +body { + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-size: 13px; + width: 100%; + margin: 0; + padding: 0; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} + +#nav { + position: relative; + width: 100%; + height: 100%; + border: 0; + border-right: 1px dotted #eee; + overflow: auto; +} +.nav_wrap { + margin: 0; + padding: 0; + width: 20%; + height: 100%; + position: relative; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; + flex-shrink: 0; + -webkit-flex-shrink: 0; + -ms-flex: 1 0; +} +#resizer { + position: absolute; + right: -5px; + top: 0; + width: 10px; + height: 100%; + cursor: col-resize; + z-index: 9999; +} +#main { + flex: 5 1; + -webkit-flex: 5 1; + -ms-flex: 5 1; + outline: none; + position: relative; + background: #fff; + padding: 1.2em; + padding-top: 0.2em; + box-sizing: border-box; +} + +@media (max-width: 920px) { + .nav_wrap { width: 100%; top: 0; right: 0; overflow: visible; position: absolute; } + #resizer { display: none; } + #nav { + z-index: 9999; + background: #fff; + display: none; + position: absolute; + top: 40px; + right: 12px; + width: 500px; + max-width: 80%; + height: 80%; + overflow-y: scroll; + border: 1px solid #999; + border-collapse: collapse; + box-shadow: -7px 5px 25px #aaa; + border-radius: 2px; + } +} + +@media (min-width: 920px) { + body { height: 100%; overflow: hidden; } + #main { height: 100%; overflow: auto; } + #search { display: none; } +} + +#main img { max-width: 100%; } +h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; } +h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; } +h1.title { margin-bottom: 10px; } +h1.alphaindex { margin-top: 0; font-size: 22px; } +h2 { + padding: 0; + padding-bottom: 3px; + border-bottom: 1px #aaa solid; + font-size: 1.4em; + margin: 1.8em 0 0.5em; + position: relative; +} +h2 small { font-weight: normal; font-size: 0.7em; display: inline; position: absolute; right: 0; } +h2 small a { + display: block; + height: 20px; + border: 1px solid #aaa; + border-bottom: 0; + border-top-left-radius: 5px; + background: #f8f8f8; + position: relative; + padding: 2px 7px; +} +.clear { clear: both; } +.inline { display: inline; } +.inline p:first-child { display: inline; } +.docstring, .tags, #filecontents { font-size: 15px; line-height: 1.5145em; } +.docstring p > code, .docstring p > tt, .tags p > code, .tags p > tt { + color: #c7254e; background: #f9f2f4; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; } +.docstring h1 { font-size: 1.2em; } +.docstring h2 { font-size: 1.1em; } +.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; } +.summary_desc .object_link a, .docstring .object_link a { + font-family: monospace; font-size: 1.05em; + color: #05a; background: #EDF4FA; padding: 2px 4px; font-size: 1em; + border-radius: 4px; +} +.rdoc-term { padding-right: 25px; font-weight: bold; } +.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; } +.summary_desc pre.code .object_link a, .docstring pre.code .object_link a { + padding: 0px; background: inherit; color: inherit; border-radius: inherit; +} + +/* style for */ +#filecontents table, .docstring table { border-collapse: collapse; } +#filecontents table th, #filecontents table td, +.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; } +#filecontents table tr:nth-child(odd), +.docstring table tr:nth-child(odd) { background: #eee; } +#filecontents table tr:nth-child(even), +.docstring table tr:nth-child(even) { background: #fff; } +#filecontents table th, .docstring table th { background: #fff; } + +/* style for
        */ +#filecontents li > p, .docstring li > p { margin: 0px; } +#filecontents ul, .docstring ul { padding-left: 20px; } +/* style for
        */ +#filecontents dl, .docstring dl { border: 1px solid #ccc; } +#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; } +#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; } +#filecontents dd > p, .docstring dd > p { margin: 0px; } + +.note { + color: #222; + margin: 20px 0; + padding: 10px; + border: 1px solid #eee; + border-radius: 3px; + display: block; +} +.docstring .note { + border-left-color: #ccc; + border-left-width: 5px; +} +.note.todo { background: #ffffc5; border-color: #ececaa; } +.note.returns_void { background: #efefef; } +.note.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.title.deprecated { background: #ffe5e5; border-color: #e9dada; } +.note.private { background: #ffffc5; border-color: #ececaa; } +.note.title { padding: 3px 6px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; } +.summary_signature + .note.title { margin-left: 7px; } +h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; } +.note.title { background: #efefef; } +.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; } +.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; } +.note.title.private { background: #d5d5d5; border-color: #c5c5c5; } +.note.title.not_defined_here { background: transparent; border: none; font-style: italic; } +.discussion .note { margin-top: 6px; } +.discussion .note:first-child { margin-top: 0; } + +h3.inherited { + font-style: italic; + font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + padding: 0; + margin: 0; + margin-top: 12px; + margin-bottom: 3px; + font-size: 13px; +} +p.inherited { + padding: 0; + margin: 0; + margin-left: 25px; +} + +.box_info dl { + margin: 0; + border: 0; + width: 100%; + font-size: 1em; + display: flex; + display: -webkit-flex; + display: -ms-flexbox; +} +.box_info dl dt { + flex-shrink: 0; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + width: 100px; + text-align: right; + font-weight: bold; + border: 1px solid #aaa; + border-width: 1px 0px 0px 1px; + padding: 6px 0; + padding-right: 10px; +} +.box_info dl dd { + flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex: 1; + max-width: 420px; + padding: 6px 0; + padding-right: 20px; + border: 1px solid #aaa; + border-width: 1px 1px 0 0; + overflow: hidden; + position: relative; +} +.box_info dl:last-child > * { + border-bottom: 1px solid #aaa; +} +.box_info dl:nth-child(odd) > * { background: #eee; } +.box_info dl:nth-child(even) > * { background: #fff; } +.box_info dl > * { margin: 0; } + +ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; } +.index_inline_list { padding-left: 0; font-size: 1.1em; } + +.index_inline_list li { + list-style: none; + display: inline-block; + padding: 0 12px; + line-height: 30px; + margin-bottom: 5px; +} + +dl.constants { margin-left: 10px; } +dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; } +dl.constants.compact dt { display: inline-block; font-weight: normal } +dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; } +dl.constants .docstring .note:first-child { margin-top: 5px; } + +.summary_desc { + margin-left: 32px; + display: block; + font-family: sans-serif; + font-size: 1.1em; + margin-top: 8px; + line-height: 1.5145em; + margin-bottom: 0.8em; +} +.summary_desc tt { font-size: 0.9em; } +dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; } +dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; } +dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; } +dl.constants .discussion *:first-child { margin-top: 0; } +dl.constants .discussion *:last-child { margin-bottom: 0; } + +.method_details { border-top: 1px dotted #ccc; margin-top: 25px; padding-top: 0; } +.method_details.first { border: 0; margin-top: 5px; } +.method_details.first h3.signature { margin-top: 1em; } +p.signature, h3.signature { + font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace; + padding: 6px 10px; margin-top: 1em; + background: #E8F4FF; border: 1px solid #d8d8e5; border-radius: 5px; +} +p.signature tt, +h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; } +p.signature .overload, +h3.signature .overload { display: block; } +p.signature .extras, +h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; } +p.signature .not_defined_here, +h3.signature .not_defined_here, +p.signature .aliases, +h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; } +p.signature .aliases .names, +h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; } + +.tags .tag_title { font-size: 1.05em; margin-bottom: 0; font-weight: bold; } +.tags .tag_title tt { color: initial; padding: initial; background: initial; } +.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; } +.tags ul li { margin-bottom: 3px; } +.tags ul .name { font-family: monospace; font-weight: bold; } +.tags ul .note { padding: 3px 6px; } +.tags { margin-bottom: 12px; } + +.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; } +.tags .examples .inline p { padding: 0; margin: 0; font-weight: bold; font-size: 1em; } +.tags .examples .inline p:before { content: "▸"; font-size: 1em; margin-right: 5px; } + +.tags .overload .overload_item { list-style: none; margin-bottom: 25px; } +.tags .overload .overload_item .signature { + padding: 2px 8px; + background: #F1F8FF; border: 1px solid #d8d8e5; border-radius: 3px; +} +.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; } +.tags .overload .docstring { margin-top: 15px; } + +.defines { display: none; } + +#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; } + +.showSource { font-size: 0.9em; } +.showSource a, .showSource a:visited { text-decoration: none; color: #666; } + +#content a, #content a:visited { text-decoration: none; color: #05a; } +#content a:hover { background: #ffffa5; } + +ul.summary { + list-style: none; + font-family: monospace; + font-size: 1em; + line-height: 1.5em; + padding-left: 0px; +} +ul.summary a, ul.summary a:visited { + text-decoration: none; font-size: 1.1em; +} +ul.summary li { margin-bottom: 5px; } +.summary_signature { padding: 4px 8px; background: #f8f8f8; border: 1px solid #f0f0f0; border-radius: 5px; } +.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; } +.summary_signature.deprecated { background: #ffe5e5; border-color: #e9dada; } +ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;} +ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; } +#content .summary_signature:hover a, +#content .summary_signature:hover a:visited { + background: transparent; + color: #049; +} + +p.inherited a { font-family: monospace; font-size: 0.9em; } +p.inherited { word-spacing: 5px; font-size: 1.2em; } + +p.children { font-size: 1.2em; } +p.children a { font-size: 0.9em; } +p.children strong { font-size: 0.8em; } +p.children strong.modules { padding-left: 5px; } + +ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; } +ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; } +ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAHtJREFUeNqMzrEJAkEURdGzuhgZbSoYWcAWoBVsB4JgZAGmphsZCZYzTQgWNCYrDN9RvMmHx+X916SUBFbo8CzD1idXrLErw1mQttgXtyrOcQ/Ny5p4Qh+2XqLYYazsPWNTiuMkRxa4vcV+evuNAUOLIx5+c2hyzv7hNQC67Q+/HHmlEwAAAABJRU5ErkJggg==) no-repeat top center; } +ul.fullTree li:first-child { padding-top: 0; background: transparent; } +ul.fullTree li:last-child { padding-bottom: 0; } +.showAll ul.fullTree { display: block; } +.showAll .inheritName { display: none; } + +#search { position: absolute; right: 12px; top: 0px; z-index: 9000; } +#search a { + display: block; float: left; + padding: 4px 8px; text-decoration: none; color: #05a; fill: #05a; + border: 1px solid #d8d8e5; + border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; + background: #F1F8FF; + box-shadow: -1px 1px 3px #ddd; +} +#search a:hover { background: #f5faff; color: #06b; fill: #06b; } +#search a.active { + background: #568; padding-bottom: 20px; color: #fff; fill: #fff; + border: 1px solid #457; + border-top-left-radius: 5px; border-top-right-radius: 5px; +} +#search a.inactive { color: #999; fill: #999; } +.inheritanceTree, .toggleDefines { + float: right; + border-left: 1px solid #aaa; + position: absolute; top: 0; right: 0; + height: 100%; + background: #f6f6f6; + padding: 5px; + min-width: 55px; + text-align: center; +} + +#menu { font-size: 1.3em; color: #bbb; } +#menu .title, #menu a { font-size: 0.7em; } +#menu .title a { font-size: 1em; } +#menu .title { color: #555; } +#menu a, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; } +#menu a:hover { color: #05a; } + +#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; } +#footer a, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; } +#footer a:hover { color: #05a; } + +#listing ul.alpha { font-size: 1.1em; } +#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; } +#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; } +#listing ul.alpha ul { margin: 0; padding-left: 15px; } +#listing ul small { color: #666; font-size: 0.7em; } + +li.r1 { background: #f0f0f0; } +li.r2 { background: #fafafa; } + +#content ul.summary li.deprecated .summary_signature a, +#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; } + +#toc { + position: relative; + float: right; + overflow-x: auto; + right: -3px; + margin-left: 20px; + margin-bottom: 20px; + padding: 20px; padding-right: 30px; + max-width: 300px; + z-index: 5000; + background: #fefefe; + border: 1px solid #ddd; + box-shadow: -2px 2px 6px #bbb; +} +#toc .title { margin: 0; } +#toc ol { padding-left: 1.8em; } +#toc li { font-size: 1.1em; line-height: 1.7em; } +#toc > ol > li { font-size: 1.1em; font-weight: bold; } +#toc ol > li > ol { font-size: 0.9em; } +#toc ol ol > li > ol { padding-left: 2.3em; } +#toc ol + li { margin-top: 0.3em; } +#toc.hidden { padding: 10px; background: #fefefe; box-shadow: none; } +#toc.hidden:hover { background: #fafafa; } +#filecontents h1 + #toc.nofloat { margin-top: 0; } +@media (max-width: 560px) { + #toc { + margin-left: 0; + margin-top: 16px; + float: none; + max-width: none; + } +} + +/* syntax highlighting */ +.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; } +#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; } +#filecontents pre.code, .docstring pre.code { display: block; } +.source_code .lines { padding-right: 12px; color: #555; text-align: right; } +#filecontents pre.code, .docstring pre.code, +.tags pre.example { + padding: 9px 14px; + margin-top: 4px; + border: 1px solid #e1e1e8; + background: #f7f7f9; + border-radius: 4px; + font-size: 1em; + overflow-x: auto; + line-height: 1.2em; +} +pre.code { color: #000; tab-size: 2; } +pre.code .info.file { color: #555; } +pre.code .val { color: #036A07; } +pre.code .tstring_content, +pre.code .heredoc_beg, pre.code .heredoc_end, +pre.code .qwords_beg, pre.code .qwords_end, pre.code .qwords_sep, +pre.code .words_beg, pre.code .words_end, pre.code .words_sep, +pre.code .qsymbols_beg, pre.code .qsymbols_end, pre.code .qsymbols_sep, +pre.code .symbols_beg, pre.code .symbols_end, pre.code .symbols_sep, +pre.code .tstring, pre.code .dstring { color: #036A07; } +pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s, +pre.code .rubyid_to_sym, pre.code .rubyid_to_f, +pre.code .dot + pre.code .id, +pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; } +pre.code .comment { color: #0066FF; } +pre.code .const, pre.code .constant { color: #585CF6; } +pre.code .label, +pre.code .symbol { color: #C5060B; } +pre.code .kw, +pre.code .rubyid_require, +pre.code .rubyid_extend, +pre.code .rubyid_include { color: #0000FF; } +pre.code .ivar { color: #318495; } +pre.code .gvar, +pre.code .rubyid_backref, +pre.code .rubyid_nth_ref { color: #6D79DE; } +pre.code .regexp, .dregexp { color: #036A07; } +pre.code a { border-bottom: 1px dotted #bbf; } +/* inline code */ +*:not(pre) > code { + padding: 1px 3px 1px 3px; + border: 1px solid #E1E1E8; + background: #F7F7F9; + border-radius: 4px; +} + +/* Color fix for links */ +#content .summary_desc pre.code .id > .object_link a, /* identifier */ +#content .docstring pre.code .id > .object_link a { color: #0085FF; } +#content .summary_desc pre.code .const > .object_link a, /* constant */ +#content .docstring pre.code .const > .object_link a { color: #585CF6; } diff --git a/0.0.5/file.CHANGES.html b/0.0.5/file.CHANGES.html new file mode 100644 index 0000000..1bd7a46 --- /dev/null +++ b/0.0.5/file.CHANGES.html @@ -0,0 +1,144 @@ + + + + + + + File: CHANGES + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
        + + +

        0.0.5

        + +
          +
        • +

          Add stairs support
          +[GitHub#38][GitHub#17]
          +[Patch by @nanobowers]

          +
        • +
        • +

          Add block canvas support
          +[GitHub#39][GitHub#19]
          +[Patch by @nanobowers]

          +
        • +
        • +

          Add stemplot support
          +[GitHub#40][GitHub#30]
          +[Patch by @nanobowers]

          +
        • +
        • +

          Add an example of animation
          +[GitHub#33]
          +[Patch by @mrkn and @kojix2]

          +
        • +
        • +

          Fix interpolation bug of lineplot
          +[GitHub#37][GitHub#32]
          +[Patch by @nanobowers]
          +[Reported by @Nakilon]

          +
        • +
        • +

          Support color: option in render method
          +[GitHub#45]

          +
        • +
        • +

          Add canvas_types method
          +[GitHub#44][GitHub#42]
          +[Reported by @kojix2]

          +
        • +
        • +

          Use appropriate message for invalid border types,
          +and add border_types method
          +[GitHub#43][GitHub#41]
          +[Reported by @kojix2]

          +
        • +
        + +

        0.0.4

        + +
          +
        • Fix error by requiring stringio [#22]
        • +
        • Use enumerable-statistics >= 2.0.1 to avoid a bug of histogram [#28]
        • +
        + +

        0.0.3

        + +
          +
        • Add histogram support
        • +
        • Add barplot! method
        • +
        • Add scatterplot support
        • +
        • Add densityplot support
        • +
        + +

        0.0.2

        + +
          +
        • Add boxplot support
        • +
        + +

        0.0.1

        + +
          +
        • Add barplot support
        • +
        • Add lineplot support
        • +
        +
        + + + +
        + + \ No newline at end of file diff --git a/0.0.5/file.LICENSE.html b/0.0.5/file.LICENSE.html new file mode 100644 index 0000000..d555862 --- /dev/null +++ b/0.0.5/file.LICENSE.html @@ -0,0 +1,70 @@ + + + + + + + File: LICENSE + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
        + + +
        The MIT License (MIT)
        Copyright © 2019 Kenta Murata

        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the “Software”), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:

        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.

        THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.
        + + + +
        + + \ No newline at end of file diff --git a/0.0.5/file.README.html b/0.0.5/file.README.html new file mode 100644 index 0000000..b892448 --- /dev/null +++ b/0.0.5/file.README.html @@ -0,0 +1,158 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
        + + +

        UnicodePlot - Plot your data by Unicode characters

        + +

        UnicodePlot provides the feature to make charts with Unicode characters.

        + +

        Documentation

        + +

        https://red-data-tools.github.io/unicode_plot.rb/

        + +

        Install

        + +
        $ gem install unicode_plot
        +
        + +

        Usage

        + +
        require 'unicode_plot'
        +
        +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
        +y_sin = x.map {|xi| Math.sin(xi) }
        +y_cos = x.map {|xi| Math.cos(xi) }
        +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
        +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
        +plot.render
        +
        + +

        You can get the results below by running the above script:

        + +

        + +

        Supported charts

        + +

        barplot

        + +
        UnicodePlot.barplot(data: {'foo': 20, 'bar': 50}, title: "Bar").render
        +
        + +

        + +

        boxplot

        + +
        UnicodePlot.boxplot(data: {foo: [1, 3, 5], bar: [3, 5, 7]}, title: "Box").render
        +
        + +

        + +

        densityplot

        + +
        x = Array.new(500) { 20*rand - 10 } + Array.new(500) { 6*rand - 3 }
        +y = Array.new(1000) { 30*rand - 10 }
        +UnicodePlot.densityplot(x, y, title: "Density").render
        +
        + +

        + +

        histogram

        + +
        x = Array.new(100) { rand(10) } + Array.new(100) { rand(30) + 10 }
        +UnicodePlot.histogram(x, title: "Histogram").render
        +
        + +

        + +

        lineplot

        + +

        See Usage section above.

        + +

        scatterplot

        + +
        x = Array.new(50) { rand(20) - 10 }
        +y = x.map {|xx| xx*rand(30) - 10 }
        +UnicodePlot.scatterplot(x, y, title: "Scatter").render
        +
        + +

        + +

        Acknowledgement

        + +

        This library is strongly inspired by UnicodePlot.jl.

        + +

        License

        + +

        MIT License

        + +

        Author

        + + +
        + + + +
        + + \ No newline at end of file diff --git a/0.0.5/file_list.html b/0.0.5/file_list.html new file mode 100644 index 0000000..8bdafe2 --- /dev/null +++ b/0.0.5/file_list.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + File List + + + +
        +
        +

        File List

        + + + +
        + + +
        + + diff --git a/0.0.5/frames.html b/0.0.5/frames.html new file mode 100644 index 0000000..1310783 --- /dev/null +++ b/0.0.5/frames.html @@ -0,0 +1,17 @@ + + + + + Documentation by YARD 0.9.26 + + + + diff --git a/0.0.5/img/barplot.png b/0.0.5/img/barplot.png new file mode 100644 index 0000000000000000000000000000000000000000..b93caee91672fc3cf817619c8f16e727ca3842c8 GIT binary patch literal 17868 zcmZ{L1ymGF_cxs)C7_^yfOL26f^>IFH!L9CEg~u1B_Q41A=2I5-3`*;f<8Vx@A-e8 zgJ+qYJ2Usrt@+)Hzl@YH3KA|71Ox<%sEB|Z1OzlI_;V5h9Qc1j*S#YM2qat+etsEI zettq3YfD2DkO2gQh<{Wxyo`b}PRD`E44!$+eDu5ve2zHXa2`2zovn&?4iPKKORq0P zL{I^Q-zZbzN{ZTJOD_JK5*DsCPN&y@uuu z&>6=Of=!Q9{YXwXOX)whoVH?CfmEK{VH4?)12R&;affmKN27lR&%jUmL~Ehw4OF3$P@Y_Y;rRyj1P?` ztS&Fnumfo)WE~%X90tBwM+P#tMRX8B%BL(9^8vP0QPkSX|ZLjn3os(jBwxmKZJ`Ilsve|imndu@!WfDpxtC4({wa|@B=SIEou zO=lC58L^MgGS%QEY=jOjH40TLXE6l`xvs_i(2yNh%ByUN+Y$KT`NWT`#pl0}T=DRI z$rfV{iI7r7$k8KTiy<2X=%#YZzRf0ofl~pk=t;>xmZl~y@aW=Oc~7>;$2-x9e2t1QvG`n@{5J(%U1|eQ90#X@$!!o=6trFW$Pg z60$6{M7tvNaikj65knKZ=&Qp|zeSE;A6#EGzVbi>dZ)A$p}`=C!Pt0{c}Y%+k&}+1 z*CIL~jC{gMBb46$yrDvcAwUXu{FWhmE+0>>Od(A{@GIMO+LhK7)R^QN<@&~z z*tO^v;*Ho%<&FBUvdf-d14j!>DL8}(@ARI`w-8BER#pL)(x*FZ|J%51k!+TUN<31ZFSamMMp7oqF!m?k zPbj|7pUOT_`O+ate@PXH6#O87ArK(g9}whE9Viw!9Uv62k7B|(Wc!FTH41=mU_1;^A_1S^!zl5vlgT}Vy8nn^DQ#) z(=~J4g`vmk$G?oRXENmb4>6Cd8jqWXn1xkyKCR;DPp}iqjA8o7~GaIWk6VU9g&No`H zUa+if7cL4V3~!rNLbY3+k;aUgEPqpJNr^0eIyU+bS>Y)M4C#-2qERoMkS>)BnaWvlIk#5V1h<9jsY|SDo@3=R>5BuDMN|Y7V zM1*0)X?$BQ6(V-lYAP5U3^X}{(&{dqktNBIZ$jTLzv(3?vKpB;)(Gl~|A-FMxzXt@ zwpofjY(88+RLmqRi>`UOgdvMn(yUt?Qmk2OKKXsOMx>`RyfcoxCp$cQ%D88ff5?Vm zoWX$Mq$FrEU~3M942GRXQX5T=)>tJ_h9rc>!W}a7iukcBr5gJ zFJ=a3RA!uQR;}$fBrK}tG|Ql;(M!@DvVQc}Cymr4+OzDF?uRVg+7wz?i0;?%c)8S` zWSrQqNxH3^N{R!t0BjzvMQ!ujmO~5e?p)Oa+6zN&DaezsRY-QoJxI!dDuPvwBiDsD zbrrX=*YJVCfnN!l@fTme@Ng{R7q~roPL(#yS7zQo3qkJz@or}U#@v%u9jj6kp;Iy!ho6_k ziN}eR_oo*c+y~a?_lAPgTlMbrE;{%-$o9()1^^{t_cJ2R&wvAYf*JlxsklMaHlbr0ir zE7?Sw1Dq@(eiTu)fq=k%_wWNLDo1h%0Rcm9qM%}{A}PVCXK7BWqi?BeKZ3{L$RNR)^5h9Asg`>BvL$ID-@X`C*uji12ZWtr-uIilhu7zooSSAqy=tEj|ZZ9wK8~+mD=dbPf&+LBbo7jLjEpqk88kLd z7PdN$G!{0*zZdyu9RULyJ!_MXwkDPqgb(ZL=vvy@@(>X{Z1nfv?{nIk82-DHh0Pzf zzzotod_%`TOHcQIkr_Ce{C~(EzWM)>>FfRF>Z6@C=#eLVJvsxBfw_T&tqqut;s4wY zEZe_?|2d?i&d1-IJqqzRZ`={#Yh(OW8#1_EF{m9V&4*x5W-&FjT<{zyM zY;3?}0G2-_PsjduzRJJb02r8=|4=*~{a*@cYZEZ5Iu8c}F#MVSbnJiUtNx!mJRN;P z@gRIo852hXkcxl_Sfr19urq?0|3AO^UrK&UkfpW!M;$$bhoe1`JQ@1m*^m3E{<{wY z3)|Cuo_zC!QeThL#!lDNK+pEcje+m&QUB!)tmvK$bJP8wv$?_Az$s~|Z(`^qpkr$Q zV5Dc@;G}2eWTYo#V0iez%*svoKXaa(;Ncs7YXcoyOKSy7OAz3Z4fBUz37KfwX~B2+ zzcc<2bJIQ8(i7YIZMcu4V9Ny{fhqs-0stfqM0)@P1RIH{0H1;* zLI`gdK8)Q+awS<%_`3j8TFOcTqh%tluocH}P^naDos}Wklq4(Dlmuhhc}Rz7;#9fl za%Z$UsHZYOF<;lt|HV78-3Dk7Auk5u)!lu~!K}kVn+ptYTK)Cm8@$@RM4N%j{x!Fa zCJzow=jo7BL_{bwPY4)72uK882=GTnO1^i}yn?6!9`7m^c0c7xC@<51TZLpz#*J zLd+dSeB2cp!% zsLWsn8p$w=^!PYHg*eyLEak$lqmyAXR#TEc0)X=ZxPllRKmL|Tx)7m-tdguIWmSHy zl%Z5nlz0s1s>sMICzpx0Tl@P~=G$9aQ9>+QTrT_dqhm@&pB z9nN%T`O1Br`Pm_vdhgAgb@@^GYwqOn_{iwU&Kp%b#=Jt-h}dyG@1V=($QM`~HcTVk zw)S>iH79%h3VleiAInT;0GE?VJ7bCYjM>Edo0vIMpRzH|awvv5U9LwLgxuVQYtux8 z?B6~p7$GXcCKnf~8Xx8#3+#Ul>Is2X6^)fCv%h?Qc{*3c9zmbdwTi*Sl%N4rv{0{- z7^l<9xMOQkW6L~p(iyS89M_|}+SP@GjPEbcfK50QbMDyAPgJ25$LS9<*tTTSGYv-O zxSby7p>^ctBy)MR_D~?q;NkUb*F}b+yPZ2y@P4iugQ z|FtK^eUF$iCvCQb5wk?zNPTSxht-bI1|&yjnYHnY4|@Z&Q*yt% za;c5(<0G4meKpmxLbj&Lb0IsHIeE0tAAEdf34BYlF~dmJW2N5$(>p;bQ6dz3SnAvb zRWdm8+ewH#hrC6|%!>~Db7@YzsUp5X@wuXmg7*?;rG``QFZ;CIn|k9oXh0f9Mpc-$ zyFXzyHr92{Qv8uw3@Z&ujj<>b6*gH(>#DUObbL$RnDHBk;k~H)`S!QwGk`VUiJP4n z<-sE_VRkA^sr)Q)94(O>OZ|`@sEf~GHN8~)vByZAw%ToE^0f(fgqMk~VBBnpd(CXQ zb&14Kr%}x4r#-s+Bfnbhjqmg+aS4}^^T_>^w`2l^*RG)7y4Qpl+YTpReuGb}1`pOn z?GKpr_qc%;>k)|f*bvR(aZ#6UT(m=kkW@u+RN!aqp8aO;L`V`y=|1tfL*gCy9ne+J z7?}#U6~4>&=+#v)c=ec~Pixp7EXzuY(1OS?JOCD%9^OM7y9*QphwMm&0W~cU9-gM_ zz@s@2gTVwWJ2sTFFKOUUUMTMy+d|5?!&K~?MAcz#V-XrM+kFfcym#PbBbxO1dmf}6 z#07<8=hg3VeRQ&|Cr^>Iz37p-RAbGg_2)_T5z)A9ecC{u|f_M=I`(tF34N4he>)`{)TTSIo~S1 z;*lvd;=!@Gy&J3k?2me8ld&mMx1+ckWu)(D+Kz1y9*^uR$h&affeu14lh{Ie6!l|f z0S+C+UYLR_B@?Hw9*y&l@t~2vhRRG4E~ZF4${>5(;?EaWK>v>enQR^DkrWr~D9VgT3hC>p$H6Sz45A(660z zi(lmW>8cQr8l7+ic=*u2lZ-#y5Kh5deX;|E^LUrzKRq&<3=SSRO@(_Z4Nu-5;Nyz^ zf*5xF&l=6%Y2QkgIG*Nk5HJ{0U}yUSK6L%jg8s_R7~}}|R00rQP=ucCnGkScv`?AP zuE%WdFsuhco)SDg6)bORk>z_)NL!!(%!YvSAsn>N;m5xjDXK|y8^!_o1fQOLw?74e zHRCc1c)Lt!+8aSFhzZj|D&4Njo-hQ?LGEulM~0`yR&phQ<#DK%swVz7chCg*{p#{K z|4Nt_A9HhmD~h1$u-!nNUFQc(9MI;<;AC~KO%v=M*+^T5Qo(`#GQG)7WO|y5R$aqx zO#mjL2VZEei#X{w{cqmWn%MJWag_zj@;`5e6ldHFA8g|g) z;$r$o^{R#VSdC1>tNxfwAx}k04uV=U_OIuOMiRPd^cc*f{NmtZ1N$A{c~4A&`@B{ zP-@tfme13WJr0P%>?zaixsKpG5G?MxmaRR8!;aII2TB5LF50PzK8627_YkqYc@NFG ze?j1*kc58eH&ZB26JU-MdhXAAC=(!0NGcV~o{=2>A1f2%U1Na3ONRNc?$j`3aAPx{ z+Whd${)*x)`J){~-^a2L&+DIE6LBu{Jkw|OAzJ^jM^D}$2ye+}2!2lvg7)$&%n#I+ z>C2y&li3Wo-ja}j3KO?r=SdQ&uPUCTFL%;|nLU{LmAzuHFT6cOtxp$$R7>J~@ zLE|Rec>F9(_0{~EEv*kl&`q^TFZhJMoeLZlS8fqg@1Guk9_q?!){UU*>q?i65!f$$ zk+xC`j_vd-Mf3Xvc=VXRIS8T$QxiXn-F|A8p)gQe5DKC%tX{n_ z`&jyl5^(&)dPqW=VfgeSs`=7ep6>qA9csN_Mon&+l9qxN{|+z6IM@x-JNoOUWVUNL zVk~Y+HF>D2G;3AoMT(Ok;H(8DeeT)*L$Lj$2BCydZEb?bYxn0)CKfe>5mZzdqt<4* z{hlt$o#X5M|H9R~G#~mKmp*K6yDN)EcGX_&XI7-)MwBBUDoOr@aJBL^Dyyn)< zUIe1x7V26T@9=~#g&L!fsYn5{$@PH81{0&r_KU6UE%cG;&?jOgq(_4+yP}|=cwXQE z*PQ~KI4bE%DS5db9T^q<1(k@tS5f}Wzd8T`a~upIJ9KO=@Hvl%ueyALvc z=$_a+Z53!(i@8bcPG%jK%3a3X-=^H^@L43iiq{(We250i(Qb{iJ+&F(MPd7T+(hN)_kH28DAs%RadN-{p#X&_9W6R!fC=!{LGgaA za`9RM{w@7;#8~@EVgpmNz?_15`@-Hh2F1*AiRh7y{+<&{3y1Y;jX9oDy9*tso)n^Nh?D#xR<0Z7ip>`?vzmga|lr$PkvUnau_1Tvf>|ATMuG)^jsTao7QjAFv z>k(KvD<;`YNK&oQ-Q58*6er3VZOSGp_q)(Qr^uo8sXxBrn67Wt9XEL_t$@?|-U{=T zX@ldK`(Mx;!;bB7*{Yf_2|BM>DIa}|*Ahu;lM5{IWMY$}sK-xeOeChd>d~P!nW?WX zeXF9w){Qg*My$(%a)a}+XAo9VQ>PS2DqHuPndO5#%r2>N!WhA6H2@(~-P#|1tg` zBeKzi(P-=MCo8YE1mfu#RtUv(Sy2BQ zYs+URzup8UR-QC7Ot~F?O0=+u8ll;k`)v`AS@Yb@mV`7X@pMx$}x3(EzReYr~+J zi%ZwO@$_B0RZar7lrk&3E;t!^$HescLubk+suwgkMP%-YW%CM>Va}~CYt#`_=e8*$ z1*Hwe$$V996L_OcqsLqJ8QY>PWPO1CY1~)97|xKxVpHqNcfyxvN5w8O6;yI^ zn;&!;J6jIuv=Nk#NlZm+F|j#M?a`?-cOXg`_8U6&WuUZV5|Bzgy2|F4nB*^m`!155 zS*XOW(cM?4*cc1r+DU0AV`cOzSHA+9M5Pj?gs}s#LD>sb1U2Rbv$cjMzztQZ`(<^m zHGiBceF4&d=!JYpl>G*~VDLjJE}B5~lr`?COIq!wWC7pQRW;dVr|9ObI`|cb}i^!~FXAV!EVC=$qdTy?GLo z{B>|JM{m4+`-k;97iZ=x=|gA`=FM85VPF+x*;b=lR8SU=pL8di#}%^40YW(s)0k_z zyJ;}hc!sysN*p$ad#NgMK?6C{=``cmyugUm*s$xhf6N#RE%}0s78TQuX%h6kzkHwd zhkL0+PO^m|?y^kjFf7%^0HGbc;M?T+<`0(4`)xen=LiULlkQ1k@l98G%b5g=J zktf>z+TmjFI;2xNd1jZH!Q6D+P%X}EqyJe2tH#{iF%t~|mMOq}BDmkSk8-l+KKtfZ zjigj{i3=FVo6(I392%b%s9^W`DaH!EkDrJ^yHvlnloy740|q`dR2!VxEj8{5+@kiS z4BjB$Z)gFjV@AuzHPfUUk1JjGzBUp@VXf)Z7{?uwaQ$)g45aj>=Q8P&HEL&iM_s+7 zu8bbhTNPgGZ7G44(mBAsI#VW#F6!$28L(*DqWz}!Rhr)WMq4;-4r#GpA3N9+SOb_d z$4YFEL3yAVm!Es^YZIM9EXpTcX-E}j^gfn1tFX#<8WkqMIaf^4Q}%+1VNpTzdB#j)Q>G6XJzUK)kvhRd#HWCe_J!t?T3Ou}`b^ zawK_FYzCWVZ(T9)8l@9XV`NEqJI_Xw400}aiDTSWNwN>Bg;Z^xC~L0#c-nofpr7FG z#?C~s3{_dveBO`0__Dj{zSGyX0`K#jBqAr7qV`Ew;j8doeX`vFX&uHQYp`AfF?)qw zS2>6Qt8eBmlAo~*G1c0u{p1fY~&mKAK-;&8{?9T1N{LaThT_>l-CY@qtx4P>G zP;>7OGNI)zr`xC^rB`*r1X0JK)P+e)Q_OC?z26{k|E2JY#lF**0-U41Ab}hybv^qg z-1Z4i+)(#i%l)jC@!c}n3Ku?#nt?_-FS{Bfm;8u!o(Kn;iP?u{{a<&#V`wwclF(aAlN8}>;K3trY2j#jH+ z=!@&+y2#~+3%uS-1LTcUOwbLy3bOGc&K&ZO1H%AW`_&nySeGz(Fu14*b&m9E^Okv( zOH+X$uIX-FufM2$e$N1RZTG@s4G_mxCUxIn)Ciq#5g5L{09|Px6L;W#iHaXdW9n}B z?MPXZOIU1FxkRG~){;XOlH$U}I(zRO@Q+xl5h7ot$uKFfW3zN-fq*wl6<^%jlupkn zd~~AyeFkvm3?uzDUoPJf++UHE3*^$|xLoJ-5V)T$WNd-X2gms9QKsHPc)_3*SCrqK zFLf9kgpppfwDxv4{@OyV;U&jj2dE>JvwL+~vsRodeJ>0wTY_Wh8gmF>Q#2bd9=t2S zL4B1}pxOT?-xf;XZGl1Egzxw8w#C`qV88xat5H~h_&#yE@%m_dcWMYMGx+mX)a5;Q4P6k|*=m`j9yfsa;8&}F&Fz}N~j1Dw^ zBd4hPRxpean}P;G0V6UIg95W4@Hgo0*{p(5tW`Iv;6|OmPCa@h>T5_Jp`c%MOuk=bA`rpX3@0IfUB`v+pH*-1ovpA=J)7ZTl*-1 z1!JA2F(Vd!ucrPyxPpkhW>b!YO3;a|sOXGU<}_nF?NUBp<@6WM7A7?HB^>P8L_nu3 zVBfjA?ck$;yS7H+QLd;pTt^1r4An17c`pqbnJnw;lqW_-rJ?d~@(y;#n<4owtt*_W z1UcQDJW`hC;mj^zNQk0sTHWxreZc5UY;#qLqo}5nOO<+04@?N%&2W-+ppZ55LabLf z4QajOeD9&%>0XD{@W*qUAG+sK*Wi5FZwLoxAmRH#6Csg)tpA@d$cv9wJoStBr#5SKHppX2;ME zTeg#=ZM`@tS|Z3zqpDx-VyTg&Gq1C@msnt=*IxxLKLxs-B`(myNMr0bGVbw#8N|CD6D| zGalEjJOg&e?5v#yZglxsXnr?i*^OQyOPE8g!!gWH9MdB;Vk@eZYE9|iyJ&5EKQITj zWg}}ts1Qk{o1e`wDS1muecbvrrl8oDA1s)w;UEz{pm-T)bhM1hr+L8vz!H&?zl}7F z=_6s=Hj-yCNt<<;F}>{EGh+g5Kg+Z@{`0gI3gqQ81&NKp8{P((jWVZq#C^(l4$^&^}DX-4) zMS0ZV`uGfZ8SHNN%i~^W4jrq|ByOea#%lMC{XzSfwGwOsX08+KlHq!}8n_hL4NKB_ zz8^Tz`e4W4^hY}%;YCJ!J9gA{!@xY3ekLn=wbfdM6nQDRAvR*4;q5w|o*B|~`1fz7zfrTw!4b3Tou z#!uYvedLM*XxGCjZXwRrV>_I9E7%I(6g%4Kl(nqa#VgukM$Da5qi8*+v|Pe#*J91{ ziyEu+#t|%jBiCpziM+f=C!dA!wHSVtl1Mv0Zfv#LwtR6-`~;QZCES9!;tC{b5H9}@ z)`<4f0Y;*@#i3rtZ!RHX6TxU?@`Y*D))R2B`4=&`baxZX!Sf$%xCI@I0e$3;-~+V4XljQW6N?fD4b|Tk?5jYABMqIqpd|Ae9 z8MezaOCFpx(A8B|aD19~(Air{QR?1CL@{obu?wT1hiTehy0HlIMw|quE)s-Mi2Ol& z9(f_=*B-MwF<6=YE+;pubx4oN%p@F`g~N6bDNk7)%P~C~-*vp@!rED{YA40c`R#pQ z6~4<5B2Qld&KgcaWl#KfWHit+8ga+F+>_xNOAkcGa6gTwI>Aeb=QYagY^V`TtuaXW zPW8sP6pL$YmXZtgwfudec0&u-I9*Id4|Z;iYEF+P820gvw>h3mX&`#Qadrl+vRdM} zY~rQn;_8g_)Y6D_j)Chtlb>7jtmAnI3vi~#@Jlpk?d%_3206Kj?TeUVEiD~gR96ILhS)~?&c%@|yEO=?S- z5|m1ivzu}*MH!AtE;E|9p@0Z%rE25l09$}10!;jhZDjjs$pksPp9z!qXdu-sF^i0o zmR5P|R8MtGsUcqVzJkV4<`u8E(K&s`k4 z<|jk$NLCnpSp&ZvJe_x~>uHWwiU;^KSW634OlOK*3s2l%-q>k@z0FHQ0)3~2`JO6{ zP4y-t>iVh0tJj7X<|l3_bQ#i3sXW_)gnMMb7?j;F8XG%kB!^Rch)g_)(vB`wf zcf|K7XBDayz{Xj}dF;gYOkv;nH=LXB%&E;K5k_mXmw{5Tu}pgL)T72G;w+^CCZhL# zzl=vzIi_ueo~N+W81*N`oZv_{Z$%BCePzf z6+8R8EY4544NeJHW*6(zDN?an8Ya!wo0jy-nz-Z>SFt3`k@_WQD)JTgoRPYs!yG`~ z`bAHRZi-WFMjr6fYwM&e(>49F>IVqJxepp}%Pd4|Cr}n*Wrpw^yq)0UU2wf!LRkSz zC&&3}tqeQ!_}OG7%FM(dF3idIK;WN@YnfY&PZ&0dMgCCi^U zksf2xZh$V=^E_7KTz#p8wZs2hN~gwgMqUGT@BS(3o^U=-j$6xE!&pe-N4cfUQL_E0Pi3hDxFJD z3QC*`+&tM%m;;+hZwsbN=X7V2kkitz-dD*}){Ia_x}FR*;|~F;8(o+($BhL7)W-l; zIzX0hQ#5xs!47M3!t`Ai25IV;Arg|mS`vx|LbGWG`k{r_jOZ+_FzkFyzwGL`oy;}h zz9W{QyK=7FWnWYXD$AS@8v-}OH15h&4SBq_!d99Hizw*fde61bWv1ngQPTyhHg~&exK%HQ#9Dx+cTPdrmizyJ z^1J}_m-8Hv1)L0byjvl)kZcRA{3xejkF&$>c@vGbX{*N@EN^~ z`h#+geYI+-TBCl9TQCQsQE+(?QmUPs`E%gK^hmJRSgzozTJ3$1MJ1|Q97?AHMVH~q z{!nl%GM}SC8L{l97iAL8FWlFxvEP4IW6?q#mzxV5sgG^8$v6rMWN17PN&lcAdUYu| zqu&^x5ry@AEXK>8#MnQsEDrdU!?QrWQ3Uq8X_VPjqRdGM?J{#6Kt3CnV$ftQ8}YK{ z4*lm=u!31O&fnPh0w3}^)ci!Gtev50KcwH{ti&P=x7LOb5g5}ev`#UTnMA+DhG)O6Y z6V5&FcLHUX9k=i6+z}U-zNYE?n-h^k0@Z6dU*;7ikd1LVl(QK260~~@tHP9>;5M6f z0PN%)*WQ?nEXrXQUY6i2gzwk}$LnIbQ^#plOOw8iOV#rZm0s`HJ`>PD2E83jT*!56 zv8ty*2o4TTnc#{YEVkMUf2NqigH~0fk$KeQz}~W6UASv%s53-va!wzw)G9Gf{l4v8 zu)g6P>)p39_#U8WWr`&9^7k##+=80xXvO|Q#w&U?E*j36kC{!E{d%~;G>2iLz|9sQ z67rYDf$#Tm0tfp!f&))OKK)CmiCi;p*epgb(&Y7AOZz-imEPeFK)(75=96zFANyH> z%zIMW8Y3IMgV@ZYdDri2Y*dRc6Z&4!Y>tA_*B`m&-=qyK--ftzJ=_#z+k46mSfr6@ ziG1=Xdz3X0YG4kGQI752iK^q~ZAZNRP9gvHud(GDQ#A$aO8B8qFEKxI)Cw94sKRV{#BL2okwbqQ&@@}@V5%+btFhQBfR|$gC05YgAzMw>;sHk ze{(LymclG4717T?qo!7Z#5#tn(mcR#Zi1H31o$;HV=&ROg3D1Qg58&cqu!Ir4=le% z9UD{2x(@}6R)+Z9z^0YRPO-de%Kzqf<^e!PkM756wCn?qX?#H_-)|>(qGqXYN z`*qe0VLdOnT|Tz184{B~Q=Ku@Pl1HGYAMK78wACjG(YCHa2tLAvzNNir)wEN@Ad^I>HFG|V`6&Z+x?m{j1 z;1B7A$gIFTSqC_(8QhW=j5vtv7Bwk}-XoJAEQ-@7(i+L&M^$@v@%v!<@Kc>|Up8mx zM`Y88`I>0y12yyY`b74lDm?%!%8HV^+&$JTazI{(@OOrbW=gJx~5IsPCMfa4O!M;-K zquC%u4ToJIsq`i%OIld`-c-Q7&*6_xV@nF*Ehk2P#PNVjFLmqj`}@XwCXKxH@;ZD= zOBwR%?ZmNfVMZ(+#s`SPEsyWj8Y4%pGzO7^>E@H5lmxBn~%c2ZoG3TTPzCe+e`BLwtpQ&$gloq?C7(p9rE1NDiY2uQasi2&Dt4m)} znF$EGj(&* zzU!rE((o*^C-S&h1>zO7(GoL^6{I}(ALw0bnMc37m8Lk`<8u$jm?FU7M#0Wtwnq@DJapsH{`}xV z2Dn=Bd0l*l9FDRfHN2ED&=fsK<|}o`FVX_0Tq%&Ua3KZd;-_t1tZ>&H&-F>Bib~al z{CA{@ZSsT@mr5N)fBKq!C;fq*G&MSf&*T-fCVu>NM^Sc+LV&N=m*S`q}9WfRn6e8!45nX=4Qa zJgxDQM=-Y7DF*F3MWnXZCld>HM?Z}wr0sa<&HIoOD*e3sz)zmA(oP~~Y?oQlCR4Z? za0S&Z)v)_C2OENS_Pq$5#r#{pvu}Z7E7*$WLK?w=reQJ?%y|Ebe-R1s1Lz=<^emX6 zuU9HqU+MdMKQ{%om@mk<>r?N!63*M!Bl1RxHd!^CNw)R$sv6clzf-%5e82_!<$b=M zaIsLABhqb*!4$|(NSBw(^;p`jUHe7Zzxwr+IMp`1sDvTOhld%U`qST!z+)(9M?zkQ zHE@2m_dR!!mQ`@15O(K>%8!+?hq_MG2mIiIhmFxFhfda!ZQ$p1vuL^Ca3v+V<=1t) zZ+RSVGEU2EPJ=r$@sEP>+6pW~=7z7agO~Seuzn*Q;G~CK1&RgtTki)v+N6E40*}eK zA>{1yn%1Fll~#ohC5je)!tbHq5aq+rE8Vj5~cAKZTm}AotzLT4S)8 zeu#T<$FshOuEvMBauHQR8-M%lojjz)bmhX{jE5LAQk$(?^?s90L$AEuH;36$vvv70 zojwdFFo4NnSE)#ljl4flI0db5Xl52eJL*@!U%AV)Mjxmb>I=;alDom}@;xa2VTZfZ%*d@{OCiGo4TpN2lT{9@gVdH(v~0~xp+ zZ@ZM5piWmyZoD4BBuRYAn$62JQ}FdA%$qMU8|;#)0uA&EO`#y0aMBoUzp z^;R{n%{lS%5%SQ-*Zbm=-@cA3F1I?v*pjR3c8^bFK9HS5<_3AwK~F`AL=&I%v}Ch} zCj7-kych^&6l~8(HCTl|6ag5qWpelAvTSYbI4~J^LQK?psr%MbeMHMZRt~pihy6-1 zs_=2BQZ-lZEAmV)z4?+cG%VyU!g*>~zAZZdZKQ>Y*a}rCv*Oj~pc#jBz4HdGInFfJ zep+8P_f7Qlv3s@?6zOHjV7iRAmzFX5z&yJ4jV zPz({KiDipmYqaDZMeO#4FTn@7^YSGtO0E6lTaTU}r9K5zE$@z8@H4d>X8kjvAI;8h#pt*LQ^v(zRV=_lBPWIO5Xb0u)-i- zF+Cdt-;;flx1Tv{U_(rndYGdq?id3I zE<8+BTSk$G7s&6z0|>5fboAVu?irCN#j0rRc%p$9ft;W(Gl)B{KwLkrf6jdC;Mnf8 z1N75r*wqh|tbAicq6!&{NN>=w_edFKgT5*0Z?eb|p(1ANE-5@-vq>`JB_Bj&p7i#oEC!>FB za2E0NmA>q-f&?)je)dmi*dHm1yau4B)g{Zt|YRS^& zQ|uAk0V)md0A2Q@cYzOoJw)X4l^yx-tq{_4!pMcNBA)yd)??z7hIe?{;|Ffj3k8Fk z=%2Wv6@~YRJ4)ZoK8bpS9587%oiJCEB=F2M|J{%EkK$zi$|lXipQ+jU20}I&z7?Cs(!x;PqDLSVa=6pe&5sc)WzGy|aETf8TaO~7KqJ631US#ZZyJ1G>x@ZI0KxOAd({;6i zR6c_G3pdC6Z3lwLt%|WFmVavQ4_Awn&>XD+uYX^X>AgdOo8XN%oXS5BIDUWq?(#f> zZf$oBTwSFjo?Ojn1y?EmT%(L5jD>22z&hJ#mU*RayZX8TQ$eN}Wp@w8m=pM7aSL16 z?7QmWVx|=Q0hgXocasumJz{6*PmLi656UBhppvVuw!Fzp05gSn8veL693xImBaWQZ z7=*#{!N+pf`Z8A%XH!{si|gW_hHjjdIpc+D%E4n*#)GFcovFisvc;*~Y?RQJhA zpai#NLfSJ!g(4gOk;H>SYrn=I7n=@9TlpBY$@urC9=4%}0P8t4#PWYfL+@ekfV5XC Vk_wT|gb#m7D=H`@PzY}5{(n1J4{QJc literal 0 HcmV?d00001 diff --git a/0.0.5/img/boxplot.png b/0.0.5/img/boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe4c11b412a6af45794036661a4492952b267d5 GIT binary patch literal 20279 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

        >S+qJh-lml9+>%eOZA-H%6oR8hmzO^_W# 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 literal 0 HcmV?d00001 diff --git a/0.0.5/img/histogram.png b/0.0.5/img/histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..499b486efc8354b6f08862077cdd90bf1089d2e4 GIT binary patch literal 51631 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 z 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 IJ0?&5FC)%i9{>OV literal 0 HcmV?d00001 diff --git a/0.0.5/img/scatterplot.png b/0.0.5/img/scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..a54672abb2e977e4b79172306d5dd091ffc31143 GIT binary patch literal 39042 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 literal 0 HcmV?d00001 diff --git a/0.0.5/index.html b/0.0.5/index.html new file mode 100644 index 0000000..991c073 --- /dev/null +++ b/0.0.5/index.html @@ -0,0 +1,158 @@ + + + + + + + File: README + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + +

        + +
        + + +

        UnicodePlot - Plot your data by Unicode characters

        + +

        UnicodePlot provides the feature to make charts with Unicode characters.

        + +

        Documentation

        + +

        https://red-data-tools.github.io/unicode_plot.rb/

        + +

        Install

        + +
        $ gem install unicode_plot
        +
        + +

        Usage

        + +
        require 'unicode_plot'
        +
        +x = 0.step(3*Math::PI, by: 3*Math::PI / 30)
        +y_sin = x.map {|xi| Math.sin(xi) }
        +y_cos = x.map {|xi| Math.cos(xi) }
        +plot = UnicodePlot.lineplot(x, y_sin, name: "sin(x)", width: 40, height: 10)
        +UnicodePlot.lineplot!(plot, x, y_cos, name: "cos(x)")
        +plot.render
        +
        + +

        You can get the results below by running the above script:

        + +

        + +

        Supported charts

        + +

        barplot

        + +
        UnicodePlot.barplot(data: {'foo': 20, 'bar': 50}, title: "Bar").render
        +
        + +

        + +

        boxplot

        + +
        UnicodePlot.boxplot(data: {foo: [1, 3, 5], bar: [3, 5, 7]}, title: "Box").render
        +
        + +

        + +

        densityplot

        + +
        x = Array.new(500) { 20*rand - 10 } + Array.new(500) { 6*rand - 3 }
        +y = Array.new(1000) { 30*rand - 10 }
        +UnicodePlot.densityplot(x, y, title: "Density").render
        +
        + +

        + +

        histogram

        + +
        x = Array.new(100) { rand(10) } + Array.new(100) { rand(30) + 10 }
        +UnicodePlot.histogram(x, title: "Histogram").render
        +
        + +

        + +

        lineplot

        + +

        See Usage section above.

        + +

        scatterplot

        + +
        x = Array.new(50) { rand(20) - 10 }
        +y = x.map {|xx| xx*rand(30) - 10 }
        +UnicodePlot.scatterplot(x, y, title: "Scatter").render
        +
        + +

        + +

        Acknowledgement

        + +

        This library is strongly inspired by UnicodePlot.jl.

        + +

        License

        + +

        MIT License

        + +

        Author

        + + +
        + + + +
        + + \ No newline at end of file diff --git a/0.0.5/js/app.js b/0.0.5/js/app.js new file mode 100644 index 0000000..8d067fe --- /dev/null +++ b/0.0.5/js/app.js @@ -0,0 +1,314 @@ +(function() { + +var localStorage = {}, sessionStorage = {}; +try { localStorage = window.localStorage; } catch (e) { } +try { sessionStorage = window.sessionStorage; } catch (e) { } + +function createSourceLinks() { + $('.method_details_list .source_code'). + before("[View source]"); + $('.toggleSource').toggle(function() { + $(this).parent().nextAll('.source_code').slideDown(100); + $(this).text("Hide source"); + }, + function() { + $(this).parent().nextAll('.source_code').slideUp(100); + $(this).text("View source"); + }); +} + +function createDefineLinks() { + var tHeight = 0; + $('.defines').after(" more..."); + $('.toggleDefines').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).prev().css('display', 'inline'); + $(this).parent().prev().height($(this).parent().height()); + $(this).text("(less)"); + }, + function() { + $(this).prev().hide(); + $(this).parent().prev().height(tHeight); + $(this).text("more..."); + }); +} + +function createFullTreeLinks() { + var tHeight = 0; + $('.inheritanceTree').toggle(function() { + tHeight = $(this).parent().prev().height(); + $(this).parent().toggleClass('showAll'); + $(this).text("(hide)"); + $(this).parent().prev().height($(this).parent().height()); + }, + function() { + $(this).parent().toggleClass('showAll'); + $(this).parent().prev().height(tHeight); + $(this).text("show all"); + }); +} + +function searchFrameButtons() { + $('.full_list_link').click(function() { + toggleSearchFrame(this, $(this).attr('href')); + return false; + }); + window.addEventListener('message', function(e) { + if (e.data === 'navEscape') { + $('#nav').slideUp(100); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); + + $(window).resize(function() { + if ($('#search:visible').length === 0) { + $('#nav').removeAttr('style'); + $('#search a').removeClass('active inactive'); + $(window).focus(); + } + }); +} + +function toggleSearchFrame(id, link) { + var frame = $('#nav'); + $('#search a').removeClass('active').addClass('inactive'); + if (frame.attr('src') === link && frame.css('display') !== "none") { + frame.slideUp(100); + $('#search a').removeClass('active inactive'); + } + else { + $(id).addClass('active').removeClass('inactive'); + if (frame.attr('src') !== link) frame.attr('src', link); + frame.slideDown(100); + } +} + +function linkSummaries() { + $('.summary_signature').click(function() { + document.location = $(this).find('a').attr('href'); + }); +} + +function summaryToggle() { + $('.summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('ul.summary').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('ul.summary').first().toggle(); + } + else if (next.hasClass('summary')) { + var list = $('
          '); + list.html(next.html()); + list.find('.summary_desc, .note').remove(); + list.find('a').each(function() { + $(this).html($(this).find('strong').html()); + $(this).parent().html($(this)[0].outerHTML); + }); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function constantSummaryToggle() { + $('.constants_summary_toggle').click(function(e) { + e.preventDefault(); + localStorage.summaryCollapsed = $(this).text(); + $('.constants_summary_toggle').each(function() { + $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); + var next = $(this).parent().parent().nextAll('dl.constants').first(); + if (next.hasClass('compact')) { + next.toggle(); + next.nextAll('dl.constants').first().toggle(); + } + else if (next.hasClass('constants')) { + var list = $('
          '); + list.html(next.html()); + list.find('dt').each(function() { + $(this).addClass('summary_signature'); + $(this).text( $(this).text().split('=')[0]); + if ($(this).has(".deprecated").length) { + $(this).addClass('deprecated'); + }; + }); + // Add the value of the constant as "Tooltip" to the summary object + list.find('pre.code').each(function() { + console.log($(this).parent()); + var dt_element = $(this).parent().prev(); + var tooltip = $(this).text(); + if (dt_element.hasClass("deprecated")) { + tooltip = 'Deprecated. ' + tooltip; + }; + dt_element.attr('title', tooltip); + }); + list.find('.docstring, .tags, dd').remove(); + next.before(list); + next.toggle(); + } + }); + return false; + }); + if (localStorage.summaryCollapsed == "collapse") { + $('.constants_summary_toggle').first().click(); + } else { localStorage.summaryCollapsed = "expand"; } +} + +function generateTOC() { + if ($('#filecontents').length === 0) return; + var _toc = $('
            '); + var show = false; + var toc = _toc; + var counter = 0; + var tags = ['h2', 'h3', 'h4', 'h5', 'h6']; + var i; + var curli; + if ($('#filecontents h1').length > 1) tags.unshift('h1'); + for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; } + var lastTag = parseInt(tags[0][1], 10); + $(tags.join(', ')).each(function() { + if ($(this).parents('.method_details .docstring').length != 0) return; + if (this.id == "filecontents") return; + show = true; + var thisTag = parseInt(this.tagName[1], 10); + if (this.id.length === 0) { + var proposedId = $(this).attr('toc-id'); + if (typeof(proposedId) != "undefined") this.id = proposedId; + else { + var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_'); + if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; } + this.id = proposedId; + } + } + if (thisTag > lastTag) { + for (i = 0; i < thisTag - lastTag; i++) { + if ( typeof(curli) == "undefined" ) { + curli = $('
          1. '); + toc.append(curli); + } + toc = $('
              '); + curli.append(toc); + curli = undefined; + } + } + if (thisTag < lastTag) { + for (i = 0; i < lastTag - thisTag; i++) { + toc = toc.parent(); + toc = toc.parent(); + } + } + var title = $(this).attr('toc-title'); + if (typeof(title) == "undefined") title = $(this).text(); + curli =$('
            1. ' + title + '
            2. '); + toc.append(curli); + lastTag = thisTag; + }); + if (!show) return; + html = ''; + $('#content').prepend(html); + $('#toc').append(_toc); + $('#toc .hide_toc').toggle(function() { + $('#toc .top').slideUp('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }, function() { + $('#toc .top').slideDown('fast'); + $('#toc').toggleClass('hidden'); + $('#toc .title small').toggle(); + }); +} + +function navResizeFn(e) { + if (e.which !== 1) { + navResizeFnStop(); + return; + } + + sessionStorage.navWidth = e.pageX.toString(); + $('.nav_wrap').css('width', e.pageX); + $('.nav_wrap').css('-ms-flex', 'inherit'); +} + +function navResizeFnStop() { + $(window).unbind('mousemove', navResizeFn); + window.removeEventListener('message', navMessageFn, false); +} + +function navMessageFn(e) { + if (e.data.action === 'mousemove') navResizeFn(e.data.event); + if (e.data.action === 'mouseup') navResizeFnStop(); +} + +function navResizer() { + $('#resizer').mousedown(function(e) { + e.preventDefault(); + $(window).mousemove(navResizeFn); + window.addEventListener('message', navMessageFn, false); + }); + $(window).mouseup(navResizeFnStop); + + if (sessionStorage.navWidth) { + navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)}); + } +} + +function navExpander() { + var done = false, timer = setTimeout(postMessage, 500); + function postMessage() { + if (done) return; + clearTimeout(timer); + var opts = { action: 'expand', path: pathId }; + document.getElementById('nav').contentWindow.postMessage(opts, '*'); + done = true; + } + + window.addEventListener('message', function(event) { + if (event.data === 'navReady') postMessage(); + return false; + }, false); +} + +function mainFocus() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + + setTimeout(function() { $('#main').focus(); }, 10); +} + +function navigationChange() { + // This works around the broken anchor navigation with the YARD template. + window.onpopstate = function() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + }; +} + +$(document).ready(function() { + navResizer(); + navExpander(); + createSourceLinks(); + createDefineLinks(); + createFullTreeLinks(); + searchFrameButtons(); + linkSummaries(); + summaryToggle(); + constantSummaryToggle(); + generateTOC(); + mainFocus(); + navigationChange(); +}); + +})(); diff --git a/0.0.5/js/full_list.js b/0.0.5/js/full_list.js new file mode 100644 index 0000000..59069c5 --- /dev/null +++ b/0.0.5/js/full_list.js @@ -0,0 +1,216 @@ +(function() { + +var $clicked = $(null); +var searchTimeout = null; +var searchCache = []; +var caseSensitiveMatch = false; +var ignoreKeyCodeMin = 8; +var ignoreKeyCodeMax = 46; +var commandKey = 91; + +RegExp.escape = function(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} + +function escapeShortcut() { + $(document).keydown(function(evt) { + if (evt.which == 27) { + window.parent.postMessage('navEscape', '*'); + } + }); +} + +function navResizer() { + $(window).mousemove(function(e) { + window.parent.postMessage({ + action: 'mousemove', event: {pageX: e.pageX, which: e.which} + }, '*'); + }).mouseup(function(e) { + window.parent.postMessage({action: 'mouseup'}, '*'); + }); + window.parent.postMessage("navReady", "*"); +} + +function clearSearchTimeout() { + clearTimeout(searchTimeout); + searchTimeout = null; +} + +function enableLinks() { + // load the target page in the parent window + $('#full_list li').on('click', function(evt) { + $('#full_list li').removeClass('clicked'); + $clicked = $(this); + $clicked.addClass('clicked'); + evt.stopPropagation(); + + if (evt.target.tagName === 'A') return true; + + var elem = $clicked.find('> .item .object_link a')[0]; + var e = evt.originalEvent; + var newEvent = new MouseEvent(evt.originalEvent.type); + newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); + elem.dispatchEvent(newEvent); + evt.preventDefault(); + return false; + }); +} + +function enableToggles() { + // show/hide nested classes on toggle click + $('#full_list a.toggle').on('click', function(evt) { + evt.stopPropagation(); + evt.preventDefault(); + $(this).parent().parent().toggleClass('collapsed'); + highlight(); + }); +} + +function populateSearchCache() { + $('#full_list li .item').each(function() { + var $node = $(this); + var $link = $node.find('.object_link a'); + if ($link.length > 0) { + searchCache.push({ + node: $node, + link: $link, + name: $link.text(), + fullName: $link.attr('title').split(' ')[0] + }); + } + }); +} + +function enableSearch() { + $('#search input').keyup(function(event) { + if (ignoredKeyPress(event)) return; + if (this.value === "") { + clearSearch(); + } else { + performSearch(this.value); + } + }); + + $('#full_list').after(""); +} + +function ignoredKeyPress(event) { + if ( + (event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) || + (event.keyCode == commandKey) + ) { + return true; + } else { + return false; + } +} + +function clearSearch() { + clearSearchTimeout(); + $('#full_list .found').removeClass('found').each(function() { + var $link = $(this).find('.object_link a'); + $link.text($link.text()); + }); + $('#full_list, #content').removeClass('insearch'); + $clicked.parents().removeClass('collapsed'); + highlight(); +} + +function performSearch(searchString) { + clearSearchTimeout(); + $('#full_list, #content').addClass('insearch'); + $('#noresults').text('').hide(); + partialSearch(searchString, 0); +} + +function partialSearch(searchString, offset) { + var lastRowClass = ''; + var i = null; + for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) { + var item = searchCache[i]; + var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name); + var matchString = buildMatchString(searchString); + var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i"); + if (searchName.match(matchRegexp) == null) { + item.node.removeClass('found'); + item.link.text(item.link.text()); + } + else { + item.node.addClass('found'); + item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1'); + lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2'; + item.link.html(item.name.replace(matchRegexp, "$&")); + } + } + if(i == searchCache.length) { + searchDone(); + } else { + searchTimeout = setTimeout(function() { + partialSearch(searchString, i); + }, 0); + } +} + +function searchDone() { + searchTimeout = null; + highlight(); + if ($('#full_list li:visible').size() === 0) { + $('#noresults').text('No results were found.').hide().fadeIn(); + } else { + $('#noresults').text('').hide(); + } + $('#content').removeClass('insearch'); +} + +function buildMatchString(searchString, event) { + caseSensitiveMatch = searchString.match(/[A-Z]/) != null; + var regexSearchString = RegExp.escape(searchString); + if (caseSensitiveMatch) { + regexSearchString += "|" + + $.map(searchString.split(''), function(e) { return RegExp.escape(e); }). + join('.+?'); + } + return regexSearchString; +} + +function highlight() { + $('#full_list li:visible').each(function(n) { + $(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even'); + }); +} + +/** + * Expands the tree to the target element and its immediate + * children. + */ +function expandTo(path) { + var $target = $(document.getElementById('object_' + path)); + $target.addClass('clicked'); + $target.removeClass('collapsed'); + $target.parentsUntil('#full_list', 'li').removeClass('collapsed'); + if($target[0]) { + window.scrollTo(window.scrollX, $target.offset().top - 250); + highlight(); + } +} + +function windowEvents(event) { + var msg = event.data; + if (msg.action === "expand") { + expandTo(msg.path); + } + return false; +} + +window.addEventListener("message", windowEvents, false); + +$(document).ready(function() { + escapeShortcut(); + navResizer(); + enableLinks(); + enableToggles(); + populateSearchCache(); + enableSearch(); +}); + +})(); diff --git a/0.0.5/js/jquery.js b/0.0.5/js/jquery.js new file mode 100644 index 0000000..198b3ff --- /dev/null +++ b/0.0.5/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
        a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
        "+""+"
        ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
        t
        ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
        ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
        ","
        "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
        ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/0.0.5/method_list.html b/0.0.5/method_list.html new file mode 100644 index 0000000..51d3458 --- /dev/null +++ b/0.0.5/method_list.html @@ -0,0 +1,1171 @@ + + + + + + + + + + + + + + + + + + Method List + + + +
        +
        +

        Method List

        + + + +
        + + +
        + + diff --git a/0.0.5/top-level-namespace.html b/0.0.5/top-level-namespace.html new file mode 100644 index 0000000..4b85076 --- /dev/null +++ b/0.0.5/top-level-namespace.html @@ -0,0 +1,110 @@ + + + + + + + Top Level Namespace + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
        + + +

        Top Level Namespace + + + +

        +
        + + + + + + + + + + + +
        + +

        Defined Under Namespace

        +

        + + + Modules: UnicodePlot + + + + +

        + + + + + + + + + +
        + + + +
        + + \ No newline at end of file diff --git a/README.md b/README.md index b01501c..405dc53 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ UnicodePlot provides the feature to make charts with Unicode characters. ## Documentation +- [0.0.5](0.0.5) - [0.0.4](0.0.4) - [0.0.3](0.0.3) diff --git a/_config.yml b/_config.yml index d26239f..72a879a 100644 --- a/_config.yml +++ b/_config.yml @@ -4,4 +4,5 @@ kramdown: include: - 0.0.3 - 0.0.4 + - 0.0.5 - README.md