conjugatefr 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []