Commit Graph
100 Commits
Author SHA1 Message Date
hallgren 4e1df7eb59 testsuite: fix test of generate_trees
There were two differences between the current output and the old gold file: 

  1. The trees are no longer generated with increasing depth
  2. The meaning of the -depth flag has changed: for example, 
     "gt -cat=Nat -depth=1" used to generate only "zero",
     now you also get "succ zero".
2013-12-10 16:49:40 +00:00
hallgren 4280c885dd testsuite: reduced the number of failing tests from 25 to 13
Some tests may fail on Windows because of \ instead of / in paths.
2013-12-06 16:01:13 +00:00
hallgren 41827b1aab Show relative file paths in error messages
This is to avoid one trivial reason for failures in the test suite.
2013-12-06 15:43:34 +00:00
hallgren 0d047707fc GF.Compile.CheckGrammar: add source path to error message for circular definitions 2013-12-06 13:46:59 +00:00
hallgren e6096bffc5 GF shell: fix help text for generate_trees
Trees are not generated with increasing depth.
2013-12-06 13:45:12 +00:00
hallgren dd78657191 testsuite: Use Cabal's new test suite interface
* The old way: a user hook in Setup.hs
  * The new way: specify it in gf.cabal
  * The test suite is now called gf-tests, and it runs testsuite/run.hs.
  * You can run it manually with 'runhaskell testsuite/run.hs'. It also runs,
    together with rgl-tests, when you do 'cabal test'
  * Currently only 9 of 34 tests pass. Many failures have silly causes:
    - Error messages that look slightly different
    - Same output but in a different order
    - Absolute paths in output
2013-12-03 17:13:39 +00:00
hallgren 9118f72fda testsuite: use forward slashes in paths 2013-12-03 16:59:33 +00:00
hallgren 25b3d5adc0 examples/phrasebook/Makefile2: Romanian needs a larger stack 2013-11-29 17:34:09 +00:00
hallgren 7934c0a88b Commment code and options relating to the old partial evaluator
This means that the -old-comp and -new-comp flags are not recognized anymore.

The only functional difference is that printnames were still normalized with
the old partial evaluator. Now that is done with the new partial evaluator.
2013-11-29 16:26:49 +00:00
hallgren ac16928d87 Minor release/download/developer doc changes 2013-11-29 16:04:52 +00:00
hallgren 537caca039 Move typePredefined from GF.Compile.Compute.AppPredefined to GF.Compile.TypeCheck.Primitives
Also move the list of primitives
2013-11-29 15:47:26 +00:00
hallgren 6f590a3f2c Move checkPredefError from GF.Compile.Compute.ConcreteLazy to GF.Grammar.Macros
Also simplified its type.
2013-11-29 14:43:01 +00:00
hallgren 134f6a200f examples/foods: remove all -path flags
All languages n the Foods grammar compile fine with alltenses.
2013-11-29 13:03:19 +00:00
hallgren dcf07aaad6 GFI: adapt to character encoding changes
GF.Compile.Coding is not used any more.
2013-11-28 13:55:08 +00:00
hallgren 4ef30ca450 SimpleEditor.Convert: adapt to recent character encoding changes
Things got simpler!
2013-11-28 13:27:45 +00:00
hallgren 7215991e9b Adding an alternate style for the GF home page 2013-11-27 15:32:25 +00:00
hallgren a617e50d95 Represent identifiers as UTF-8-encoded ByteStrings
This was a fairly simple change thanks to previous work on making the Ident
type abstract and the fact that PGF.CId already uses UTF-8-encoded
ByteStrings.

One potential pitfall is that Data.ByteString.UTF8 uses the same type for
ByteStrings as Data.ByteString. I renamed ident2bs to ident2utf8 and
bsCId to utf8CId, to make it clearer that they work with UTF-8-encoded
ByteStrings.

Since both the compiler input and identifiers are now UTF-8-encoded
ByteStrings, the lexer now creates identifiers without copying any characters.
**END OF DESCRIPTION***

Place the long patch description above the ***END OF DESCRIPTION*** marker.
The first line of this file will be the patch name.


This patch contains the following changes:

