--- a/src/qtgui/plaintorich.h
+++ b/src/qtgui/plaintorich.h
@@ -16,42 +16,65 @@
  */
 #ifndef _PLAINTORICH_H_INCLUDED_
 #define _PLAINTORICH_H_INCLUDED_
-/* @(#$Id: plaintorich.h,v 1.16 2007-11-15 18:05:32 dockes Exp $  (C) 2004 J.F.Dockes */
+/* @(#$Id: plaintorich.h,v 1.17 2008-07-01 08:27:58 dockes Exp $  (C) 2004 J.F.Dockes */
 
 #include <string>
 #include <list>
 using std::list;
 using std::string;
 
-// A data struct to hold words and groups of words to be highlighted
+/// Holder for plaintorich() input data: words and groups of words to
+/// be highlighted
 struct HiliteData {
+    // Single terms
     vector<string> terms;
+    // NEAR and PHRASE elements
     vector<vector<string> > groups;
-    vector<int> gslks; // group slacks (number of permitted non-matched words)
+    // Group slacks (number of permitted non-matched words). 
+    // Parallel vector to the above 'groups'
+    vector<int> gslks; 
 };
 
-/**
- * Transform plain text into qt rich text for the preview window.
- *
- * We escape characters like < or &, and add qt rich text tags to 
- * colorize the query terms. The latter is a quite complicated matter because
- * of phrase/near searches. We treat all such searches as "near", not "phrase"
- * 
- * @param in          raw text out of internfile.
- * @param out         rich text output, divided in chunks (to help our caller
- *          avoid inserting half tags into textedit which doesnt like it)
- * @param hdata       terms and groups to be highlighted. These are
- *                     lowercase and unaccented.
- * @param noHeader    if true don't output header (<qt><title>...)
- * @param needBeacons Need to navigate highlighted terms, mark them,return last
+/** 
+ * A class for highlighting search results. Overridable methods allow
+ * for different styles
  */
-extern bool plaintorich(const string &in, list<string> &out,
-			const HiliteData& hdata,
-			bool noHeader,
-			int  *needBeacons,
-			int chunksize = 50000
-			);
+class PlainToRich {
+public:
+    static const string snull;
+    virtual ~PlainToRich() {}
+    /**
+     * Transform plain text for highlighting search terms, ie in the
+     * preview window or result list entries.
+     *
+     * The actual tags used for highlighting and anchoring are
+     * determined by deriving from this class which handles the searching for
+     * terms and groups, but there is an assumption that the output will be
+     * html-like: we escape characters like < or &
+     * 
+     * Finding the search terms is relatively complicated because of
+     * phrase/near searches, which need group highlights. As a matter
+     * of simplification, we handle "phrase" as "near", not filtering
+     * on word order.
+     *
+     * @param in    raw text out of internfile.
+     * @param out   rich text output, divided in chunks (to help our caller
+     *   avoid inserting half tags into textedit which doesnt like it)
+     * @param hdata terms and groups to be highlighted. These are
+     *   lowercase and unaccented.
+     * @param chunksize max size of chunks in output list
+     */
+    virtual bool plaintorich(const string &in, list<string> &out,
+			     const HiliteData& hdata,
+			     int chunksize = 50000
+			     );
 
-extern string termAnchorName(int i);
+    /* Methods to ouput headers, highlighting and marking tags */
+    virtual string header() {return snull;}
+    virtual string startMatch() {return snull;}
+    virtual string endMatch() {return snull;}
+    virtual string startAnchor(int) {return snull;}
+    virtual string endAnchor() {return snull;}
+};
 
 #endif /* _PLAINTORICH_H_INCLUDED_ */