Commit graph

116 commits

Author SHA1 Message Date
Pete Ryland
24c781039f Fix redundant constraint warnings. () 2019-07-02 10:29:34 +02:00
niszet
b6c53553a9 Update Lua function names in pandoc.system
Fixed function names of pandoc.system.get_working_directory() and
pandoc.system.with_temporary_directory() which are written in the
manual of lua filter.
2019-06-23 14:03:14 +02:00
Albert Krewinkel
11bb862767 Lua: add a clone() method to all AST elements ()
Closes: 
2019-06-12 09:58:38 -07:00
Albert Krewinkel
5a82ecaaa1
pandoc.mediabag module: add function delete
Function `pandoc.mediabag.delete` allows to remove a single item of the given
name from the media bag.
2019-05-29 23:18:44 +02:00
Albert Krewinkel
0a6a11cfab
pandoc.mediabag module: add function empty
Function `pandoc.mediabag.empty` was added. It allows to clean-out the media
bag, removing all entries.
2019-05-29 23:18:44 +02:00
Albert Krewinkel
3097ee100e
pandoc.mediabag module: add items function iterating over mediabag
A new function `pandoc.mediabag.items` was added to Lua module
pandoc.mediabag. This allows users to lazily iterate over all media bag
items, loading items into Lua one-by-one. Example:

    for filename, mime_type, content in pandoc.mediabag.items() do
      -- use media bag item.
    end

This is a convenient alternative to using `mediabag.list` in combination
with `mediabag.lookup`.
2019-05-29 23:17:12 +02:00
Albert Krewinkel
3c3e9a12cd
Lua Version type: shorten "version too old" message 2019-05-29 22:59:45 +02:00
Albert Krewinkel
505f5bf5d9
Lua: add Version type to simplify comparisons
Version specifiers like `PANDOC_VERSION` and `PANDOC_API_VERSION` are
turned into `Version` objects. The objects simplify version-appropriate
comparisons while maintaining backward-compatibility.

A function `pandoc.types.Version` is added as part of the newly
introduced module `pandoc.types`, allowing users to create version
objects in scripts.
2019-05-29 10:07:43 +02:00
Albert Krewinkel
786594b23b Lua: add pandoc.system module ()
The `system` Lua module provides utility functions to interact with the
operating- and file system. E.g.

    print(pandoc.system.get_current_directory())

or

    pandoc.system.with_temporary_directory('tikz', function (dir)
      -- write and compile a TikZ file with pdflatex
    end)
2019-05-04 01:06:30 -04:00
John MacFarlane
f3080c0c22 Remove license boilerplate.
The haddock module header contains essentially the
same information, so the boilerplate is redundant and
just one more thing to get out of sync.
2019-03-01 10:27:06 -08:00
Albert Krewinkel
331d6224a1
T.P.Lua: split StackInstances into smaller Marshaling modules 2019-02-16 12:08:22 +01:00
Albert Krewinkel
85470c49fe
T.P.Lua: get CommonState from Lua global
This allows more control over the common state from within Lua scripts.
2019-02-16 12:08:22 +01:00
Albert Krewinkel
75c791b4fe Lua filters: load module pandoc before calling init.lua ()
The file `init.lua` in pandoc's data directory is run as part of
pandoc's Lua initialization process. Previously, the `pandoc` module was
loaded in `init.lua`, and the structure for marshaling was set-up after.
This allowed simple patching of element marshaling, but made using
`init.lua` more difficult:

  - it encouraged mixing essential initialization with user-defined
    customization;

  - upstream changes to init.lua had to be merged manually;

  - accidentally breaking marshaling by removing required modules was
    possible;

Instead, all required modules are now loaded before calling `init.lua`.
The file can be used entirely for user customization. Patching
marshaling functions, while discouraged, is still possible via the
`debug` module.
2019-02-09 13:56:49 -08:00
Albert Krewinkel
ba61dc35d8
T.P.Lua: properly indent module-loading error 2019-02-09 20:12:34 +01:00
Albert Krewinkel
37a82b0b11 Add missing copyright notices and remove license boilerplate ()
Quite a few modules were missing copyright notices.

This commit adds copyright notices everywhere via haddock module
headers.  The old license boilerplate comment is redundant with this and has
been removed.