M ./src/compiler/GF/Compile/CheckGrammar.hs -3 +3
M ./src/compiler/GF/Compile/GrammarToPGF.hs -2 +2
M ./src/compiler/GF/Grammar/Binary.hs -5 +1
M ./src/compiler/GF/Grammar/Lexer.x -11 +13
M ./src/compiler/GF/Infra/Ident.hs -19 +36
M ./src/runtime/haskell/PGF.hs -1 +1
M ./src/runtime/haskell/PGF/CId.hs -2 +3
2013-11-26 16:12:03 +00:00
hallgren 30fc46e934 Change how GF deals with character encodings in grammar files
1. The default encoding is changed from Latin-1 to UTF-8.

2. Alternate encodings should be specified as "--# -coding=enc", the old
   "flags coding=enc" declarations have no effect but are still checked for
   consistency.

3. A transitional warning is generated for files that contain non-ASCII
   characters without specifying a character encoding:

	"Warning: default encoding has changed from Latin-1 to UTF-8"

4. Conversion to Unicode is now done *before* lexing. This makes it possible
   to allow arbitrary Unicode characters in identifiers. But identifiers are
   still stored as ByteStrings, so they are limited to Latin-1 characters
   for now.

5. Lexer.hs is no longer part of the repository. We now generate the lexer
   from Lexer.x with alex>=3. Some workarounds for bugs in alex-3.0 were
   needed. These bugs might already be fixed in newer versions of alex, but
   we should be compatible with what is shipped in the Haskell Platform.
2013-11-25 21:12:11 +00:00
hallgren 1ae58146cd examples/phrasebook: add Makefile2 for parallel grammar compilation
Makefile2 specificies the dependencies accurately enough that you can use
make's support for parallel compilation. Run

	make -f Makefile2 -j

to utilize all the cores in your computer to significantly speed up the
creation of Phrasebook.pgf.
2013-11-26 16:32:38 +00:00
hallgren d55a3f9d6e examples/letter: convert grammar files to UTF-8 2013-11-26 12:52:05 +00:00
hallgren 1735dcf055 GF home page: mention upcoming default character encoding change 2013-11-25 20:11:11 +00:00
hallgren 06ed4cc263 Setup.hs: avoid a problem with Cabal-1.18
In Cabal-1.18, the build command takes some new arguments. The Setup.hs script
should not die if these are present.
2013-11-25 20:03:57 +00:00
hallgren 7d54466310 Document the upcoming default character encoding change in the release notes 2013-11-25 19:47:05 +00:00
hallgren fc2f5b0a1a Add explicit character encoding specifications in 39 more RGL modules
To silence warnings and avoid potential problems after changing the default
encoding to UTF-8.
2013-11-25 18:17:12 +00:00
hallgren b237996eb3 examples/phrasebook: adding --# -coding=latin1 to 18 modules
Adding coding pragmas
  
	--# -coding=latin1
    
so that grammars will continue to work when we change the default character
encoding to UTF-8.
2013-11-22 17:47:50 +00:00
hallgren a24d8a9506 lib/src: adding --# -coding=latin1 to 119 RGL modules
Adding coding pragmas
  
	--# -coding=latin1
  
so that grammars will continue to work when we change the default character
encoding to UTF-8.
2013-11-22 17:26:00 +00:00
hallgren 1272015873 examples/foods: add --# -coding=latin1
Adding coding pragmas

	--# -coding=latin1

so that grammars will continue to work when we change the default character
encoding to UTF-8.
2013-11-22 17:21:36 +00:00
hallgren 14bbbf1f27 Some refactoring in GF.Compile and GF.Compile.GetGrammar
Move source transcoding function GF.Compile to GF.Compile.GetGrammar, in
preparation for doing transcoding before lexing.
2013-11-21 16:27:26 +00:00
hallgren c8d2ed96fd Some more monadic lifting changes 2013-11-21 15:01:04 +00:00
hallgren ab8037c3c6 Removed some code duplication in GF.Compile.Update 2013-11-20 01:26:41 +00:00
hallgren c8cbd4477f Reduced clutter in monadic code
+ Eliminated vairous ad-hoc coersion functions between specific monads 
  (IO, Err, IOE, Check) in favor of more general lifting functions
  (liftIO, liftErr).
