... forgot the attachment.
-- 
()  ascii ribbon campaign - against html e-mail
/\  www.asciiribbon.org   - against proprietary attachments
--
--------------------------------------------------------------------------------
--         FILE:  glossarium.lua
--        USAGE:  ConTeXt MkIV only
--  DESCRIPTION:  ad-hoc glossary
--       AUTHOR:  Philipp Gesang (Phg), <megas.kapan...@gmail.com>
--      VERSION:  1.0
--      CREATED:  04/05/10 13:00:54 CEST
--     REVISION:  1
--------------------------------------------------------------------------------
--

gloss = {}
gloss.tracker, gloss.content = {}, {}

function gloss.warn( text )
    context.message( "== GLOSSARY: " .. text )
end

function gloss.newgloss( keyword, entry )
    if gloss.content[keyword] then
        gloss.warn( "Entry for " .. keyword .. " exists. Skipping." )
    else
        gloss.content[keyword] = entry
    end
end

function gloss.usegloss( keyword, explained_here)
    if gloss.content[keyword] then
        local indstring = "glossind:" .. keyword
        if explained_here ~= "" and
           not gloss.tracker[keyword] then
            local refstring = "gloss:" .. keyword
            context.reference({ refstring }, "")
            gloss.tracker[keyword] = true
        end
        context.goto(keyword, {indstring})
    else
        gloss.warn( "No entry for " .. keyword .. ". Skipping." )
    end
end

function gloss.place_glossary ()
    -- get all keywords and sort them
    local sort_me = {}
    for key, _ in pairs(gloss.content) do
        table.insert(sort_me, key)
    end
    table.sort(sort_me)

    -- pretty print them somehow
    for _, keyword in ipairs(sort_me) do
        local refstring = "gloss:"    .. keyword
        local indstring = "glossind:" .. keyword
        context.noindentation()
        context.reference({ indstring }, "")
        context.bgroup() 
            context.bf()
            --context.goto( keyword, { refstring } )
            context(keyword)
        context.egroup()

        -- leave some space before entry
        context.hskip1em()
        context(gloss.content[keyword])

        context.unskip()
        context(", (")
        context.at( "v.s. on p.", { refstring } )
        context(").")

        context.par()
    end
end


        

\setupinteraction[state=start]

\ctxlua{dofile("glossarium.lua")}

% Use \gloss#1#2 somewhere before \starttext, in a secondary file if you like.
% #1: gloss reference key (used as index)
% #2: the entry (explanation)
\def\gloss#1#2{%
  \ctxlua{gloss.newgloss("#1", "\luaescapestring{#2}")}
}

\def\dousegloss[#1]#2{%
  \ctxlua{gloss.usegloss("#2", "#1")}%
}

% Use this in your text to create a reference to the glossary.
% #1: optional, If this is the main passage where you explain the entry in detail, 
%     the glossary will link back here. (Just make it non-empty.)
% #2: the gloss key
\unexpanded\def\usegloss{\dosingleempty\dousegloss}


% This is meant to create the glossary after the text:
% The gloss key is typeset in bold face and will reference the point in the
% main text where \usegloss was called with a nonempty first arg.
\def\placeglossary{\ctxlua{gloss.place_glossary()}}

\starttext

\gloss{glossary}{%
  A collection of glosses; a list with explanations of abstruse,
  antiquated, dialectal, or technical terms; a partial dictionary. (As defined by
  M.~Saunders)%
}

\gloss{index}{%
  An index (plural: indexes) is a list of words or phrases ('headings') and
  associated pointers ('locators') to where useful material relating to that
  heading can be found in a document.
  (As def'ed by the English Wikipedia)
}

test \usegloss{glossary} test.
\page
Here \usegloss{index} just occurs.
\page
The glossary entry \usegloss[exp]{index} is explained here.
\page
Here \usegloss{index} just occurs again.
\footnote{Here \usegloss{index} just occurs again.}
\page
Here we'll deal with \usegloss[exp]{glossary} in detail.
\page
Here \usegloss{index} just occurs again.
\page
Here \usegloss{index} just occurs again.
\page
Here we mention \usegloss{glossary}.
\page
Here \usegloss{index} just occurs again.
\page

\placeglossary



\stoptext

Attachment: pgpL0Mg1DKcQ3.pgp
Description: PGP signature

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to