blob: 95de2dc062c1f22fe376139994fa6b0428b35f29 (
plain)
1
2
3
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
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
|
%%
%% This is file `example.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% perltex.dtx (with options: `example')
%%
%% This is a generated file.
%%
%% Copyright (C) 2009 Scott Pakin <scott+pt@pakin.org>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3c of this license
%% or (at your option) any later version. The latest version of this
%% license is in:
%%
%% http://www.latex-project.org/lppl.txt
%%
%% and version 1.3c or later is part of all distributions of LaTeX version
%% 2006/05/20 or later.
%%
\documentclass{article}
\usepackage[optional]{perltex}
\usepackage{environ}
\usepackage{hyperref}
\ifperl
\perlnewcommand{\dolinkwords}[3]{
# Preprocess our arguments.
$url = $_[0];
$url =~ s/\\\%s/\%s/g;
%stopwords = map {lc $_ => 1} split " ", $_[1];
$stopwords{""} = 1;
$text = $_[2];
# Replace LaTeX code in the text with placeholders.
$placeholder = "ABCxyz123";
%substs = ();
$replace = sub {$substs{$placeholder} = $_[0]; $placeholder++};
$text =~ s/\\(begin|end)\s+\{[a-z]+\}/$replace->($&)/gse;
$text =~ s/\\[a-z]+/$replace->($&)/gse;
# Hyperlink each word that's not in the stop list.
$newtext = "";
foreach $word (split /((?<=[-\A\s])[\'a-z]+\b)/i, $text) {
$lcword = lc $word;
if (defined $stopwords{$lcword} || $lcword =~ /[^a-z]/) {
$newtext .= $word;
}
else {
$newtext .= sprintf "\\href{$url}{%s}", $lcword, $word;
}
}
# Restore original text from placeholders and return the new text.
while (($tag, $orig) = each %substs) {
$newtext =~ s/\Q$tag\E/$orig/gs;
}
return $newtext;
}
\NewEnviron{linkwords}[2][]{\dolinkwords{#2}{#1}{\BODY}}{}
\else
\newenvironment{linkwords}[2][]{}{}
\fi
\begin{document}
\newcommand{\stopwords}{a an the of in am and or but i we me you us them}
\begin{linkwords}[\stopwords]{http://www.google.com/search?q=define:\%s}
\begin{verse}
I'm very good at integral and differential calculus; \\
I know the scientific names of beings animalculous: \\
In short, in matters vegetable, animal, and mineral, \\
I am the very model of a modern Major-General.
\end{verse}
\end{linkwords}
\end{document}
\endinput
%%
%% End of file `example.tex'.
|