+ Generalized many basic monadic operations from specific monads to
  arbitrary monads in the appropriate class (MonadIO and/or ErrorMonad),
  thereby completely eliminating the need for lifting functions in lots
  of places.

This can be considered a small step forward towards a cleaner
compiler API and more malleable compiler code in general.
2013-11-20 00:45:33 +00:00
hallgren c29326d074 GF shell: improved system_pipe (aka "?") command
1. No temporary files are created.

2. The output of a system command is read lazily, making it feasible to 
   process large or even infinite output, e.g. the following works as
   expected:

	? "yes" | ? "head -5" | ps -lextext
2013-11-19 15:18:58 +00:00
hallgren ec82c3af9a gfse: re-enable example-based grammar construction 2013-11-14 12:54:25 +00:00
hallgren 4a5b9ca8cb Fix Issue 60: Weird output when executing system commands from the gf shell
The system_pipe (aka "?") command creates a temporary file _tmpi containing
the input of the system command. It *both* appends _tmpi as an extra argument
to the system command line *and* adds an input redirection "< _tmpi". (It
also uses and output redirection "> _tmpo" to captures the output of the
command.)

With this patch, the _tmpi argument is no longer appended to the command line.
This allows system_pipe to work with pure filters, such as the "tr" commands,
but it will no longer work with commands that require an input file name.
(It is possible to use write_file instead...)

TODO: it would also be fairly easy to eliminate the creation of the _tmpi and
_tmpo files altogether.
2013-11-12 18:07:38 +00:00
hallgren 12d86604b2 Fix Issue 68: Cannot use an overloaded operator in table defined using square brackets
Add proper type checking of course-of-values tables:

 + Make sure that all subterms have the same type.
 + Resolve overloaded operators.

Note though that the GF book states in C.4.12 that the "course-of-values
table [...] format is not recommended for GF source code, since the
ordering of parameter values is not specified and therefore a
compiler-internal decision."
2013-11-12 13:55:38 +00:00
hallgren a3de4b6e86 GF.System.Chatch: remove redundant #include 2013-11-12 13:51:11 +00:00
hallgren 2da15f558e Fix Issue 41: "," in context-free rules causes parsing failure
The CF parser in GF.Grammar.CF assigns function names to the rules, but they
are not always unique, causing rules to be dropped in the follwing CF->GF
conversion. So a pass has been added before the CF->GF conversion, to make
sure that function names are unique.

A comment says "rules have an amazingly easy parser", but the parser looks
like quick hack. It is very sloppy and silently ignores many errors, e.g.
- Explicitly given function names should end with '.', but if the do not, the
  last character in the function name is silently dropped.
- Everything following a ';' is silently dropped.
2013-11-11 16:50:43 +00:00
hallgren d1314dcbcd Fix issue 61: GF shell cannot parse a system command ending with a space
Trailing spaces caused the command line parse to be ambiguous, and
ambiguous parses were rejected by function readCommandLine, causing
the cryptic error message "command not parsed".
2013-11-11 15:13:24 +00:00
hallgren 09e64e92e4 minibar: fix a mistake the previous bracket fix 2013-11-06 16:54:21 +00:00
hallgren dcbe3533d0 minibar: adapt to changed bracket structure in linearization output 2013-11-06 16:45:24 +00:00
hallgren 5beded9330 Make PGF.Tree internal
The only use of PGF.Tree outside the PGF library was in GF.Command.Commands,
and it was eliminated by using PGF.Expr directly instead.
PGF.Paraphrase still uses PGF.Tree.
2013-11-06 14:29:17 +00:00
hallgren 06453afb1c Remove PGF.Signature
This module should not be part of the public PGF library API, and it was only
used in GF.CompileToAPI, so the code was moved there. The module defined
constFuncs and syntaxFuncs, but only syntaxFuncs was used.
2013-11-06 13:27:29 +00:00
hallgren decd7122de Eliminate mutual dependencies between the GF compiler and the PGF library
+ References to modules under src/compiler have been eliminated from the PGF
  library (under src/runtime/haskell). Only two functions had to be moved (from
  GF.Data.Utilities to PGF.Utilities) to make this possible, other apparent
  dependencies turned out to be vacuous.

