conjugatefr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1ad90db94e0593104ac13b95934ca3dad75baad
4
+ data.tar.gz: 4dee619f6237b8c630ae0842453edb700e5caa1c
5
+ SHA512:
6
+ metadata.gz: f5244c013d501d89cd5e2f94266d795b5188c7b361d361adb80cbf8951e6709faf32c33fb8e519c12a2d7989060b20d4529c87725f0ea76760fdd7fb0eca364a
7
+ data.tar.gz: 55b6a637272e69fde927807252fe9d45213f094209f2dffe4e057a7c6931bc5b8dc31b5562847883392b2124fe6189af0c1c13a9b118bb1f8bff281afbb7d3de
data/bin/conjugatefr ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ # Ruby ConjugateFR - Prints french verb conjugations.
3
+ # I, htmlguy, hereby release this work into the public domain.
4
+
5
+ require 'optparse'
6
+ require 'conjugatefr'
7
+ require 'conjugatefr/renderers'
8
+
9
+ options = {
10
+ "renderer" => "Human",
11
+ }
12
+
13
+ cfr = ConjugateFR.new
14
+
15
+ OptionParser.new do |opts|
16
+ opts.banner = "Usage: #{$0} [options] [verbs]"
17
+ opts.program_name = "ConjugateFR"
18
+ opts.version = "1.0.0"
19
+ opts.on "-R", "--require PATH", "Require PATH before running." do |path|
20
+ require path
21
+ end
22
+ opts.on "-r", "--renderer RENDERER",
23
+ "Choose the renderer to render the output. (Default: Human)" do |renderer|
24
+ options["renderer"] = renderer
25
+ end
26
+ opts.on "-l", "--list-renderers", "List the renderers that you can use." do
27
+ $renderers.each do |renderer|
28
+ puts " - #{renderer[0]} - #{renderer[1].description}"
29
+ end
30
+ exit
31
+ end
32
+ opts.on "-v", "--list-verbs", "List the verbs that are preloaded." do
33
+ words.each do |word| print "#{word} "; end
34
+ exit
35
+ end
36
+ opts.on "-h", "--help", "Print the help menu." do
37
+ puts opts
38
+ exit
39
+ end
40
+ opts.on "-v", "--version", "Print version information" do
41
+ puts opts.ver
42
+ exit
43
+ end
44
+ end.parse!
45
+
46
+ puts "Loading Renderer" if options["verbose"]
47
+ rname = options["renderer"]
48
+ renderer = $renderers[rname]
49
+ unless renderer
50
+ puts "Invalid Renderer: #{rname}."
51
+ exit -1
52
+ end
53
+
54
+ cfr.setRenderer renderer
55
+ cfr.go ARGV
@@ -0,0 +1,72 @@
1
+ require 'open-uri'
2
+ require 'nokogiri'
3
+ require 'conjugatefr/renderers'
4
+
5
+ class ConjugateFR
6
+ def setRenderer (renderer)
7
+ @renderer = renderer
8
+ end
9
+ def go (query)
10
+ # cpwords - Copy/Pasted words list from the website.
11
+ cpwords = "accroître acheter acquérir acquiescer
12
+ alléger aller apercevoir appeler
13
+ apprendre arguer arrêter asseoir
14
+ astreindre avoir battre boire
15
+ bouillir briller céder changer
16
+ chanter circoncire commencer compléter
17
+ conclure conduire confire confondre
18
+ connaître construire coudre courir
19
+ craindre créer croire croître
20
+ cueillir défaillir déléguer dépecer
21
+ devoir dire disséquer dissoudre
22
+ distinguer distraire dormir écrire
23
+ employer ennuyer enseigner entendre
24
+ envoyer espérer essayer essuyer
25
+ être faire falloir finir
26
+ fuir geler grasseyer interdire
27
+ interpeller jeter joindre lancer
28
+ lever lire louer luire
29
+ manger marquer maudire mener
30
+ mentir mettre mordre moudre
31
+ mouiller mourir mouvoir naître
32
+ naviguer nettoyer nuire offrir
33
+ oublier ouvrir pallier paraître
34
+ partir payer peindre peler
35
+ perdre peser plaire pleuvoir
36
+ pourvoir pouvoir prendre prévoir
37
+ prier promouvoir rapiécer recevoir
38
+ régner remuer répandre répondre
39
+ résoudre réveiller rire rompre
40
+ savoir semer sentir servir
41
+ signer sortir souffrir suffire
42
+ suivre surseoir taire tenir
43
+ tomber tordre traire travailler
44
+ tressaillir vaincre valoir vendre
45
+ venir vêtir vivre voir
46
+ vouloir"
47
+
48
+ # Generate word arrays from above list.
49
+ words = cpwords.gsub(/[ \t\n]+/, " ").split " "
50
+
51
+ toqry = if query.empty?
52
+ words
53
+ else
54
+ query
55
+ end
56
+
57
+ toqry_filtered = toqry.map { |word| word.gsub(/[êé]/, "e").gsub /î/, "i" }
58
+
59
+ @renderer.pre
60
+
61
+ toqry_filtered.each_with_index do |word, index|
62
+ open "http://conjf.cactus2000.de/showverb.en.php?verb=#{word}" do |page|
63
+ doc = Nokogiri::HTML page
64
+ arr = doc.css("td [width='50%']").css("div").to_s.gsub(/.*?<div>/im, "").split("<br>")
65
+ arr.pop
66
+ @renderer.word toqry[index], arr
67
+ end
68
+ end
69
+
70
+ @renderer.post
71
+ end
72
+ end
@@ -0,0 +1,77 @@
1
+ # Ruby ConjugateFR Renderers - Part of Ruby ConjugateFR.
2
+ # I, htmlguy, hereby release this work into the public domain.
3
+
4
+ class Renderer
5
+ def pre; end
6
+ def word (name, words); end
7
+ def post; end
8
+ def description; ""; end
9
+ end
10
+
11
+ class HumanRenderer < Renderer
12
+ def word (name, words)
13
+ puts "\n == #{name} == "
14
+ words.each do |val|
15
+ puts val
16
+ end
17
+ end
18
+ def description; "Renders in a nice, human-readable format."; end
19
+ end
20
+
21
+ class DelimitedTableRenderer < Renderer
22
+ def initialize; @s = ""; end
23
+ def pre
24
+ puts "Word#{@s}Je#{@s}Tu#{@s}Il/Elle/On#{@s}Nous#{@s}Vous#{@s}Ils/Elles"
25
+ end
26
+ def word (name, words)
27
+ print "#{name}"
28
+ words.each do |word|
29
+ print "#{@s}#{word}"
30
+ end
31
+ puts
32
+ end
33
+ end
34
+
35
+ class CSVRenderer < DelimitedTableRenderer
36
+ def initialize; @s = ","; end
37
+ def description; "Renders in the Comma Separated Value (CSV) format."; end
38
+ end
39
+
40
+ class TSVRenderer < DelimitedTableRenderer
41
+ def initialize; @s = "\t"; end
42
+ def description; "Renders in the Tab Separated Value (TSV) format."; end
43
+ end
44
+
45
+ class MDTableRenderer < Renderer
46
+ def pre
47
+ puts "|Word|Je|Tu|Il/Elle/On|Nous|Vous|Ils/Elles"
48
+ puts "|---|---|---|---|---|---|---"
49
+ end
50
+ def word (name, words)
51
+ print "|#{name}"
52
+ words.each do |word|
53
+ print "|#{word}"
54
+ end
55
+ puts
56
+ end
57
+ def description; "Renders in Markdown's table syntax."; end
58
+ end
59
+
60
+ class CounterRenderer < Renderer
61
+ def initialize; @count = 0; end
62
+ def word (name, words)
63
+ @count += 1
64
+ end
65
+ def post
66
+ puts @count
67
+ end
68
+ def description; "Renders out a count of how many words are listed."; end
69
+ end
70
+
71
+ $renderers = {
72
+ "Human" => HumanRenderer.new,
73
+ "CSV" => CSVRenderer.new,
74
+ "TSV" => TSVRenderer.new,
75
+ "MDTable" => MDTableRenderer.new,
76
+ "Counter" => CounterRenderer.new
77
+ }
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: conjugatefr
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - htmlguy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple program to conjugate french verbs.
14
+ email: htmlguy@pdum.xyz
15
+ executables:
16
+ - conjugatefr
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/conjugatefr
21
+ - lib/conjugatefr.rb
22
+ - lib/conjugatefr/renderers.rb
23
+ homepage: http://rubygems.org/gems/conjugatefr
24
+ licenses:
25
+ - Unlicense
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.2.3
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: ConjugateFR French Conjugation
47
+ test_files: []