#!/usr/bin/perl
use warnings;
use strict;
use LWP::Simple;
use Gtk2 '-init';
use constant TRUE => 1;
use constant FALSE => 0;
use utf8;
binmode STDOUT, ":encoding(UTF-8)";
sub raeSearch()
{
my $rae = get("http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$_[0]");
my $resultado;
while ($rae =~ m/name="[\d_]+"> (.*?) <\/p/smgix)
{
my $desc = $1;
# Quitar las marcas HTML
$desc =~ s/<.*?>//gsm;
# Quitar los espacios a los lados
$desc =~ s/^\s+//sm;
$desc =~ s/\s+$//sm;
# Quitar espacios excesivos
$desc =~ s/\s+/ /gsm;
$resultado .= "$desc\n";
}
# Saber si $resultado está vacio:
{
return "La palabra \"$_[0]\" no se encuentra en el diccionario. RAE\n"; } else {
}
}
sub hide_on_delete
{
my ($widget) = @_;
$widget->hide;
}
# Propiedades de ventana:
my $window = Gtk2::Window->new();
$window->set_title("RAE Search");
$window->set_border_width(3);
$window->signal_connect(destroy => sub{Gtk2->main_quit});
$window->set_auto_startup_notification(TRUE);
$window->set_decorated(TRUE);
$window->set_default_icon_from_file("camel.ico");
$window->move(0, 0);
$window->resize(700, 100);
$window->set_resizable(TRUE);
# Frame :
my $frame = Gtk2::Frame->new("Entrada");
# VBox :
my $vbox = Gtk2::VBox->new(FALSE, 10);
$vbox->pack_start($frame, TRUE, TRUE, 0);
# HBox :
my $hbox = Gtk2::HBox->new(FALSE, 6);
# Entry:
my $dir_entry = Gtk2::Entry->new_with_max_length(30);
$dir_entry->set_text("encono");
$dir_entry->set_activates_default(FALSE);
$dir_entry->set_position(100);
# Button :
my $button = Gtk2::Button->new("_Buscar");
$button->set_alignment(2.6, 4.5);
$button->set_focus_on_click(TRUE);
# TextView :
my $textview = Gtk2::TextView->new();
$textview->set_border_window_size('top', 1);
my $buffer = $textview->get_buffer;
# Button (button and clipboard widget) :
my $button_clipboard = Gtk2::Button->new("_Clipboard");
$button_clipboard->set_focus_on_click(TRUE);
my $clipboard = Gtk2::Clipboard->get(Gtk2::Gdk->SELECTION_CLIPBOARD);
$button->signal_connect(clicked => sub
{
$buffer->set_text(&raeSearch($dir_entry->get_text));
}
);
$button_clipboard->signal_connect(clicked => sub
{
$clipboard->set_text(&raeSearch($dir_entry->get_text));
}
);
# Button (Quit) :
my $button_quit = Gtk2::Button->new("_Salir");
$button_quit->set_alignment(3.5, 4.5);
$button_quit->set_focus_on_click(TRUE);
$button_quit->signal_connect(clicked => sub
{
Gtk2->main_quit;
}
);
# AboutDialog :
my $about = Gtk2::AboutDialog->new;
$about->set_comments("Un buscador de palabras en el diccionario de la Real Academia Española");
$about->set_website("leorocko13\@hotmail.com");
$about->set_authors("Leo Gutierrez Ramirez");
$about->set_copyright("(c) Leo Gutiérrez Ramírez");
$about->set_program_name("RAE Search");
$about->set_version("1.0");
$about->set_website_label("leorocko13\@hotmail.com");
open(my $file, q[<], "./licencia.txt") or die("No se pudo abrir el archivo \"licencia.txt\". _$!"); my $license;
while(<$file>)
{
$license .= $_;
}
close($file) or warn("Error cerrando el archivo \"licencia.txt\""); $about->set_license($license);
# Button (about) :
my $button_about = Gtk2::Button->new("_About ...");
$button_about->set_focus_on_click(TRUE);
$button_about->signal_connect(clicked => sub {
$about->run;
&hide_on_delete($about);
}
);
# Scroll Window :
my $scroll = Gtk2::ScrolledWindow->new();
$scroll->set_policy('automatic', 'automatic');
$scroll->set_shadow_type('out');
$scroll->add($textview);
$vbox->pack_start($scroll, TRUE, TRUE, 0);
$vbox->pack_start($button_clipboard, TRUE, TRUE, 2);
$frame->add($hbox);
$hbox->pack_start($dir_entry, FALSE, FALSE, 0);
$hbox->pack_start($button, FALSE, FALSE, 0);
$hbox->pack_end($button_about, FALSE, FALSE, 0);
$hbox->pack_end($button_quit, FALSE, FALSE, 0);
$window->add($vbox);
$window->show_all;
Gtk2->main;