The version of cabal distributed with Ubuntu 10.10 is too old to handle
executables that refer to the library in the same package, so to not make it
too complicated for Ubuntu users to compile GF from source, pgf-http is no
longer part of the main gf.cabal. :-(
The grammars will then by default be fetched from the same server as
minibar.html. This means that everything will be served locally when accessing
minibar through a locally running pgf-http.
Along with the changes to Setup.hs it should now be enough to do
cabal install
pgf-http
open http://localhost:41296/
to run the PGF service locally and play with some example grammars in minibar.
Instead of just giving an explicit list of languages to compile, you can
now also add and remove languages from the default list by using langs=+...
or langs=-...
Examples:
cabal build langs=Eng,Swe,Ger -- as before, compile the given 3 langs
cabal build langs=-Fin -- use default languages, but omit Fin
cabal build langs=+Urd -- use default languages + Urd
("cabal build ..." is the same as "runhaskell Setup.hs build ...")
* The gf command line options -preproc=mkPresent and -preproc=mkMinimal now
refer to internal preprocessors equivalent to lib/src/mkPresent
and lib/src/mkMinimal.
* The temporary file _gf_preproc.tmp is not created when running an
internal preprocessor, unless there is an error, since errors messages
refer to locations in the preprocessed file. (Possibly allowing the rgl
build to be parallelized.)
* After running an external preprocessor, the temporary file is deleted,
unless there was an error.
* (Bug fix) Before, when running more than one preprocessor, the same file name
would be used for both input and output, e.g.,
mkPresent _gf_preproc.tmp > _gf_preproc.tmp
which would result in an empty file being processed. Now, the input and
output files will always be different.
The dependency on the fastcgi package made pgf-server difficult to compile, so
it is now split into
- pgf-fgci (main module in pgf-fcgi.hs), which is built only if fastcgi is
already installed or if you turn on the fastcgi flag (e.g. by doing
'cabal install -f fastcgi').
- pgf-http (main module in pgf-http.hs) which is always built (and hopefully
has no problematic dependencies.)
The modules FastCGIUtils and PGFService no longer depend on fastcgi.
+ PGFService.hs: add Nothing arguments in calls to PGF.parse_ and
PGF.getPArseOutput
+ gf-server.cabal: mark content-server as not buildable, since required source
files are missing.
* Keyboard input and completion should now work much more smoothly:
+ When you press space, the current word will be completed (if incomplete)
and a new magnet will be created. If there is more than one possible
completion, no magnet is created, but the common prefix of the possible
completions is added to the text box.
+ Instead of asking the server for possible completions every time a new
letter is added to the curent word, minibar only ask for completions for
whole words and then filters the list locally when more letters are entered,
speeding things up when server responses are slow.
* Code restructuring:
+ The PGF server API has been moved to its own file: pgf_online.js. This
allows it to be reused in other applicaitons without importing the entire
minibar. It also allows minibar to be used with different server interfaces.
+ The minibar code has been rewritten to avoid storing state information
in the document tree and accessing it by referring to named document
elements. The code now also avoids using string literals contaning
the names of top-level functions to specify event handlers for buttons
and menus. (The code is no longer introspective, so alpha conversion will
not change its meaning.)
+ ajax_http_get(url,callback) now checks the HTTP response status and shows an
error message if the status is not OK (is not 200)
+ New function node(tag,attrs,children) to create document nodes with arbitraty
attributes and children. The functions node() and text() should now be enough
to construct arbitrary document trees in an easy, functional way, and many of
the more specialized functions could be removed.
+ When calling the function button(label,action,key), the action can be a
function instead of a string, so you can use local/anonymous functions.
+ New function debug(str) adds text to the element with id=debug, if it
exists.
Added a meta tag to specify that the file is in UTF-8. This makes the browser
(at least Firefox) assume that the JavaScript files are also in UTF-8, it seems.
Moved the call to start_minibar() from the <body onload="..."> to the end of
the file. The onload action is not executed until all images in the document
has been loaded, while javascipt at the end of the file is executed as soon
as the HTML file has been loaded. (Calling start_minibar() from the head of
the document would be too soon, since it refers to elements in the body,
which hasn't been loaded yet.)
When pfg-server servers a static file in HTTP mode, it is output as is, so
specifying charset="iso-8859-1" could be wrong.
Note: the a charset can be specified with a meta tag in HTML files,
e.g. for files in UTF-8:
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
Using AJAX instead of JSONP can give better caching in the browser, since the
URL doesn't need to contain a (dynamically generated) callback function name.
But because of the same origin policy in JavaScript, AJAX can only be used when
the HTML file is served from the same server as the PGF. The new function
http_get_json in support.js uses AJAX if this is the case, and falls back to
JSONP otherwise.
pgf-server can now act as a standalone HTTP server. To activate this mode,
start it with
pfg-server http
to use the default port number (41296), or give an explicit port number, e.g.,
pgf-server http 8080
The HTTP server serves PGF files in the same way as the old FastCGI interface.
In addition, it also serves static files. The document root for static files
is the www subdirectory of the current directory where pgf-server is started.
In spite of these addition, backwards compatibility is maintaned. The old
FastCGI interface continues to work as before. (It is activated when
pgf-server is started without arguments.)
* Add help button at top of page.
* Change style of word buttons to look like fridge magnets again.
* New options to specify locations of other pages: feedback_url, help_url. If
they are left undefined, no Help/Feedback buttons will be created.
* Shorter test in Google Translate button.
1. The text input field is shown form the start, no need to click.
2. The text input field is removed when no more words can be added to the
sentence.
3. When you press Enter, a word is added to the sentence (1) if there is only
one possible completion left (e.g. if you typed "airp" and the only
completion is "airport"), or (2) if what you typed exactly matches one
of the completions (e.g. if you typed "the" and the completions are
"the", "theatre" and "these").
I assume checking for base>=4.2 is a good way to test for the presence of the
new Unicode-aware I/O libraries (first shipped with GHC 6.12) that GF now
relies on.