+ In gf.cabal, the GF executable no longer directly depends on the PGF library
  source directory, but only on the exposed library modules. This means that
  there is less duplication in gf.cabal and that the 30 modules in the
  PGF library will no longer be compiled twice while building GF.

  To make this possible, additional PGF library modules have been exposed, even
  though they should probably be considered for internal use only. They could
  be collected in a PGF.Internal module, or marked as "unstable", to make
  this explicit.

+ Also, by using the -fwarn-unused-imports flag, ~220 redundant imports were
  found and removed, reducing the total number of imports by ~15%.
2013-11-05 13:11:10 +00:00
hallgren e7073de883 Restore ExtraFre to AllFre
ExtraFre was removed from AllFre yesterday for some reason, but it is needed
to compile PhrasebookFre, so I restored it.
2013-11-01 16:30:22 +00:00
hallgren d7300ba9fb Add a cabal flag to use the standard binary package
The standard binary package has improved efficiency and error handling [1], so
in the long run we should consider switching to it. At the moment, using it is
possible but not recommended, since it results in incomatible PGF files.

The modified modules from the binary package have been moved from
src/runtime/haskell to src/binary.

[1] http://lennartkolmodin.blogspot.se/2013/03/binary-07.html
2013-10-31 15:43:12 +00:00
hallgren 9b399a1138 GF home page: comment out news from 2012-11 and older 2013-10-30 13:52:42 +00:00
hallgren acb0b5611e release-next.t2t: add your notes for the next release of GF here
The file will be renamed when the release is made.
2013-10-30 13:44:10 +00:00
hallgren ad0e67530b Functions merge trees into tries in the GF Shell and the PGF web service
* In the shell, the new command tt (to_trie) merges a list of trees into a
  trie and prints it in a readable way, where unique subtrees are marked with
  a "*" and alternative subtrees are marked with numbers.
* In the PGF web service, adding the parameter trie=yes to the parse and
  translate commands augments the JSON output with a trie.

Example to try in the shell:

	Phrasebook> p -lang=Eng "your son waits for you" | tt
2013-10-24 17:29:02 +00:00
hallgren 1fcae658ac Commands.hs: fix a copy-paste error in the documentation of put_tree 2013-10-24 14:32:11 +00:00
hallgren 5dec00c1d1 GF home page: update PGF library API link
GF 3.5 is now on Hackage and the automatic generation of Haddock documentation
succeeded for the first time in a long time!
2013-10-23 14:24:04 +00:00
hallgren 452164f10f GF home page: minor style changes
+ Split the list of languages into several columns if space permits
  (in supported browsers, currently Firefox).
+ Limit the size of the GF logo to 75% of width the window. Looks better on
  small screens.
2013-09-29 16:25:16 +00:00
hallgren 9be39dd3c7 Link to GF source code browser
And the summers chool and the Interactive map are not new anymore.
2013-09-23 13:07:24 +00:00
hallgren a7469a694b Comment out identifier refreshing code only used by the removed refresh pass 2013-09-20 16:36:24 +00:00
hallgren fd430a40fe Introduce type RawIdent; only 9 imports of Data.ByteString.Char8 remain
The fact that identifiers are represented as ByteStrings is now an internal
implentation detail in module GF.Infra.Ident. Conversion between ByteString
and identifiers is only needed in the lexer and the Binary instances.
2013-09-19 20:48:10 +00:00
hallgren 38fe30c610 Make Ident abstract; imports of Data.ByteString.Char8 down from 29 to 16 modules
Most of the explicit uses of ByteStrings were eliminated by using identS,

	identS = identC . BS.pack 

which was found in GF.Grammar.CF and moved to GF.Infra.Ident. The function

	prefixIdent :: String -> Ident -> Ident

allowed one additional import of ByteString to be eliminated. The functions

	isArgIdent :: Ident -> Bool
	getArgIndex :: Ident -> Maybe Int