Update copyright years to 2019.

Closes .
2019-02-04 13:52:31 -08:00
Albert Krewinkel
c0d8b0abcb
Lua filters: test AST object equality via Haskell
Equality of Lua objects representing pandoc AST elements is tested by
unmarshalling the objects and comparing the result in Haskell. A new
function `equals` which performs this test has been added to the
`pandoc.utils` module.

Closes: 
2018-11-19 21:46:20 +01:00
Albert Krewinkel
1b15913b6e
Lua Utils module: improve stringify
Meta value strings (MetaString) and booleans (MetaBool) are now
converted to the literal string and the lowercase boolean name,
respectively. Previously, all values of these types were converted to
the empty string.
2018-11-17 17:40:16 +01:00
Albert Krewinkel
f612421307 T.P.Lua: expose more useful internals (API change)
Newly exported from Text.Pandoc.Lua:

- `runFilterFile` to run a Lua filter from file;
- data type `Global` and its constructors; and
- `setGlobals` to add globals to a Lua environment.

This module also contains `Pushable` and `Peekable` instances required
to get pandoc's data types to and from Lua. Low-level Lua operation
remain hidden in Text.Pandoc.Lua.
2018-10-28 12:08:52 -07:00
Albert Krewinkel
6f29e1c9c1 T.P.Lua: rename runPandocLua to runLua (API change) 2018-10-28 12:08:52 -07:00
Albert Krewinkel
7f70aaa5fa
Text.Pandoc.Lua: move globals handling to separate module 2018-10-26 22:24:21 +02:00
Albert Krewinkel
096cbe6987 Lua: allow access to pandoc state ()
* Lua: allow access to pandoc state

Lua filters and custom writers now have read-only access to most fields
of pandoc's internal state via the global variable `PANDOC_STATE`.

* Lua: allow iterating through fields of PANDOC_STATE

* Lua filters doc: describe CommonState

* Lua filters doc: mention global variable PANDOC_STATE

* Lua: add access to logs

Log messages can currently only be printed, but not decomposed.
2018-10-25 22:12:14 -07:00
Albert Krewinkel
594d36437b
Lua filters: rename ReaderOptions fields, use snake_case
Snake case is used in most variable names, using camelCase for these
fields was an oversight. A metatable is added to ensure that the old
field names remain functional.
2018-10-15 07:56:35 +02:00
Albert Krewinkel
d126c26dd5
Lua filter internals: push Shared.Element as userdata
Hierarchical Elements were pushed to Lua as plain tables. This is
simple, but has the disadvantage that marshaling is eager: all child
elements will be marshaled as part of the object. Using a Lua userdata
object instead allows lazy access to fields, causing content marshaling
just (but also each time) when a field is accessed. Filters which do not
traverse the full element contents tree become faster as a result.
2018-10-13 14:57:20 +02:00
Albert Krewinkel
3db9e15689
Lua filters: push ListAttributes via constructor
This ensures that ListAttributes, as present in OrderedList elements,
have additional accessors (viz. *start*, *style*, and *delimiter*).
2018-10-12 21:13:44 +02:00
John MacFarlane
05146ac97c T.P.Lua.StackInstances - moved pragmas to top of file. 2018-10-02 00:09:48 -07:00
Albert Krewinkel
9abdbb2783
Lua filters: report traceback when an error occurs
A proper Lua traceback is added if either loading of a file or execution
of a filter function fails. This should be of help to authors of Lua
filters who need to debug their code.
2018-10-01 16:32:11 +02:00
Albert Krewinkel
1ffe47b9b9
Lua Util: add missing docstring to defineHowTo 2018-10-01 11:09:34 +02:00
Albert Krewinkel
56fe5b559e
Use hslua v1.0.0 2018-09-24 20:11:27 +02:00
Albert Krewinkel
4264a1b143
Lua filter: cleanup filter execution code 2018-09-19 21:36:13 +02:00
Albert Krewinkel
acf6df1aef
Lua: cleanup Lua utils, remove unused functions. 2018-08-12 12:28:06 +02:00
Albert Krewinkel
fb94c0f6a1 Lua Utils module: add function blocks_to_inlines ()
Exposes a function converting which flattenes a list of blocks into a
list of inlines. An example use case would be the conversion of Note
elements into other inlines.
2018-07-30 10:55:25 -07:00
Alexander Krotov
f6dfb632ff Spellcheck comments 2018-07-02 18:30:37 +03:00
John MacFarlane
7e389cb3db Use NoImplicitPrelude and explicitly import Prelude.
This seems to be necessary if we are to use our custom Prelude
with ghci.

