9 Commits

Author SHA1 Message Date
kojix2
c25d47d721 v0.2.3 2020-09-15 20:00:28 +09:00
kojix2
40c5d9fbdf Add create_main_parser method 2020-09-15 19:57:37 +09:00
kojix2
3e3b1cdfec Fix typo 2020-09-15 19:15:55 +09:00
kojix2
661e5048dd Rubocop auto correct 2020-09-15 18:58:34 +09:00
kojix2
3b8846efbe Add new file params.rb 2020-09-15 18:58:25 +09:00
kojix2
50cb8d7463 Add create_sub_parser method 2020-09-15 18:51:32 +09:00
kojix2
b1df2ed544 Rename create_parser -> create_default_parser 2020-09-15 18:42:38 +09:00
kojix2
05c3b14acd Add color command 2020-08-24 20:17:33 +09:00
kojix2
9e2f169e6c Rename plot_type -> command 2020-08-24 20:17:12 +09:00
5 changed files with 95 additions and 58 deletions

View File

@@ -1,44 +1,18 @@
require 'optparse'
require_relative 'preprocessing'
require_relative 'command/params'
module Uplot
Data = Struct.new(:headers, :series)
class Command
Params = Struct.new(
# Sort me!
:title,
:width,
:height,
:border,
:margin,
:padding,
:color,
:xlabel,
:ylabel,
:labels,
:symbol,
:xscale,
:nbins,
:closed,
:canvas,
:xlim,
:ylim,
:grid,
:name
) do
def to_hc
to_h.compact
end
end
attr_accessor :params, :plot_type
attr_reader :raw_inputs, :data, :fmt
attr_accessor :params, :command
attr_reader :main_parser, :sub_parsers, :raw_inputs, :data, :fmt
def initialize
@params = Params.new
@plot_type = nil
@command = nil
@headers = nil
@delimiter = "\t"
@transpose = false
@@ -50,7 +24,7 @@ module Uplot
@debug = false
end
def create_parser
def create_default_parser
OptionParser.new do |opt|
opt.program_name = 'uplot'
opt.version = Uplot::VERSION
@@ -102,12 +76,12 @@ module Uplot
.on('--debug', TrueClass) do |v|
@debug = v
end
yield opt if block_given?
end
end
def parse_options(argv = ARGV)
main_parser = create_parser
parsers = Hash.new { |h, k| h[k] = create_parser }
def create_sub_parsers
parsers = Hash.new { |h, k| h[k] = create_default_parser }
parsers[:barplot] = \
parsers[:bar]
@@ -193,9 +167,18 @@ module Uplot
params.xlim = get_lim(v)
end
parsers[:colors]
.on('-n', '--names', TrueClass) do |v|
@color_names = v
end
# Preventing the generation of new sub-commands
parsers.default = nil
parsers
end
def create_main_parser
create_default_parser do |main_parser|
# Usage and help messages
main_parser.banner = \
<<~MSG
@@ -204,10 +187,16 @@ module Uplot
Usage: uplot <command> [options]
Command: #{parsers.keys.join(' ')}
Command: #{sub_parsers.keys.join(' ')}
Options:
MSG
end
end
def parse_options(argv = ARGV)
@sub_parsers = create_sub_parsers
@main_parser = create_main_parser
begin
main_parser.order!(argv)
@@ -216,17 +205,17 @@ module Uplot
exit 1
end
@plot_type = argv.shift&.to_sym
@command = argv.shift&.to_sym
unless parsers.has_key?(plot_type)
if plot_type.nil?
unless sub_parsers.has_key?(command)
if command.nil?
warn main_parser.help
else
warn "uplot: unrecognized command '#{plot_type}'"
warn "uplot: unrecognized command '#{command}'"
end
exit 1
end
parser = parsers[plot_type]
parser = sub_parsers[command]
begin
parser.parse!(argv) unless argv.empty?
@@ -242,13 +231,19 @@ module Uplot
def run
parse_options
if command == :colors
Plot.colors
exit
end
# Sometimes the input file does not end with a newline code.
while input = Kernel.gets(nil)
input.freeze
@raw_inputs << input
@data = Preprocessing.input(input, @delimiter, @headers, @transpose)
pp @data if @debug
case plot_type
case command
when :bar, :barplot
Plot.barplot(data, params, @count)
when :count, :c
@@ -266,7 +261,7 @@ module Uplot
when :box, :boxplot
Plot.boxplot(data, params)
else
raise "unrecognized plot_type: #{plot_type}"
raise "unrecognized plot_type: #{command}"
end.render($stderr)
print input if @output

View File

@@ -0,0 +1,30 @@
module Uplot
class Command
Params = Struct.new(
# Sort me!
:title,
:width,
:height,
:border,
:margin,
:padding,
:color,
:xlabel,
:ylabel,
:labels,
:symbol,
:xscale,
:nbins,
:closed,
:canvas,
:xlim,
:ylim,
:grid,
:name
) do
def to_hc
to_h.compact
end
end
end
end

View File

@@ -123,6 +123,18 @@ module Uplot
UnicodePlot.boxplot(headers, series, **params.to_hc)
end
def colors
UnicodePlot::StyledPrinter::TEXT_COLORS.each do |k, v|
print v
print k
print "\t"
print ' ●'
print "\033[0m"
print "\t"
end
puts
end
def check_series_size(data, fmt)
series = data.series
if series.size == 1

View File

@@ -1,3 +1,3 @@
module Uplot
VERSION = '0.2.2'.freeze
VERSION = '0.2.3'.freeze
end