were needed to eliminate explicit pattern matching on Ident from two modules.
2013-09-19 18:23:47 +00:00
hallgren 9db040e0da Some code verbosity reduction 2013-09-10 14:19:11 +00:00
hallgren 51574b96ea Workaround for a problem with lock fields
This problem showed up after delaing eta expansion until just before partial
evaluation
2013-09-10 13:43:59 +00:00
hallgren 72fd7e821f new-comp: delay eta expansion until just before partial evaluation
This seems to work for the most part, but a problem showed up in WordsCat.gf in
the phrasebook.
2013-05-30 16:01:12 +00:00
hallgren 1846e6bf65 Nonlinear patterns in concrete syntax are now detected and reported as errors
Before, they were silently converted to linear patterns.
Nonlinear patterns in MorphoCat.gf, ParadigmsGre.gf and ParadigmsFin.gf have
been make linear by renaming pattern variables.
2013-09-09 19:52:08 +00:00
hallgren f1386b3400 partial evaluator: prettier complaint about nonlinears patterns 2013-09-09 16:23:01 +00:00
hallgren 8479d06f4b partial evaluator: complain about nonlinear patterns 2013-09-09 15:53:14 +00:00
hallgren 7afdc2e139 Fix an old name shadowing bug in concrete syntax by removing the refresh pass
The refresh pass does not correctly keep track of the scope of local variables
and can convert things like \x->(\x->x) x into \x1->(\x2->x2) x2. Fortunately,
it appears that the refresh pass is not needed anymore, so it has been removed.
2013-09-09 14:29:57 +00:00
hallgren 6d0c8eaa34 Fix an old bug that prevented pattern matching agains values containg tables
The function GF.Grammar.PatternMatch.isInConstantForm returned False for all
tables, causing matchPattern to fail, claiming that "variables occur in" the
term if it contains tables.

This problem is several years old, confirmed present in GF 3.2.10 (Oct 2010).
2013-09-05 15:20:41 +00:00
hallgren c6fbe3d23f gf.cabal: version: 3.5-darcs 2013-09-02 20:27:47 +00:00
hallgren fa1f750870 Demo page: added a link to Phrasomatic 2013-08-22 19:27:33 +00:00
hallgren 142b07ca82 gfse: don't use multiline text boxes everywhere, just for concrete syntax 2013-08-21 14:19:05 +00:00
hallgren c959d041a1 gf -server: fix for directory URLs without a trailing slash
When a browser requests a URL that refers to a directory, web server usually
redirect the browser to the same URL with a trailing '/' added, if one was not
already present. This is to prevent relative links in the returned document
from being interpreted relative to the parent directory instead of the current
document. This type of redirection was missing in gf -server.
2013-08-20 15:38:26 +00:00
hallgren f4760b2970 download page: link to Inari's notes on installing GF on windows 2013-08-20 08:09:58 +00:00
hallgren 043ab3e07a gfse: only try to upload/compile grammars when browser is online
Show error message "Offline" if browser is offline.
2013-08-19 15:00:55 +00:00
hallgren 15d52dd5c4 gfse: always open a resizable text box when editing concrete syntax
(Also fixed a broken link in gf-web-api-examples.html)
2013-08-19 14:19:18 +00:00
hallgren 9ffc434fef doc/gf-developers.t2t: add some notes on how to create .deb and .rpm packages 2013-08-08 12:51:24 +00:00
hallgren c012fdc4a9 Better error messages for attempts to redefine predefined constants
Instead of just "syntax error", you now get e.g.

   PType is a predefined constant, it can not be redefined

This is a simple change in the parser.
2013-08-07 19:36:09 +00:00
hallgren c836e04764 Update to version 3.5 in gf.cabal and debian/changelog 2013-08-06 15:42:57 +00:00
hallgren db9e12340d Move GF 3.5 download page into place. Update home page. 2013-08-06 15:32:20 +00:00
hallgren fabf992813 Finalize GF 3.4 download page and release notes 2013-08-06 15:28:53 +00:00
hallgren ff33f66fba Next release will be GF 3.5, release notes moved to download/release-3.5.t2t.
Some more work on the 3.5 release notes and download page.
2013-08-05 12:38:38 +00:00
hallgren 5c4dbe743e Update shell reference manual 2013-08-05 11:47:17 +00:00
hallgren fb61fc4562 Cloud & PGF service: use Content-Type application/json for JSON output
This is in accordance with RFC 4627. http://tools.ietf.org/html/rfc4627
Use application/javascript for JSONP output.
2013-07-29 16:05:54 +00:00
hallgren ee81cd5c02 Adding download page and release notes for the next release of GF
The suggested next release is 3.4.8 in early August.
Feel free to add things in download/release-3.4.8.t2t.
2013-07-29 13:26:22 +00:00
hallgren f4519dda8c minibar: more robust test for availability localStorage
Minibar should now work if localStorage is disabled or unavailable.
(In Firefox, disabling cookies also disables localStorage.)
2013-07-29 11:58:17 +00:00
hallgren eb2b5a65d6 Allow cross origin requests to GF cloud & PGF services
By adding a header

	Access-Control-Allow-Origin: *