Closes .
2018-03-18 10:46:28 -07:00
John MacFarlane
dfa1dc164a hlint fixes. 2018-03-17 22:00:55 -07:00
Albert Krewinkel
b5bd8a9461
Lua: register script name in global variable
The name of the Lua script which is executed is made available in the
global Lua variable `PANDOC_SCRIPT_FILE`, both for Lua filters and
custom writers.

Closes: 
2018-02-24 22:43:28 +01:00
Albert Krewinkel
517f65a7cc
Lua filters: store constructors in registry
Lua functions used to construct AST element values are stored in the Lua
registry for quicker access. Getting a value from the registry is much
faster than getting a global value (partly to idiosyncrasies of hslua);
this change results in a considerable performance boost.
2018-01-23 21:29:58 +01:00
Albert Krewinkel
2e0bb77334
Lua: move getTag from StackInstances to Util
Change: minor
2018-01-23 21:29:52 +01:00
John MacFarlane
b8ffd834cf hlint code improvements. 2018-01-19 21:25:24 -08:00
John MacFarlane
4b7bc40e8b Renaming: Json -> JSON in modules and functions. 2018-01-15 10:46:40 -08:00
John MacFarlane
f114153481
Merge pull request from tarleb/lua-run-json-filter
Run JSON filters from Lua filters
2018-01-15 11:43:46 -07:00
Albert Krewinkel
8d5422f36b
Lua modules: add function pandoc.utils.run_json_filter
Runs a JSON filter on a Pandoc document.
2018-01-13 00:07:03 +01:00
Albert Krewinkel
6528082401
Lua filters: improve error messages
Provide more context about the task which caused an error.
2018-01-12 21:28:27 +01:00
Albert Krewinkel
5b852f8d2a
Lua filters: make PANDOC_READER_OPTIONS available
The options which were used to read the document are made available to
Lua filters via the `PANDOC_READER_OPTIONS` global.
2018-01-12 18:54:19 +01:00
Albert Krewinkel
f5dec4bdc1
Lua: make pandoc-types version available as PANDOC_API_VERSION
The current pandoc-types version is made available to Lua programs in
the global PANDOC_API_VERSION. It contains the version as a list of
numbers.
2018-01-07 14:06:34 +01:00
Albert Krewinkel
043740d32b
Lua: make pandoc version available as PANDOC_VERSION
The current pandoc version is made available to Lua programs in the
global PANDOC_VERSION.  It contains the version as a list of numbers.
2018-01-07 13:43:03 +01:00
Albert Krewinkel
0d935bd081
Update copyright notices to include 2018 2018-01-05 20:39:12 +01:00
Albert Krewinkel
4f564b9203
data/pandoc.lua: fix attribute names of Citation
The fields were named like the Haskell fields, not like the documented,
shorter version.  The names are changed to match the documentation and
Citations are given a shared metatable to enable simple extensibility.

Fixes: 
2018-01-05 08:20:59 +01:00
Albert Krewinkel
856bc54526
Use hslua utils where possible
Some helper functions and types have been moved to hslua.

Change: minor
2018-01-04 23:15:28 +01:00
John MacFarlane
ecc46e229f Lua.Module.Utils: make stringify work on MetaValues.
I'm sure this was intended in the first place, but currently
only Meta is supported.
2018-01-01 14:11:49 -08:00
Albert Krewinkel
9be2c7624c
data/pandoc.lua: drop function pandoc.global_filter
The function `global_filter` was used internally to get the implicitly
defined global filter. It was of little value to end-users, but caused
unnecessary code duplication in pandoc. The function has hence been
dropped. Internally, the global filter is now received by interpreting
the global table as lua filter.

This is a Lua API change.
2017-12-29 10:04:55 +01:00