summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/glossaries
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-11-20 01:12:02 +0000
committerKarl Berry <karl@freefriends.org>2012-11-20 01:12:02 +0000
commit7c8d0edea78bbaa87a816da41a6351a7cb7edd0f (patch)
treedbcb453b8c7e4b69ee2b9c4c5d27bf1d80052cbe /Master/texmf-dist/scripts/glossaries
parent6c960e7402ad996080bddee70b48625460f46d8e (diff)
glossaries (19nov12)
git-svn-id: svn://tug.org/texlive/trunk@28305 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/glossaries')
-rw-r--r--Master/texmf-dist/scripts/glossaries/glossaries.perl4460
-rwxr-xr-xMaster/texmf-dist/scripts/glossaries/makeglossaries17
-rwxr-xr-xMaster/texmf-dist/scripts/glossaries/makeglossaries.bat6
-rw-r--r--Master/texmf-dist/scripts/glossaries/mfirstuc.perl129
4 files changed, 4604 insertions, 8 deletions
diff --git a/Master/texmf-dist/scripts/glossaries/glossaries.perl b/Master/texmf-dist/scripts/glossaries/glossaries.perl
new file mode 100644
index 00000000000..d615d83ab08
--- /dev/null
+++ b/Master/texmf-dist/scripts/glossaries/glossaries.perl
@@ -0,0 +1,4460 @@
+# File : glossaries.perl
+# Author : Nicola L.C. Talbot
+# Date : 14th June 2007
+# Last Modified : 2012-09-21
+# Version : 1.05
+# Description : LaTeX2HTML (limited!) implementation of glossaries
+# package. Note that not all the glossaries.sty
+# macros have been implemented.
+
+# This is a LaTeX2HTML style implementing the glossaries package, and
+# is distributed as part of that package.
+# Copyright 2007 Nicola L.C. Talbot
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license of (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Nicola Talbot.
+
+# This work consists of the files glossaries.dtx and glossaries.ins
+# and the derived files glossaries.sty, glossary-hypernav.sty,
+# glossary-list.sty, glossary-long.sty, glossary-super.sty,
+# glossaries.perl, mfrstuc.perl. Also makeglossaries and makeglossaries.bat
+
+package main;
+
+&do_require_package("mfirstuc");
+
+ %glossary_style = ();
+ &set_glossarystyle('altlist');# default style
+
+ $CURRENT_STYLE='altlist';
+
+&process_commands_nowrap_in_tex( <<_RAW_ARG_CMDS_);
+newglossarystyle # {} # {}
+_RAW_ARG_CMDS_
+
+# These are the only package options implemented.
+
+sub do_glossaries_style_altlist{
+}
+
+sub do_glossaries_toc{
+}
+
+sub do_glossaries_toc_true{
+}
+
+$INDEXONLYFIRST=0;
+
+sub do_glossaries_indexonlyfirst{
+ $INDEXONLYFIRST=1;
+}
+
+$gls_nonumberlist{'main'} = 0;
+
+sub do_glossaries_nonumberlist{
+ $gls_nonumberlist{'main'} = 1;
+}
+
+$GLSCURRENTFORMAT="textrm" if (!defined($GLSCURRENTFORMAT));
+$GLOSSARY_END_DESCRIPTION = '.' if (!defined($GLOSSARY_END_DESCRIPTION));
+
+sub do_cmd_glossaryname{
+ "Glossary$_[0]"
+}
+
+$gls_mark{'main'} = "<tex2html_gls_main_mark>";
+$gls_file_mark{'main'} = "<tex2html_gls_main_file_mark>";
+$gls_title{'main'} = "\\glossaryname";
+$gls_toctitle{'main'} = "\\glossaryname";
+$delimN{'main'} = ", ";
+$glsnumformat{'main'} = $GLSCURRENTFORMAT;
+@{$gls_entries{'main'}} = ();
+$gls_displayfirst{'main'} = "glsdisplayfirst";
+$gls_display{'main'} = "glsdisplay";
+
+ %glsentry = ();
+
+$acronymtype = 'main';
+
+sub do_glossaries_acronym{
+ &do_glossaries_acronym_true
+}
+
+sub do_glossaries_acronym_true{
+ &make_newglossarytype("acronym", "\\acronymname");
+ $acronymtype = 'acronym';
+}
+
+sub do_glossaries_acronym_false{
+ $acronymtype = 'main';
+}
+
+sub do_cmd_acronymname{
+ join('', 'Acronyms', $_[0]);
+}
+
+sub do_cmd_acronymtype{
+ join('', $acronymtype, $_[0]);
+}
+
+$global{'glossaryentry'} = 0;
+$global{'glossarysubentry'} = 0;
+
+sub do_cmd_theglossaryentry{
+ join('', $global{'glossaryentry'}, $_[0]);
+}
+
+sub do_cmd_theglossarysubentry{
+ join('', $global{'glossarysubentry'}, $_[0]);
+}
+
+sub do_glossaries_entrycounter{
+ &do_glossaries_entrycounter_true
+}
+
+sub do_glossaries_entrycounter_true{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetentrycounter{
+ $global{'entrycounter'} = 0;
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_glossaries_entrycounter_false{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetentrycounter{
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_cmd_glsresetentrycounter{$_[0];}
+
+sub do_glossaries_subentrycounter{
+ &do_glossaries_subentrycounter_true
+}
+
+sub do_glossaries_subentrycounter_true{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetsubentrycounter{
+ $global{'subentrycounter'} = 0;
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_glossaries_subentrycounter_false{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetsubentrycounter{
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_cmd_glsresetsubentrycounter{ $_[0]; }
+
+# modify set_depth_levels so that glossary is added
+
+sub replace_glossary_markers{
+ foreach $type (keys %gls_mark)
+ {
+ if (defined &add_gls_hook)
+ {&add_gls_hook if (/$gls_mark{$type}/);}
+ else
+ {&add_gls($type) if (/$gls_mark{$type}/);}
+
+ s/$gls_file_mark{$type}/$glsfile{$type}/g;
+ }
+}
+
+# there must be a better way of doing this
+# other than copying the original code and adding to it.
+sub replace_general_markers {
+ if (defined &replace_infopage_hook) {&replace_infopage_hook if (/$info_page_mark/);}
+ else { &replace_infopage if (/$info_page_mark/); }
+ if (defined &add_idx_hook) {&add_idx_hook if (/$idx_mark/);}
+ else {&add_idx if (/$idx_mark/);}
+ &replace_glossary_markers;
+
+ if ($segment_figure_captions) {
+s/$lof_mark/$segment_figure_captions/o
+ } else { s/$lof_mark/$figure_captions/o }
+ if ($segment_table_captions) {
+s/$lot_mark/$segment_table_captions/o
+ } else { s/$lot_mark/$table_captions/o }
+ &replace_morelinks();
+ if (defined &replace_citations_hook) {&replace_citations_hook if /$bbl_mark/;}
+ else {&replace_bbl_marks if /$bbl_mark/;}
+ if (defined &add_toc_hook) {&add_toc_hook if (/$toc_mark/);}
+ else {&add_toc if (/$toc_mark/);}
+ if (defined &add_childs_hook) {&add_childs_hook if (/$childlinks_on_mark/);}
+ else {&add_childlinks if (/$childlinks_on_mark/);}
+ &remove_child_marks;
+
+ if (defined &replace_cross_references_hook) {&replace_cross_references_hook;}
+ else {&replace_cross_ref_marks if /$cross_ref_mark||$cross_ref_visible_mark/;}
+ if (defined &replace_external_references_hook) {&replace_external_references_hook;}
+ else {&replace_external_ref_marks if /$external_ref_mark/;}
+ if (defined &replace_cite_references_hook) {&replace_cite_references_hook;}
+ else { &replace_cite_marks if /$cite_mark/; }
+ if (defined &replace_user_references) {
+ &replace_user_references if /$user_ref_mark/; }
+
+}
+
+sub add_gls{
+ local($sidx_style, $eidx_style) =('<STRONG>','</STRONG>');
+ if ($INDEX_STYLES) {
+if ($INDEX_STYLES =~/,/) {
+local(@styles) = split(/\s*,\s*/,$INDEX_STYLES);
+ $sidx_style = join('','<', join('><',@styles) ,'>');
+ $eidx_style = join('','</', join('></',reverse(@styles)) ,'>');
+} else {
+ $sidx_style = join('','<', $INDEX_STYLES,'>');
+ $eidx_style = join('','</', $INDEX_STYLES,'>');
+}
+ }
+ &add_real_gls
+}
+
+sub gls_compare{
+ local($x, $y) = @_;
+
+ if ($x eq '' or $y eq '')
+ {
+ if ($x ne '')
+ {
+ # y is the shorter string
+ return 1;
+ }
+ elsif ($y ne '')
+ {
+ # x is the shorter string
+ return -1;
+ }
+ else
+ {
+ # both empty
+ return 0;
+ }
+ }
+
+ local($x0) = '';
+ local($y0) = '';
+
+ if ($x=~s/^(&#(?:\d+|x[\da-f]+);)//)
+ {
+ $x0 = $1;
+ }
+ elsif ($x=~s/^(.)//)
+ {
+ $x0 = $1;
+ }
+
+ if ($y=~s/^(&#(?:\d+|x[\da-f]+);)//)
+ {
+ $y0 = $1;
+ }
+ elsif ($y=~s/^(.)//)
+ {
+ $y0 = $1;
+ }
+
+ local($numx);
+
+ if ($x0=~/&#(\d+|x[\da-f]+);/)
+ {
+ $numx = $1;
+
+ $numx = hex("0$numx") if $numx=~/^x/;
+ }
+ else
+ {
+ $numx = ord($x0);
+ }
+
+ local($numy);
+
+ if ($y0=~/&#(\d+|x[\da-f]+);/)
+ {
+ $numy = $1;
+
+ $numy = hex("0$numy") if $numy=~/^x/;
+ }
+ else
+ {
+ $numy = ord($y0);
+ }
+
+ if ($numx == $numy)
+ {
+ return &gls_compare($x, $y);
+ }
+ elsif ($numx >= 48 and $numx <= 57) # x in range '0' ... '9'
+ {
+ if ($numy >= 48 and $numy <= 57) # y in range '0' ... '9'
+ {
+ return $numx <=> $numy;
+ }
+ elsif (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y a letter
+ {
+ # digits are less than letters
+ return -1;
+ }
+ else
+ {
+ # digits are greater than symbols
+ return 1;
+ }
+ }
+ elsif (($numx >= 97 and $numx <= 122) or ($numx >= 65 and $numx <= 90)) # x a letter
+ {
+ if (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y a letter
+ {
+ if (($numx <= 90 and $numy <= 90) or ($numx >= 97 and $numy >= 97))
+ {
+ # same case (already checked if they are equal)
+
+ return $numx <=> $numy;
+ }
+
+ # are they upper/lower case versions of each other?
+
+ if (($numx >= 97 and $numy == $numx-32))
+ {
+ # x is upper case version of y
+
+ if ($x or $y)
+ {
+ return &gls_compare($x, $y);
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ if (($numy >= 97 and $numx == $numy-32))
+ {
+ # y is upper case version of x
+
+ if ($x or $y)
+ {
+ return &gls_compare($x, $y);
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+ # compare lower case values
+ return lc(chr($numx)) cmp lc(chr($numy));
+ }
+ else
+ {
+ # a-z greater than symbols and digits
+ return 1;
+ }
+ }
+ elsif ($numy >= 48 and $numy <= 57) # y in range '0' ... '9'
+ {
+ # already checked for '0' < x < '9' and '0' < y < '9'
+ # already checked for 'a' < x < 'z' and '0' < y < '9'
+
+ # digits greater than symbols
+ return 1;
+ }
+ elsif (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y is a letter
+ {
+ # already checked for x is digit and y a is letter
+ # already checked for x is letter and y a is letter
+
+ # symbols and digits are less than letters
+
+ return -1;
+ }
+
+ $numx <=> $numy
+}
+
+sub gloskeysort{
+
+ $a=~/^(.*)###(\d+)$/;
+
+ local($labelx) = $1;
+ local($x_id) =$2;
+
+ $b=~/^(.*)###(\d+)$/;
+
+ local($labely) = $1;
+ local($y_id) = $2;
+
+ local($sortx) = &gls_get_sort($labelx);
+ local($sorty) = &gls_get_sort($labely);
+
+ local($n);
+
+ # are they case-insensitive equivalent?
+
+ if (lc($sortx) eq lc($sorty))
+ {
+ $n = ($sortx cmp $sorty);
+ }
+ else
+ {
+ $n = &gls_compare($sortx, $sorty);
+ }
+
+ unless ($n)
+ {
+ $n = ($x_id <=> $y_id);
+ }
+
+ $n
+}
+
+sub add_parent_if_required{
+ local($label) = @_;
+
+ local($parent) = &gls_get_parent($label);
+
+ if ($parent)
+ {
+ local($type) = &gls_get_type($parent);
+
+ # does this parent have a backlink?
+
+ for my $key (keys %{$glossary{$type}})
+ {
+ return if $key=~/^$parent###\d+$/;
+ }
+
+ # none found, so add empty one
+
+ my $id = ++$global{'max_id'};
+
+ $glossary{$type}{"$parent###$id"} = '';
+ $glossary_entry{$type}{"$parent###$id"} = $parent;
+
+ # check if parent also has a parent
+
+ &add_parent_if_required($parent);
+ }
+}
+
+sub add_real_gls{
+ local($type) = @_;
+ print "\nDoing glossary '$type' ...";
+ local($key, $str, @keys, $thisglsentry, $level, $count,
+ $previous, $current, $id, $linktext, $delimN);
+
+ $TITLE = $gls_toctitle{$type};
+
+ local($oldstyle) = $CURRENT_STYLE;
+
+ if ($gls_style{$type})
+ {
+ &set_glossarystyle($gls_style{$type});
+ }
+
+ # add any parent entries that haven't been referenced
+
+ for my $key (keys %{$glossary{$type}})
+ {
+ my $label = $key;
+ $label =~ s/###\d+$//o; # Remove the unique id's
+
+ &add_parent_if_required($label);
+ }
+
+ @keys = keys %{$glossary{$type}};
+
+ @keys = sort gloskeysort @keys;
+
+ $level = 0;
+
+ $delimN = $delimN{$type};
+
+ $previous = '';
+
+ local($previousentry) = '';
+
+ my $glossaryentryfield = '';
+
+ my $previouscat = '';
+
+ local ($entry);
+
+ foreach $key (@keys)
+ {
+ $current = $key;
+ $current =~ s/\#\#\#\d+$//o; # Remove the unique id's
+
+ my $issame = ($current eq $previous ? 1 : 0);
+
+ $previous = $current;
+
+ $entry = $glossary_entry{$type}{$key};
+
+ unless ($issame)
+ {
+ if ($glossaryentryfield)
+ {
+ $id = ++$global{'max_id'};
+
+ my $level = &gls_get_level($previousentry);
+
+ if ($level > 0)
+ {
+ my $id2 = ++$global{'max_id'};
+
+ $thisglsentry .=
+ "\\glossarysubentryfield $OP$id2$CP$level$OP$id2$CP$glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ else
+ {
+ $thisglsentry .=
+ "\\glossaryentryfield $glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+
+ $glossaryentryfield = '';
+ }
+
+ $linktext = '';
+
+ my $currentcat = substr(&gls_get_sort($current), 0, 1);
+
+ if ($currentcat=~/[a-zA-Z]/)
+ {
+ $currentcat = uc($currentcat);
+ }
+ elsif ($currentcat=~/[0-9]/)
+ {
+ $currentcat = 'glsnumbers';
+ }
+ else
+ {
+ $currentcat = 'glssymbols';
+ }
+
+ unless ($previouscat eq $currentcat)
+ {
+ $id = ++$global{'max_id'};
+ $thisglsentry .= "\\glsgroupheading$OP$id$CP$currentcat$OP$id$CP";
+
+ $previouscat = $currentcat;
+ }
+ }
+
+ $previousentry = $entry;
+
+ # Back ref
+
+ if ($gls_nonumberlist{$type})
+ {
+ $linktext = '';
+ }
+ elsif ($glossary{$type}{$key})
+ {
+ $id = ++$global{'max_id'};
+
+ $linktext .= $delimN if ($linktext);
+
+ $linktext .= "$glossary{$type}{$key}\\$glossary_format{$type}{$key}${OP}$id${CP}$glossary_linktext{$type}{$key}${OP}$id${CP}</A>";
+
+ }
+
+ unless ($issame)
+ {
+ $id = ++$global{'max_id'};
+ local($name) = &translate_commands(
+ "\\glsnamefont $OP$id$CP$glsentry{$entry}{name}$OP$id$CP");
+
+ local($symbol) = ($glsentry{$entry}{'symbol'} ?
+ " $glsentry{$entry}{symbol}" : '');
+
+ $id = ++$global{'max_id'};
+ my $id2 = ++$global{'max_id'};
+ my $id3 = ++$global{'max_id'};
+ my $id4 = ++$global{'max_id'};
+
+ $glossaryentryfield = "$OP$id$CP$entry$OP$id$CP" # label
+ . "$OP$id2$CP$name$OP$id2$CP" # name
+ . "$OP$id3$CP$glsentry{$entry}{description}$OP$id3$CP" # description
+ . "$OP$id4$CP$symbol$OP$id4$CP" # symbol
+ }
+
+ }
+
+ if ($glossaryentryfield and $entry)
+ {
+ my $level = &gls_get_level($entry);
+
+ if ($level > 0)
+ {
+ my $id2 = ++$global{'max_id'};
+
+ $thisglsentry .=
+ "\\glossarysubentryfield $OP$id2$CP$level$OP$id2$CP$glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ else
+ {
+ $id = ++$global{'max_id'};
+ $thisglsentry .=
+ "\\glossaryentryfield $glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ }
+
+ $str = &do_env_theglossary($thisglsentry) . &translate_commands("\\glossarypostamble");
+
+ if ($gls_style{$type})
+ {
+ &set_glossarystyle($oldstyle);
+ }
+
+ s/$gls_mark{$type}/$preglossary\n$str\n/s;
+}
+
+sub do_cmd_glstarget{
+ local($_) = @_;
+
+ local($id, $label, $text);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ "<A NAME=\"gls:$label\">$text</A>$_";
+}
+
+sub do_cmd_newglossarystyle{
+ local($_) = @_;
+
+ local($id,$style,$defs);
+
+ $style = &missing_braces unless
+ s/$next_pair_rx/$id=$1;$style=$2;''/eo;
+
+ $defs = &missing_braces unless
+ s/$next_pair_rx/$id=$1;$defs=$2;''/eo;
+
+ $glossary_style{$style} = $defs;
+
+ $_;
+}
+
+sub do_cmd_glossarystyle{
+ local($_) = @_;
+
+ local($id,$style);
+
+ $style = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$style=$2;''/eo;
+
+ &set_glossarystyle($style);
+
+ $_;
+}
+
+sub set_glossarystyle{
+ local($style) = @_;
+
+ $CURRENT_STYLE = $style;
+
+ if ($glossary_style{$style})
+ {
+ local($_) = $glossary_style{$style};
+
+ s/$O(\d+)$C/$OP$1$CP/g;
+
+ &translate_commands($_);
+ }
+ else
+ {
+ my $cmd_sub = "set_glossarystyle_$style";
+
+ if (defined(&$cmd_sub))
+ {
+ &$cmd_sub();
+ }
+ else
+ {
+ &write_warnings("Unknown glossary style '$style', defaulting to 'altlist'");
+ &set_glossarystyle_altlist();
+
+ $CURRENT_STYLE = 'altlist';
+ }
+ }
+
+}
+
+sub do_cmd_glspar{ "<P>".$_[0]; }
+
+sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+}
+
+sub do_cmd_glsentryitem{
+ local($_) = @_;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $_
+}
+
+sub do_cmd_glssubentryitem{
+ local($_) = @_;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $_
+}
+
+sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_;
+}
+
+sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$backlink=$2;''/eo;
+
+ local($id2) = ++$global{'max_id'};
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n$desc $backlink\n$_";
+}
+
+sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $level, $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$backlink=$2;''/eo;
+
+ local($id2) = ++$global{'max_id'};
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n$desc $backlink\n$_";
+}
+
+sub do_env_theglossary{
+ local($_) = @_;
+
+ &translate_commands($_);
+}
+
+sub set_glossarystyle_altlist{
+ eval(<<'END_STYLE');
+ sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+ }
+
+ sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_
+ }
+
+ sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$backlink=$2;''/eo;
+
+ "<DT>\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n<DD>"
+ . "$desc\\glspostdescription\\space $backlink$_";
+ }
+
+ sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $id6, $level,
+ $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id6=$1;$backlink=$2;''/eo;
+
+ "<P>\\glssubentryitem $OP$id$CP$label$OP$id$CP"
+ ."\\glstarget $OP$id2$CP$label$OP$id2$CP$OP$id3$CP$name$OP$id3$CP"
+ ."$desc\\glspostdescription\\space $backlink\n$_";
+ }
+
+ sub do_env_theglossary{
+ local($_) = @_;
+
+ "<DL>".&translate_commands("\\glossaryheader $_")."</DL>";
+ }
+END_STYLE
+}
+
+sub set_glossarystyle_inline{
+ eval(<<'END_STYLE');
+ sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+ }
+
+ sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_;
+ }
+
+ sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$backlink=$2;''/eo;
+
+ local($field) = "\\glsinlinedopostchild $glsinlinesep";
+
+ $field .= "\\glsentryitem $OP$id$CP$label$OP$id$CP"
+ . "\\glsinlinenameformat $OP$id2$CP$label$OP$id2$CP$OP$id3$CP$name$OP$id3$CP";
+
+ $id3 = ++$global{'max_id'};
+
+ if ($desc)
+ {
+ $field .=
+ "\\glsinlinedescformat $OP$id3$CP$desc$OP$id3$CP"
+ ."$OP$id4$CP$symbol$OP$id4$CP"
+ ."$OP$id5$CP$backlink$OP$id5$CP";
+ }
+ else
+ {
+ $field .=
+ "\\glsinlineemptydescformat "
+ ."$OP$id4$CP$symbol$OP$id4$CP"
+ ."$OP$id5$CP$backlink$OP$id5$CP";
+ }
+
+# TODO : check if has children
+
+ local($haschildren) = 0;
+
+ if ($haschildren)
+ {
+ $field .= "\\glsresetsubentrycounter "
+ . "\\glsinlineparentchildseparator "
+ . "\\glsinlinepostchild ";
+ }
+
+ $glsinlinesep = &translate_commands("\\glsinlineseparator ")
+ unless $glsinlinesep;
+
+ $field.$_;
+ }
+
+ sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4,$id5,$id6,$level,
+ $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id6=$1;$backlink=$2;''/eo;
+
+ "\\glsinlinesubnameformat $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP"
+ ."\\glssubentryitem $OP$id3$CP$label$OP$id3$CP"
+ ."\\glsinlinesubdescformat $OP$id4$CP$desc$OP$id4$CP$OP$id5$CP$symbol$OP$id5$CP$OP$id6$CP$backlink$OP$id6$CP"
+ .$_;
+ }
+
+ sub do_env_theglossary{
+ local($_) = @_;
+
+ $glsinlinesep = '';
+
+ &translate_commands("\\glossaryheader $_\\glspostinline ");
+ }
+END_STYLE
+}
+
+local($glsinlinesep,$glsinlinepostchild);
+
+sub do_cmd_glsinlineseparator{
+ local($_) = @_;
+
+ "; $_";
+}
+
+sub do_cmd_glsinlinedopostchild{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_glspostdescription{
+ local($_) = @_;
+
+ $GLOSSARY_END_DESCRIPTION.$_;
+}
+
+sub do_cmd_glspostinline{
+ local($_) = @_;
+
+ &translate_commands("\\glspostdescription\\space ").$_;
+}
+
+sub do_cmd_glsinlinepostchild{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_glsinlineparentchildseparator{
+ local($_) = @_;
+
+ ": $_";
+}
+
+sub do_cmd_glsinlinesubseparator{
+ local($_) = @_;
+
+ ", $_";
+}
+
+sub do_cmd_glsinlinenameformat{
+ &do_cmd_glstarget(@_);
+}
+
+sub do_cmd_glsinlinedescformat{
+ local($_) = @_;
+
+ local($id, $desc, $symbol, $backlinks);
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ "\\space $desc$_";
+}
+
+sub do_cmd_glsinlineemptydescformat{
+ local($_) = @_;
+
+ local($id, $symbol, $backlinks);
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ $_;
+}
+
+sub do_cmd_glsinlinesubnameformat{
+ local($_) = @_;
+
+ local($id, $id2, $label, $name);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1,$name=$2;''/eo;
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$OP$id2$CP$_";
+}
+
+sub do_cmd_glsinlinesubdescformat{
+ local($_) = @_;
+
+ local($id, $desc, $symbol, $backlinks);
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ "$desc$_";
+}
+
+sub set_depth_levels {
+ # Sets $outermost_level
+ local($level);
+ # scan the document body, not the preamble, for use of sectioning commands
+ my ($contents) = $_;
+ if ($contents =~ /\\begin\s*((?:$O|$OP)\d+(?:$C|$CP))document\1|\\startdocument/s) {
+$contents = $';
+ }
+ foreach $level ("part", "chapter", "section", "subsection",
+ "subsubsection", "paragraph") {
+last if (($outermost_level) = $contents =~ /\\($level)$delimiter_rx/);
+last if (($outermost_level) = $contents =~ /\\endsegment\s*\[\s*($level)\s*\]/s);
+if ($contents =~ /\\segment\s*($O\d+$C)[^<]+\1\s*($O\d+$C)\s*($level)\s*\2/s)
+{ $outermost_level = $3; last };
+ }
+ $level = ($outermost_level ? $section_commands{$outermost_level} :
+ do {$outermost_level = 'section'; 3;});
+
+ if ($REL_DEPTH && $MAX_SPLIT_DEPTH) {
+$MAX_SPLIT_DEPTH = $level + $MAX_SPLIT_DEPTH;
+ } elsif (!($MAX_SPLIT_DEPTH)) { $MAX_SPLIT_DEPTH = 1 };
+
+ %unnumbered_section_commands = (
+ 'tableofcontents', $level
+, 'listoffigures', $level
+, 'listoftables', $level
+, 'bibliography', $level
+, 'textohtmlindex', $level
+, 'textohtmlglossary', $level
+, 'textohtmlglossaries', $level
+ , %unnumbered_section_commands
+ );
+
+ %section_commands = (
+ %unnumbered_section_commands
+ , %section_commands
+ );
+}
+
+sub add_bbl_and_idx_dummy_commands {
+ local($id) = $global{'max_id'};
+
+ s/([\\]begin\s*$O\d+$C\s*thebibliography)/$bbl_cnt++; $1/eg;
+ ## if ($bbl_cnt == 1) {
+s/([\\]begin\s*$O\d+$C\s*thebibliography)/$id++; "\\bibliography$O$id$C$O$id$C $1"/geo;
+ #}
+ $global{'max_id'} = $id;
+ s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlindex $1/o;
+ s/[\\]printindex/\\textohtmlindex /o;
+ &add_gls_dummy_commands;
+ &lib_add_bbl_and_idx_dummy_commands() if defined(&lib_add_bbl_and_idx_dummy_commands);
+}
+
+sub add_gls_dummy_commands{
+ s/[\\]printglossary/\\textohtmlglossary/sg;
+ s/[\\]printglossaries/\\textohtmlglossaries/sg;
+}
+
+sub get_firstkeyval{
+ local($key,$_) = @_;
+ local($value);
+
+ s/\b$key\s*=$OP(\d+)$CP(.*)$OP\1$CP\s*(,|$)/$value=$2;','/es;
+ undef($value) if $`=~/\b$key\s*=/;
+
+ unless (defined($value))
+ {
+ s/(^|,)\s*$key\s*=\s*([^,]*)\s*(,|$)/,/s;
+ $value=$2;
+ }
+
+ ($value,$_);
+}
+
+# need to get the value of the last key of a given name
+# in the event of multiple occurrences.
+sub get_keyval{
+ local($key,$_) = @_;
+ local($value);
+
+ while (/\b$key\s*=/g)
+ {
+ ($value,$_) = &get_firstkeyval($key, $_);
+ last unless defined($value);
+ }
+
+ ($value,$_);
+}
+
+sub get_boolval{
+ local($key,$_) = @_;
+ local($value);
+
+ while (/\b$key\s*(?:=(true|false))?\b/g)
+ {
+ $value = ($1 ? $1 : 'true');
+ }
+
+ ($value eq 'true' ? 1 : 0, $_);
+}
+
+# This is modified from do_cmd_textohtmlindex
+
+sub do_cmd_textohtmlglossary{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ local($type,$title,$toctitle,$style,$nonumberlist);
+
+ $nonumberlist = 'default';
+
+ ($type,$keyval) = &get_keyval('type', $keyval);
+ ($title,$keyval) = &get_keyval('title', $keyval);
+ ($toctitle,$keyval) = &get_keyval('toctitle', $keyval);
+ ($style,$keyval) = &get_keyval('style', $keyval);
+ ($nonumberlist,$keyval) = &get_boolval('nonumberlist', $keyval);
+
+ &make_textohtmlglossary($type,$toctitle,$title,$style,$nonumberlist).$_;
+}
+
+# add_real_gls does the actual glossary
+sub make_textohtmlglossary{
+ local($type,$toctitle,$title,$style,$nonumberlist) = @_;
+
+ unless (defined($type)) {$type = 'main';}
+
+ unless (defined $gls_mark{$type})
+ {
+ &write_warnings("glossary type '$type' not implemented");
+ }
+
+ if ($style)
+ {
+ $gls_style{$type} = $style;
+ }
+
+ $toctitle = $gls_toctitle{$type} unless ($toctitle or $title);
+
+ $title = $gls_title{$type} unless ($title);
+ $toctitle = $title unless ($toctitle);
+
+ $gls_toctitle{$type} = $toctitle;
+
+ $gls_nonumberlist{$type} = $nonumberlist unless ($nonumberlist eq 'default');
+
+ $toc_sec_title = $toctitle;
+ $glsfile{$type} = $CURRENT_FILE;
+
+ if (defined($frame_main_suffix))
+ {
+ $glsfile{$type}=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ $TITLE=&translate_commands($toctitle);
+
+ if (%glossary_labels) { &make_glossary_labels(); }
+
+ if (($SHORT_INDEX) && (%glossary_segment))
+ {
+ &make_preglossary();
+ }
+ else
+ {
+ $preglossary = &translate_commands("\\glossarypreamble");
+ }
+
+ local $idx_head = $section_headings{'textohtmlindex'};
+ local($heading) = join(''
+ , &make_section_heading($title, $idx_head)
+ , $gls_mark{$type} );
+ local($pre,$post) = &minimize_open_tags($heading);
+
+ join('',"<BR>\n" , $pre);
+}
+
+sub do_cmd_textohtmlglossaries{
+ local($_) = @_;
+
+ foreach $type (keys %gls_mark)
+ {
+ $id = ++$global{'max_id'};
+ $_ = &make_textohtmlglossary($type,$gls_title{'main'}).$_;
+ }
+
+ $_;
+}
+
+sub make_glossary_labels {
+ local($key, @keys);
+ @keys = keys %glossary_labels;
+ foreach $key (@keys) {
+ if (($ref_files{$key}) && !($ref_files{$key} eq "$glsfile{'main'}")) {
+ local($tmp) = $ref_files{$key};
+ &write_warnings("\nmultiple label $key , target in $glsfile{'main'} masks $tmp ");
+ }
+ $ref_files{$key} .= $glsfile{'main'};
+ }
+}
+
+sub make_preglossary{ &make_real_preglossary }
+sub make_real_preglossary{
+ local($key, @keys, $head, $body);
+ $head = "<HR>\n<H4>Legend:</H4>\n<DL COMPACT>";
+ @keys = keys %glossary_segment;
+ foreach $key (@keys) {
+ local($tmp) = "segment$key";
+ $tmp = $ref_files{$tmp};
+ $body .= "\n<DT>$key<DD>".&make_named_href('',$tmp,$glossary_segment{$key});
+ }
+ $preglossary = join('', $head, $body, "\n</DL>") if ($body);
+}
+
+sub do_cmd_glossary { &do_real_glossary(@_) }
+sub do_real_glossary {
+ local($_) = @_;
+ local($type) = "main";
+ local($anchor,$entry);
+
+ local($type,$pat) = &get_next_optional_argument;
+
+ $entry = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($entry=$2));
+
+ $anchor = &make_glossary_entry($entry,$anchor_invisible_mark,$type);
+
+ join('', $anchor, $_);
+}
+
+sub make_glossary_entry { &make_real_glossary_entry(@_) }
+sub make_real_glossary_entry {
+ local($entry,$text,$type) = @_;
+ local($this_file) = $CURRENT_FILE;
+
+ $TITLE = $saved_title
+ if (($saved_title)&&(!($TITLE)||($TITLE eq $default_title)));
+
+ # Save the reference
+ local($str) = "$label###" . ++$global{'max_id'}; # Make unique
+
+ local($id) = ++$glsentry{$entry}{'maxid'};
+ local($glsanchor)="gls:$entry$id";
+
+ local($target) = $frame_body_name;
+
+ if (defined($frame_main_suffix))
+ {
+ $this_file=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ $glossary{$type}{$str} .= &make_half_href($this_file."#$glsanchor");
+ $glossary_format{$type}{$str} = $GLSCURRENTFORMAT;
+ $glossary_entry{$type}{$str} = $entry;
+ $glossary_linktext{$type}{$str} = $TITLE;
+
+ local($mark) = $gls_file_mark{$type};
+
+ $mark = &get_gls_file_mark($type, $entry) if (defined(&get_gls_file_mark));
+
+ $text = &translate_commands($text);
+
+ if (defined($frame_foot_name))
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\" TARGET=\"$frame_foot_name\">$text<\/A>";
+ }
+ else
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\">$text<\/A>";
+ }
+}
+
+sub make_real_glossary_entry_no_backlink {
+ local($entry,$text,$type) = @_;
+ local($this_file) = $CURRENT_FILE;
+
+ local($target) = $frame_body_name;
+
+ if (defined($frame_main_suffix))
+ {
+ $this_file=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ local($mark) = $gls_file_mark{$type};
+
+ $mark = &get_gls_file_mark($type, $entry) if (defined(&get_gls_file_mark));
+
+ $text = &translate_commands($text);
+
+ if (defined($frame_foot_name))
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\" TARGET=\"$frame_foot_name\">$text<\/A>";
+ }
+ else
+ {
+ "<A HREF=\"$mark#gls:$entry\" >$text<\/A>";
+ }
+}
+
+sub do_cmd_newglossary{
+ local($_) = @_;
+ local($type,$out,$in,$opt,$pat,$title);
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ $type = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($type=$2));
+ $in = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($in=$2));
+ $out = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($out=$2));
+ $title = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($title=$2));
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ &make_newglossarytype($type, $title);
+
+ $_;
+}
+
+sub make_newglossarytype{
+ local($type, $title) = @_;
+
+ $gls_mark{$type} = "<tex2html_gls_${type}_mark>";
+ $gls_file_mark{$type} = "<tex2html_gls_${type}_file_mark>";
+ $gls_title{$type} = $title;
+ $gls_toctitle{$type} = $title;
+ $delimN{$type} = ", ";
+ $glsnumformat{$type} = $GLSCURRENTFORMAT;
+ @{$gls_entries{$type}} = ();
+ $gls_displayfirst{$type} = "glsdisplayfirst";
+ $gls_display{$type} = "glsdisplay";
+ $gls_nonumberlist{$type} = $gls_nonumberlist{'main'};
+}
+
+sub do_cmd_glsdisplay{
+ local($_) = @_;
+ local($text,$description,$symbol,$insert);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $description = &missing_braces unless
+ (s/$next_pair_pr_rx/$description=$2;''/eo);
+
+ $symbol = &missing_braces unless
+ (s/$next_pair_pr_rx/$symbol=$2;''/eo);
+
+ $insert = &missing_braces unless
+ (s/$next_pair_pr_rx/$insert=$2;''/eo);
+
+ "$text$insert" . $_;
+}
+
+sub do_cmd_glsdisplayfirst{
+ local($_) = @_;
+ local($text,$description,$symbol,$insert);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $description = &missing_braces unless
+ (s/$next_pair_pr_rx/$description=$2;''/eo);
+
+ $symbol = &missing_braces unless
+ (s/$next_pair_pr_rx/$symbol=$2;''/eo);
+
+ $insert = &missing_braces unless
+ (s/$next_pair_pr_rx/$insert=$2;''/eo);
+
+ "$text$insert" . $_;
+}
+
+sub gls_get_displayfirst{
+ local($type) = @_;
+ local($display)= $gls_displayfirst{$type};
+
+ if (not defined($display))
+ {
+ &write_warnings("Glossary '$type' is not defined");
+ $display='';
+ }
+ elsif ($display eq '')
+ {
+ &write_warnings("glsdisplayfirst not set for glossary '$type'");
+ }
+ else
+ {
+ $display = "\\$display ";
+ }
+
+ $display;
+}
+
+sub gls_get_display{
+ local($type) = @_;
+ local($display)= $gls_display{$type};
+
+ if (not defined($display))
+ {
+ &write_warnings("Glossary '$type' is not defined");
+ $display = '';
+ }
+ elsif ($display eq '')
+ {
+ &write_warnings("glsdisplay not set for glossary '$type'");
+ }
+ else
+ {
+ $display = "\\$display ";
+ }
+
+ $display;
+}
+
+sub do_cmd_glsnamefont{
+ local($_) = @_;
+ local($text);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ "<B>$text</B>$_";
+}
+
+sub do_cmd_newacronym{
+ local($_) = @_;
+ local($label,$abbrev,$long,$opt);
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+ $abbrv = &missing_braces unless
+ (s/$next_pair_pr_rx/$abbrv=$2;''/eo);
+ $long = &missing_braces unless
+ (s/$next_pair_pr_rx/$long=$2;''/eo);
+
+ local($cmd) = "\\newglossaryentry";
+ local($id);
+ $id = ++$global{'max_id'};
+ $cmd .= "$OP$id$CP$label$OP$id$CP";
+ $id = ++$global{'max_id'};
+ local($entry) = "type=$OP$id$CP\\acronymtype$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "name=$OP$id$CP$abbrv$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "description=$OP$id$CP$long$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "text=$OP$id$CP$abbrv$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "first=$OP$id$CP$long ($abbrv)$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "plural=$OP$id$CP${abbrv}s$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "firstplural=$OP$id$CP${long}s (${abbrv}s)$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $cmd .= "$OP$id$CP$entry,$opt$OP$id$CP";
+
+ &translate_commands($cmd).$_;
+}
+
+sub gls_entry_init{
+ local($label, $type, $name, $desc) = @_;
+
+ %{$glsentry{$label}} =
+ ( type => $type,
+ name => $name,
+ 'sort' => $name,
+ description => $desc,
+ text => $name,
+ first => $name,
+ plural => "${name}s",
+ firstplural => "${name}s",
+ symbol => '',
+ flag => 0,
+ maxid => 0,
+ level => 0,
+ parent => ''
+ );
+
+ $#{@{$glsentry{$label}{children}}} = -1;
+
+ $glsentry{$label};
+}
+
+sub gls_get_type{
+ local($label) = @_;
+ local($type) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $type = $glsentry{$label}{'type'};
+ }
+ else
+ {
+ &write_warnings("gls_get_type: glossary entry '$label' has not been defined");
+ }
+
+ $type;
+}
+
+sub gls_set_type{
+ local($label, $type) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'type'} = $type;
+ }
+ else
+ {
+ &write_warnings("gls_set_type: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_name{
+ local($label) = @_;
+ local($name) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $name = $glsentry{$label}{'name'};
+ }
+ else
+ {
+ &write_warnings("gls_get_name: glossary entry '$label' has not been defined");
+ }
+
+ $name;
+}
+
+sub gls_set_name{
+ local($label, $name) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'name'} = $name;
+ }
+ else
+ {
+ &write_warnings("gls_set_name: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_description{
+ local($label) = @_;
+ local($description) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $description = $glsentry{$label}{'description'};
+ }
+ else
+ {
+ &write_warnings("gls_get_description: glossary entry '$label' has not been defined");
+ }
+
+ $description;
+}
+
+sub gls_set_description{
+ local($label, $description) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'description'} = $description;
+ }
+ else
+ {
+ &write_warnings("gls_set_description: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_symbol{
+ local($label) = @_;
+ local($symbol) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $symbol = $glsentry{$label}{'symbol'};
+ }
+ else
+ {
+ &write_warnings("gls_get_symbol: glossary entry '$label' has not been defined");
+ }
+
+ $symbol;
+}
+
+sub gls_set_symbol{
+ local($label, $symbol) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'symbol'} = $symbol;
+ }
+ else
+ {
+ &write_warnings("gls_set_symbol: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_sort{
+ local($label) = @_;
+ local($sort) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $sort = $glsentry{$label}{'sort'};
+ }
+ else
+ {
+ &write_warnings("gls_get_sort: glossary entry '$label' has not been defined");
+ }
+
+ $sort;
+}
+
+sub gls_set_sort{
+ local($label, $sort) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'sort'} = $sort;
+ }
+ else
+ {
+ &write_warnings("gls_set_sort: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_text{
+ local($label) = @_;
+ local($text) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $text = $glsentry{$label}{'text'};
+ }
+ else
+ {
+ &write_warnings("gls_get_text: glossary entry '$label' has not been defined");
+ }
+
+ $text;
+}
+
+sub gls_set_text{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'text'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_text: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_plural{
+ local($label) = @_;
+ local($plural) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $plural = $glsentry{$label}{'plural'};
+ }
+ else
+ {
+ &write_warnings("gls_get_plural: glossary entry '$label' has not been defined");
+ }
+
+ $plural;
+}
+
+sub gls_set_plural{
+ local($label, $plural) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'plural'} = $plural;
+ }
+ else
+ {
+ &write_warnings("gls_set_plural: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_firstplural{
+ local($label) = @_;
+ local($firstplural) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $firstplural = $glsentry{$label}{'firstplural'};
+ }
+ else
+ {
+ &write_warnings("gls_get_firstplural: glossary entry '$label' has not been defined");
+ }
+
+ $firstplural;
+}
+
+sub gls_set_firstplural{
+ local($label, $firstplural) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'firstplural'} = $firstplural;
+ }
+ else
+ {
+ &write_warnings("gls_set_firstplural: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_first{
+ local($label) = @_;
+ local($first) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $first = $glsentry{$label}{'first'};
+ }
+ else
+ {
+ &write_warnings("gls_get_first: glossary entry '$label' has not been defined");
+ }
+
+ $first;
+}
+
+sub gls_set_first{
+ local($label, $first) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'first'} = $first;
+ }
+ else
+ {
+ &write_warnings("gls_set_first: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_parent{
+ local($label) = @_;
+
+ local($parent);
+
+ if (&gls_entry_defined($label))
+ {
+ $parent = $glsentry{$label}{'parent'};
+ }
+ else
+ {
+ &write_warnings("gls_get_parent: glossary entry '$label' has not been defined");
+ }
+
+ $parent;
+}
+
+sub gls_get_level{
+ local($label) = @_;
+
+ local($level) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $level = $glsentry{$label}{'level'};
+ }
+ else
+ {
+ &write_warnings("gls_get_level: glossary entry '$label' has not been defined");
+ }
+
+ $level;
+}
+
+sub gls_set_parent{
+ local ($label, $parent) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ if ($parent)
+ {
+ if (&gls_entry_defined($parent))
+ {
+ $glsentry{$label}{'parent'} = $parent;
+
+ push @{$glsentry{$parent}{'children'}}, $label;
+
+ $glsentry{$label}{'level'} = $glsentry{$parent}{'level'}+1;
+ }
+ else
+ {
+ &write_warnings("gls_set_parent: parent '$parent' for glossary entry '$label' has not been defined");
+ }
+ }
+ else
+ {
+ $glsentry{$label}{'parent'} = '';
+ }
+ }
+ else
+ {
+ &write_warnings("gls_set_parent: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_childcount{
+ my($label) = @_;
+
+ my($count) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $count = scalar(@{$glsentry{$label}{'children'}});
+ }
+ else
+ {
+ &write_warnings("gls_get_childcount: glossary entry '$label' has not been defined");
+ }
+
+ $count;
+}
+
+sub gls_get_referenced_childcount{
+ my($label) = @_;
+
+ my($count) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $count = scalar(grep(($glsentry{$_}{'maxid'} > 0), @{$glsentry{$label}{'children'}}));
+ }
+ else
+ {
+ &write_warnings("gls_get_childcount: glossary entry '$label' has not been defined");
+ }
+
+ $count;
+}
+
+sub gls_set_userkeys{
+ local($label, @user) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ for (my $idx = 0; $idx < 6; $idx++)
+ {
+ $glsentry{$label}{"user".($idx+1)} = $user[$idx];
+ }
+ }
+ else
+ {
+ &write_warnings("gls_set_user: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_user{
+ local($label, $idx, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{"user$idx"} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_user: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useri{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user1'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useri: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_userii{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user2'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_userii: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useriii{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user3'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useriii: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useriv{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user4'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useriv: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_userv{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user5'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_userv: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_uservi{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user6'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_uservi: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_user{
+ local($label, $idx) = @_;
+ local($value) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $value = $glsentry{$label}{"user".$idx};
+ }
+ else
+ {
+ &write_warnings("gls_get_user[$idx]: glossary entry '$label' has not been defined");
+ }
+
+ $value;
+}
+
+sub gls_used{
+ local($label) = @_;
+ local($flag) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $flag = $glsentry{$label}{'flag'};
+ }
+ else
+ {
+ &write_warnings("gls_used: glossary entry '$label' has not been defined");
+ }
+
+ $flag;
+}
+
+sub gls_entry_defined{
+ local($label) = @_;
+
+ (%{$glsentry{$label}}) ? 1 : 0;
+}
+
+sub do_cmd_newglossaryentry{
+ local($_) = @_;
+ local($label,$name,$description,$symbol,$sort,$text,$first,
+ $plural,$firstplural,$type,$keyval,$parent,@user);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $keyval = &missing_braces unless
+ s/$next_pair_pr_rx/$keyval=$2;''/eo;
+
+ ($name,$keyval) = &get_keyval('name', $keyval);
+ ($description,$keyval) = &get_keyval('description', $keyval);
+ ($symbol,$keyval) = &get_keyval('symbol', $keyval);
+ ($sort,$keyval) = &get_keyval('sort', $keyval);
+ ($text,$keyval) = &get_keyval('text', $keyval);
+ ($first,$keyval) = &get_keyval('first', $keyval);
+ ($firstplural,$keyval) = &get_keyval('firstplural', $keyval);
+ ($plural,$keyval) = &get_keyval('plural', $keyval);
+ ($type,$keyval) = &get_keyval('type', $keyval);
+ ($parent,$keyval) = &get_keyval('parent', $keyval);
+
+ if ($parent and not $name)
+ {
+ $name = &gls_get_name($parent);
+ }
+
+ @user = ();
+
+ for (my $idx = 0; $idx < 6; $idx++)
+ {
+ ($user[$idx],$keyval) = &get_keyval("user".($idx+1), $keyval);
+ }
+
+ if (defined($type))
+ {
+ $type = &translate_commands($type);
+ }
+ else
+ {
+ $type = 'main';
+ }
+
+ &gls_entry_init($label, $type, $name, $description);
+
+ &gls_set_symbol($label, defined($symbol)?$symbol:'');
+
+ $sort = "$name $description" unless (defined($sort) and $sort);
+
+ &gls_set_sort($label, $sort);
+
+ $text = $name unless (defined($text) and $text);
+
+ &gls_set_text($label, $text);
+
+ $first = $text unless (defined($first) and $first);
+
+ &gls_set_first($label, $first);
+
+ $plural = "${text}s" unless (defined($plural) and $plural);
+
+ &gls_set_plural($label, $plural);
+
+ $firstplural = "${first}s" unless (defined($firstplural) and $firstplural);
+
+ &gls_set_firstplural($label, $firstplural);
+
+ &gls_set_userkeys($label, @user);
+
+ &gls_set_parent($label, $parent);
+
+ push @{$gls_entries{$type}}, $label;
+
+ $_;
+}
+
+sub reset_entry{
+ local($label) = @_;
+
+ $glsentry{$label}{'flag'} = 0;
+}
+
+sub unset_entry{
+ local($label) = @_;
+
+ $glsentry{$label}{'flag'} = 1;
+}
+
+sub do_cmd_glsreset{
+ local($_) = @_;
+ local($label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ &reset_entry($label);
+
+ $_;
+}
+
+sub do_cmd_glsunset{
+ local($_) = @_;
+ local($label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ &unset_entry($label);
+
+ $_;
+}
+
+sub do_cmd_ifglsused{
+ local($_) = @_;
+ local($label,$true,$false);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $true = &missing_braces unless
+ s/$next_pair_pr_rx/$true=$2;''/eo;
+
+ $false = &missing_braces unless
+ s/$next_pair_pr_rx/$false=$2;''/eo;
+
+ (&gls_used($label) ? $true : $false) . $_;
+}
+
+sub do_cmd_ifglsentryexists{
+ local($_) = @_;
+ local($label,$true,$false);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $true = &missing_braces unless
+ s/$next_pair_pr_rx/$true=$2;''/eo;
+
+ $false = &missing_braces unless
+ s/$next_pair_pr_rx/$false=$2;''/eo;
+
+ (&gls_entry_defined($label) ? $true : $false) . $_;
+}
+
+sub gls_add_entry{
+ local($type, $label, $format, $text) = @_;
+
+ local($oldfmt) = $GLSCURRENTFORMAT;
+
+ if (defined($format))
+ {
+ $format=~s/[\(\)]//;
+
+ if ($format)
+ {
+ $GLSCURRENTFORMAT=$format;
+ }
+ }
+
+ $id = ++$global{'max_id'};
+
+ local($str) = &make_real_glossary_entry($label,$text,$type);
+ $GLSCURRENTFORMAT = $oldfmt;
+
+ $str;
+}
+
+sub do_cmd_glsadd{
+ local($_) = @_;
+ local($optarg,$pat,$label,$str,$id,$type,$format);
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $type = &gls_get_type($label);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ if (defined $type)
+ {
+ ($format,$optarg) = &get_keyval('format', $optarg);
+ $format='' unless(defined($format));
+
+ if ($dobacklink)
+ {
+ &gls_add_entry($type,$label,$format,"");
+ }
+ else
+ {
+ $glsentry{$label}{'maxid'} = ++$glsentry{$entry}{'maxid'};
+ my $key = $label."###".$glsentry{$label}{'maxid'};
+ $glossary{$type}{$key}='';
+ }
+ }
+ else
+ {
+ &write_warnings("gls_add: glossary entry '$label' undefined");
+ $str = '';
+ }
+
+ $str . $_;
+}
+
+sub do_cmd_glsaddall{
+ local($_) = @_;
+ local($optarg,$pat) = &get_next_optional_argument;
+
+ local($format,$list);
+
+ ($list,$optarg) = &get_keyval('types', $optarg);
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $format='' unless(defined($format));
+
+ local(@types) = keys(%gls_mark);
+
+ if ($list)
+ {
+ @types = split /\s*,\s*/, $list;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leading and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ if ($dobacklink)
+ {
+ &gls_add_entry($type,$label,$format,"");
+ }
+ }
+ }
+
+ $_;
+}
+
+sub do_cmd_glsresetall{
+ local($_) = @_;
+ local($types,$pat) = &get_next_optional_argument;
+
+ local(@types) = keys(%gls_mark);
+
+ if (defined($types) and $types)
+ {
+ @types = split /,/, $types;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leasing and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ &reset_entry($label);
+ }
+ }
+
+ $_;
+}
+
+sub do_cmd_glsunsetall{
+ local($_) = @_;
+ local($types,$pat) = &get_next_optional_argument;
+
+ local(@types) = keys(%gls_mark);
+
+ if (defined($types) and $types)
+ {
+ @types = split /,/, $types;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leasing and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ &reset_entry($label);
+ }
+ }
+
+ $_;
+}
+
+$glslabel = '';
+
+sub do_cmd_glslabel{ $glslabel.$_[0] }
+
+sub make_glslink{
+ local($type,$label,$format,$text) = @_;
+ local($str) = '';
+
+ $glslabel = $label;
+
+ if (defined $type)
+ {
+ $str = &gls_add_entry($type,$label,$format,$text);
+ }
+ else
+ {
+ &write_warnings("glossary '$type' undefined");
+ }
+
+ $str;
+}
+
+sub do_cmd_glslink{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ # v1.01 removed following lines (\glslink doesn't have
+ # a final optional argument!
+ #local ($space) = '';
+ #if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+ #($optarg,$pat) = &get_next_optional_argument;
+
+ $type = &gls_get_type($label);
+
+ #&make_glslink($type, $label, $format, $text).$space . $_;
+ &make_glslink($type, $label, $format, $text) . $_;
+}
+
+sub do_cmd_glslinkstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $type = &gls_get_type($label);
+
+ $text . $_;
+}
+
+sub do_cmd_glsdisp{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ $type = &gls_get_type($label);
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $text, $type). $space . $_;
+ }
+}
+
+sub do_cmd_glshyperlink{
+ local($_) = @_;
+
+ local($text,$pat) = &get_next_optional_argument;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $text = &gls_get_text($label) unless $text;
+
+ local($type) = &gls_get_type($label);
+
+ "<A HREF=\"$gls_file_mark{$type}#gls:$label\">$text<\/A>"
+ .$_;
+}
+
+sub do_cmd_glsentrydesc{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_description($label).$_;
+}
+
+sub do_cmd_Glsentrydesc{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_description($label)).$_;
+}
+
+sub do_cmd_glsentrytext{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_text($label).$_;
+}
+
+sub do_cmd_Glsentrytext{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_text($label)).$_;
+}
+
+sub do_cmd_glsentryname{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_name($label).$_;
+}
+
+sub do_cmd_Glsentryname{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_name($label)).$_;
+}
+
+sub do_cmd_glsentryfirst{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_first($label).$_;
+}
+
+sub do_cmd_Glsentryfirst{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_first($label)).$_;
+}
+
+sub do_cmd_glsentryplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_plural($label).$_;
+}
+
+sub do_cmd_Glsentryplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_plural($label)).$_;
+}
+
+sub do_cmd_glsentryfirstplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local($text)=$glsentry{$label}{'firstplural'};
+
+ unless (defined($text))
+ {
+ &write_warnings("glossary entry '$label' has not been defined");
+ $text = '';
+ }
+
+ "$text$_";
+ &gls_get_firstplural($label).$_;
+}
+
+sub do_cmd_Glsentryfirstplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_firstplural($label)).$_;
+}
+
+sub do_cmd_glsentrysymbol{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_symbol($label).$_;
+}
+
+sub do_cmd_Glsentrysymbol{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_symbol($label)).$_;
+}
+
+sub do_cmd_glsentryuseri{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 1).$_;
+}
+
+sub do_cmd_glsentryuserii{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 2).$_;
+}
+
+sub do_cmd_glsentryuseriii{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 3).$_;
+}
+
+sub do_cmd_glsentryuseriv{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 4).$_;
+}
+
+sub do_cmd_glsentryuserv{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 5).$_;
+}
+
+sub do_cmd_glsentryuservi{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 6).$_;
+}
+
+sub do_cmd_gls{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_glsstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ $link_text . $space . $_;
+}
+
+sub do_cmd_glspl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_glsplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ $link_text . $space . $_;
+}
+
+sub do_cmd_Gls{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &do_real_makefirstuc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_Glsstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ &do_real_makefirstuc($link_text). $space . $_;
+}
+
+sub do_cmd_Glspl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &do_real_makefirstuc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_Glsplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ &do_real_makefirstuc($link_text).$space . $_;
+}
+
+sub do_cmd_GLS{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = uc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_GLSstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ uc($link_text).$space . $_;
+}
+
+sub do_cmd_GLSpl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = uc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_GLSplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ uc($link_text).$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glstext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glstext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLStext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glssymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glssymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSsymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+sub do_cmd_glsuseri{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 1);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseri{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 1));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuserii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 2);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuserii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 2));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuseriii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 3);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseriii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 3));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuseriv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 4);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseriv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 4));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuserv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 5);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuserv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 5));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuservi{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 6);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuservi{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 6));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_acrshort{
+ &do_cmd_glstext(@_)
+}
+
+sub do_cmd_Acrshort{
+ &do_cmd_Glstext(@_)
+}
+
+sub do_cmd_ACRshort{
+ &do_cmd_GLStext(@_)
+}
+
+sub do_cmd_acrlong{
+ &do_cmd_glsdesc(@_)
+}
+
+sub do_cmd_Acrlong{
+ &do_cmd_Glsdesc(@_)
+}
+
+sub do_cmd_ACRlong{
+ &do_cmd_GLSdesc(@_)
+}
+
+sub do_cmd_acrfull{
+ &do_cmd_glsfirst(@_)
+}
+
+sub do_cmd_Acrfull{
+ &do_cmd_Glsfirst(@_)
+}
+
+sub do_cmd_ACRfull{
+ &do_cmd_GLSfirst(@_)
+}
+
+sub do_cmd_glossarypreamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glossarypostamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glsnumformat{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_hyperit{
+ join('', "\\textit ", $_[0]);
+}
+
+sub do_cmd_hyperrm{
+ join('', "\\textrm ", $_[0]);
+}
+
+sub do_cmd_hypertt{
+ join('', "\\texttt ", $_[0]);
+}
+
+sub do_cmd_hypersf{
+ join('', "\\textsf ", $_[0]);
+}
+
+sub do_cmd_hyperbf{
+ join('', "\\textbf ", $_[0]);
+}
+
+&ignore_commands( <<_IGNORED_CMDS_ );
+makeglossary
+makeglossaries
+glossaryentrynumbers # {}
+_IGNORED_CMDS_
+
+1;
diff --git a/Master/texmf-dist/scripts/glossaries/makeglossaries b/Master/texmf-dist/scripts/glossaries/makeglossaries
index 19a61c9b5d0..3d053fc9553 100755
--- a/Master/texmf-dist/scripts/glossaries/makeglossaries
+++ b/Master/texmf-dist/scripts/glossaries/makeglossaries
@@ -27,9 +27,11 @@
# glossary-super.sty, glossaries.perl.
# Also makeglossaries and makeglossaries.
-my $version="2.04 (2012-05-19)";
+my $version="2.05 (2012-11-12)";
# History:
+# v2.05 (2012-11-12):
+# * added -d option
# v2.04 (2012-04-19):
# * fixed bug in &scan_aux
# v2.03 (2011-04-12):
@@ -76,8 +78,9 @@ use Getopt::Std;
use strict;
# v2.01 added the following line
use warnings;
+# v2.05 added $opt_d
use vars qw($opt_q $opt_t $opt_o $opt_s $opt_p $opt_g $opt_c $opt_r
- $opt_l $opt_i $opt_L $opt_n $opt_C);
+ $opt_l $opt_i $opt_L $opt_n $opt_C $opt_d);
$Getopt::Std::STANDARD_HELP_VERSION = 1;
@@ -86,7 +89,7 @@ $Getopt::Std::STANDARD_HELP_VERSION = 1;
# .tex file)
# v1.5 added -n (print the command that would be issued but
# don't actually run the command)
-getopts('s:o:t:p:L:C:ilqrcgn');
+getopts('s:o:t:p:L:C:ilqrcgnd:');
unless ($#ARGV == 0)
{
@@ -97,6 +100,9 @@ unless ($#ARGV == 0)
# v2.02: added:
print "makeglossaries version $version\n" unless ($opt_q);
+# v2.05 added:
+chdir $opt_d if ($opt_d);
+
# v2.02: added:
my $xdynotist = 1;
my $needcompatibilitymode=2;
@@ -941,8 +947,9 @@ sub HELP_MESSAGE{
print "-q\t\tQuiet mode\n";
print "-s <sty>\tEmploy <sty> as the style file\n";
print "-t <log>\tEmploy <log> as the transcript file\n";
- print "-n\tPrint the command that would normally be executed,\n",
- "\tbut don't execute it\n";
+ print "-d <directory>\tRun xindy/makeindex in <directory>\n";
+ print "-n\t\tPrint the command that would normally be executed,\n",
+ "\t\tbut don't execute it\n";
print "\n Xindy Options:\n";
print "-L <language>\tUse <language>.\n";
diff --git a/Master/texmf-dist/scripts/glossaries/makeglossaries.bat b/Master/texmf-dist/scripts/glossaries/makeglossaries.bat
index 64a6a20750c..d91f67bd3e9 100755
--- a/Master/texmf-dist/scripts/glossaries/makeglossaries.bat
+++ b/Master/texmf-dist/scripts/glossaries/makeglossaries.bat
@@ -1,3 +1,3 @@
-@rem = '-*- Perl -*-
-@echo off
-perl -S "%~dp0makeglossaries" %*
+@rem = '-*- Perl -*-
+@echo off
+perl -S "%~dp0makeglossaries" %*
diff --git a/Master/texmf-dist/scripts/glossaries/mfirstuc.perl b/Master/texmf-dist/scripts/glossaries/mfirstuc.perl
new file mode 100644
index 00000000000..7ab863d06f4
--- /dev/null
+++ b/Master/texmf-dist/scripts/glossaries/mfirstuc.perl
@@ -0,0 +1,129 @@
+# File : mfirstuc.perl
+# Author : Nicola L. C. Talbot
+# Date : 2012-09-21
+# Version : 1.0
+# Description : LaTeX2HTML (limited!) implementation of mfirstuc package
+
+# This is a LaTeX2HTML style implementing the mfirstuc package, and
+# is distributed as part of the glossaries package.
+# Copyright 2007 Nicola L.C. Talbot
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license of (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Nicola Talbot.
+
+use warnings;
+
+package main;
+
+sub do_cmd_makefirstuc{
+ local($_) = @_;
+
+ local($id,$text);
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ &translate_commands("\\glsmakefirstuc $text") . $_;
+}
+
+sub do_cmd_xmakefirstuc{
+ local($_) = @_;
+
+ local($id,$text);
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ unless ($id)
+ {
+ $id = ++$global{'max_id'};
+ }
+
+ &translate_commands("\\expandafter \\makefirstuc $OP$id$CP$text$OP$id$CP")
+ . $_;
+}
+
+sub do_cmd_glsmakefirstuc{
+ local($_) = @_;
+
+ local($id,$text);
+
+ $text = &get_next_object unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ &do_real_makefirstuc($text).$_;
+}
+
+sub do_real_makefirstuc{
+ local($text) = @_;
+
+ if ($text=~/^((?:\s*<[^>]+>\s*)+)(.*)/)
+ {
+ $text = $1 . ucfirst($2);
+ }
+ else
+ {
+ $text = ucfirst($text);
+ }
+
+ $text;
+}
+
+sub do_cmd_capitalisewords{
+ local($_) = @_;
+
+ local($id,$text);
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ local($newtext) = '';
+
+ foreach my $word (split ' ', $text)
+ {
+ $id = ++$global{'max_id'};
+
+ $word = &translate_commands("\\makefirstuc $OP$id$CP$word$OP$id$CP");
+
+ if ($newtext)
+ {
+ $newtext .= ' ' . $word;
+ }
+ else
+ {
+ $newtext = $word;
+ }
+ }
+
+ $newtext.$_;
+}
+
+sub get_next_object{
+ local($next, $revert, $thisline);
+ local($this_cmd) = $cmd;
+ $this_cmd =~ s/^\\// unless ($cmd eq "\\");
+ if (/^[\s%]*([^\n]*)\n/ ) {
+ $thisline = &revert_to_raw_tex($1)
+ } else {
+ $thisline = &revert_to_raw_tex($_);
+ }
+ s/^\s*//;
+ if ($_ =~ s/$next_token_rx//) { $next = $& };
+ $next =~ s/$comment_mark(\d+\n?)?//g;
+ if ($next =~ /^\\(\W|\d|[a-zA-z]*\b)/) {
+ $revert = $next = "\\".$1;
+ } elsif ($next =~ /\W/) {
+ $revert = &revert_to_raw_tex($next);
+ } else { $revert = $next };
+ $next;
+}
+
+1;