to the HTTP responses, web browsers are informed that it is OK to call the
services from web pages hosted on other sites.

This is apparently supported in most modern browsers, so it should no longer
be necessary to resort to JSONP.

See https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
2013-07-25 16:04:43 +00:00
hallgren 656f934945 gf-server.cabal: same changes as in gf.cabal for ghc-7.6 compatibility 2013-07-15 17:07:51 +00:00
hallgren 550db69caa Fix UTF-8 decoding problem in gf -server
The package network-2.4.1.1 thoughlessly introduced a backward incompatible
change to the function Network.URI.unEscapeString, see

    https://github.com/haskell/network/commit/f2168b1f8978b4ad9c504e545755f0795ac869ce

This also affects the function Network.Shed.Httpd.queryToArguments, which is
used in GFServer.hs.

To remain compatible with older and newer versions of the network package,
we need to stay clear of queryToArguments and unEscapeString. A replacement
function has been added to server/URLEncoding.hs.
2013-06-13 08:23:48 +00:00
hallgren 860b25fff3 Update the usage text for the --output-format option
It needs to be updated manually when the list of available output format
changes.
2013-06-10 12:00:14 +00:00
hallgren 4e2337f009 GF.Text.Transliterations: avoid error prone function Data.Map.fromAscList 2013-06-02 10:10:46 +00:00
hallgren 6ca2fe5898 Demo page: add a version of the minibar that shows just the MOLTO Application grammars 2013-05-24 14:20:36 +00:00
hallgren 5d7658c081 Download page: the .deb packages also work on Ubuntu 13.04 2013-05-03 13:14:27 +00:00
hallgren 0dbddbb9d7 Setup.hs: comment out ineffective parallelisation 2013-05-02 12:36:16 +00:00
hallgren d2627125e6 Download page & developers guide: add a section about known problems with Cabal 2013-04-29 13:12:37 +00:00
hallgren 3d984e9ee4 gfse: use alltenses/ instead of present/ when looking up RGL oper types 2013-04-26 15:01:11 +00:00
hallgren 46546a3e93 Add greek to Setup.hs and the web apps 2013-04-26 13:42:01 +00:00
hallgren 56f87a4c34 minibar: remove two more uses of with() 2013-04-25 15:08:26 +00:00
hallgren debe305484 minibar: fix bug that prevented minibar from working in Webkit browsers
The with(...) {...} statement has different scoping rules in Webkit browsers
and Gecko browsers, so it is better to avoid it.
2013-04-25 14:55:24 +00:00
hallgren 74ea0c9cf4 PGF service: apply the token binding operator &+ to all linearizations
The &+ operator is now consistently eliminated from the output of commmands
that produce linearizations. Before, only the commands translate and
translategroup did this.
2013-04-24 18:32:53 +00:00
hallgren 322968fb5c js/localstorage.js: don't throw an exception if JSON parsing fails
Return the given default value instead.
2013-04-23 14:14:38 +00:00
hallgren 5c19681f2d gfse: add access to the syntax editor
via the minibar
2013-04-23 13:55:00 +00:00
hallgren dade5c1194 js/gfrobust.js: don't try to translate sentenses that are too long
The C run-time responds badly to input that is too long, so we return an
error message here instead.
The limit is 200 URL-encoded characters.
2013-04-23 13:40:38 +00:00
hallgren d6c01c5414 js/localstorage.js: improved faked localStorage if real localStorage is missing 2013-04-23 12:44:12 +00:00
hallgren aa37d9d01b minibar: use the common interface to localStorage
...for more streamlined code and better browser compatibility.
2013-04-23 12:39:18 +00:00
hallgren 7c24e41d54 gfse: don't add --# -path=.:present
Nowadays GF includes alltenses by default in the grammar search path.
2013-04-20 07:25:38 +00:00