Commit Graph

81 Commits (69ec4fac126e3fa1f8994271c383cedd84fc195c)

Author SHA1 Message Date
Mike Gerwitz 69ec4fac12
New node mutator n:add-attributes
* src/node.xsl (n:add-attributes): added
* test/node.xspec: n:add-attributes tests added
2016-03-29 23:00:16 -04:00
Mike Gerwitz 462d270c74
doc/Makefile.am: license header 2016-03-29 23:00:16 -04:00
Mike Gerwitz 2967463cdb
node.xsl (n:attr#1): added 2016-03-29 23:00:16 -04:00
Mike Gerwitz 057cdbb683
Node attr pair removal for n:attr
node.xsl (n:attr): added
node.xsl: removed all attr-pairs
record.xsl: updated n:element calls
2016-03-29 23:00:15 -04:00
Mike Gerwitz e8e2dff3e6
Basic record suppport
* record.xsl: added
  This only support unnamed slots.

* record.xspec: added

Notice the documentation style: all sentences and clauses of compound
sentences are on their own lines, indented relative to their parent.  This
produces much better diffs when things change.
2016-03-29 23:00:11 -04:00
Mike Gerwitz 77ff279139 Primitive node constructors 2015-10-08 00:14:27 -04:00
Mike Gerwitz 08a43bdd78
[Project fork notice]
I began development of Hoxsl under my employer, LoVullo Associates, which
holds copyright to the commits prior to this one.  This project was largely
planned on my own time and represents an ideal; there has been no time to
continue its disciplined developement under LoVullo, I do not expect for
there to be time to develop this project to my liking, and I don't expect
others within the organization to maintain and improve upon it once I'm
gone.

As such, I'm forking this project and developing it personally outside of
LoVullo Associates.  I don't use XSLT outside of LoVullo, so this
realistically is still a project that will only be used there (by myself),
and I can't say whether I'll continue to maintain this project after I
leave.  But similar to how I developed GNU ease.js on my own time---to
benefit software I write at LoVullo---it doesn't make sense to develop the
project on unpaid overtime for no reason, when I'm not even being asked to
do so.

It is therefore in my best interest, to ensure that Hoxsl will always remain
Free (as in freedom), that I continue development as a personal project.

With all that said, Hoxsl will be used for other Free public projects at
LoVullo---such as TAME---that I will continue to liberate and may be useful,
even if only from an academic perspectve, outside of LoVullo.

As if I didn't already have enough unfinished things on my plate...
2015-10-08 00:01:50 -04:00
Mike Gerwitz 989ef09f3c
Correct XSL{=>T} in README.md title 2015-10-08 00:00:17 -04:00
Mike Gerwitz 4199b989b3 Use configure-time path for literate-xsl over submodule
The submodule is inconvenient and requires awkward project updates for
changes that might be frequent (as it is developed alongside this project).
If we become worried about BC breaks, then we'll do a version check.
2015-09-29 22:57:21 -04:00
Mike Gerwitz a2a34ba19a Add @xmlcomment Texinfo macro 2015-09-29 22:56:33 -04:00
Mike Gerwitz fbc54909a0 Delete target on build error 2015-09-29 22:56:09 -04:00
Mike Gerwitz 7a189d90b9 xsltexi-generated documentation
The documentation will begin to be modelled after Knuth's concept of
literate programming.  The document is not in the best state, but at least
it is now being generated.
2014-12-19 15:44:09 -05:00
Mike Gerwitz a7595b0613 UTF-8 document encoding for manual 2014-12-19 14:51:03 -05:00
Mike Gerwitz a8335444a8 Node sectioning for documentation 2014-12-19 14:51:02 -05:00
Mike Gerwitz 262f04db6d xsltexi-generated files included 2014-12-19 14:51:02 -05:00
Mike Gerwitz 6900181363 apply/ref documentation syntax corrections
These problems won't happen in the future; they were unchecked because
documentation wasn't being generated.
2014-12-19 14:51:02 -05:00
Mike Gerwitz f522a78ed1 License header @comment flag for xsltexi 2014-12-19 14:51:02 -05:00
Mike Gerwitz ae82e28cd3 xsltexi Texinfo file generation 2014-12-19 14:50:59 -05:00
Mike Gerwitz d3315bce91 Documentation syntax correction for partial.xsl docblock 2014-12-19 12:42:09 -05:00
Mike Gerwitz 587d22e2b2 GNU autotools, including doc build 2014-12-19 12:39:22 -05:00
Mike Gerwitz 0ddd0cd32a TexInfo documentation boilerplate 2014-12-19 12:39:06 -05:00
Mike Gerwitz 37ccac5f87 `f:thrush' implemented (alias of `f:thrushr')
`f:thrushl' will follow in the near future; don't you worry.
2014-12-10 15:34:48 -05:00
Mike Gerwitz 5f3e9aad1c Comment to indicate that `f:thrushl' is not yet implemented
It will be; I just do not need it at this moment and want to get other
things moving.
2014-12-10 15:31:59 -05:00
Mike Gerwitz ebc6891c3c Initial thrushing implementation
f:thrushr
2014-12-10 15:31:35 -05:00
Mike Gerwitz bb049984d5 All ref functions now have data adjacency guarantees
Accessors will ignore adjacent data and mutators will echo them, by
reference, unchanged.
2014-12-04 15:28:57 -05:00
Mike Gerwitz 0b5ed975a0 `arity/ref.xsl' documentation updated to reflect data adjacency guarantees 2014-12-04 15:27:47 -05:00
Mike Gerwitz 4c27b8d15d Assurances that all other `f:*' functions properly handle adjacent data 2014-12-04 15:27:47 -05:00
Mike Gerwitz 658edd8717 `f:set-args' respects and echoes adjacent data by references
Was previously clobbered.
2014-12-04 15:27:47 -05:00
Mike Gerwitz e93283c608 `f:args' ignores adjacent data 2014-12-04 15:27:46 -05:00
Mike Gerwitz 2760834bfb partial.xspec using `f:make-ref' instead of manual construction 2014-12-04 15:27:46 -05:00
Mike Gerwitz 09d2231fc0 `f:length' added
This is aggressively tested in every instance where it could be affected,
since any mishandling of this value would be incredibly dangerous (best
case, it would blow up and abort; worst case, data are interchanged between
refs).
2014-12-04 02:15:22 -05:00
Mike Gerwitz 4f7bb0fcef `apply-gen' partial functions now generated
This produces a short-hand partial application (well, it'd be more accurate
to call the use of `f:apply' or `f:partial' long-hand, since this is most
natural).
2014-12-04 01:14:13 -05:00
Mike Gerwitz 31aa7fa111 `apply-gen' now ingores arity-overloaded functions
Rationale is provided in `apply-gen.xsl'.
2014-12-04 01:13:24 -05:00
Mike Gerwitz e392d411fa Short-hand partial application example added to README.md 2014-12-02 16:43:05 -05:00
Mike Gerwitz bb9107c8c1 `apply-gen' now generates functions for partial applications
This is intended as a convenient shorthand:

```xml
  <!-- these two are identical -->
  <sequence select="f:apply( my:func(), $x, $y )" />
  <sequence select="my:func( $x, $y )" />
```
2014-12-02 16:05:01 -05:00
Mike Gerwitz faadaa3edd More comprehensive fnref abstraction
This will allow the implementation to evolve transparently.  And it will be
evolving.
2014-12-01 09:53:45 -05:00
Mike Gerwitz 189eb0cdd6 Partial applications now defined in terms of ref mutators 2014-12-01 09:48:45 -05:00
Mike Gerwitz c526fa2925 `f:{unshift,push}-args' added 2014-12-01 00:34:52 -05:00
Mike Gerwitz 18c1614777 `f:set-args' setter and `f:args' accessor implemented
As operations on dynamic function references become more complex, and since
evolution of the reference structure is planned to evolve, maintaining an
abstraction is vital for both grokking and maintenance.
2014-11-30 04:36:08 -05:00
Mike Gerwitz cd278c31d4 Partial applications now manipulate fnref arity
Previously, a separate `@partial' attribute was added to the ref and the
`@arity' maintained.  Unfortunately, this coupled `f:arity' with
`f:partial', which is unnecessary, considering that partial application is
supposed to conceptually yield a new function, which should be transparent
to `f:arity'.
2014-11-30 03:29:46 -05:00
Mike Gerwitz bc871435fa apply-gen now uses `f:make-ref'
We're essentailly macro-expanding the `f:make-ref' call.  :)
2014-11-30 03:28:43 -05:00
Mike Gerwitz 5857eed3d6 `arity.xsl' stylesheet combined with ref functions into `ref.xsl'
These are strongly related---they operate on the same abstraction.
2014-11-29 02:01:40 -05:00
Mike Gerwitz c64cefe931 `f:arity' now considers partial applications 2014-11-29 01:16:59 -05:00
Mike Gerwitz f62e6a8e33 Arity test case using f:make-ref
In place of manual specification.
2014-11-28 02:27:07 -05:00
Mike Gerwitz 7fd1618390 Partial dynamic function applications
This introduces support for partial applications on dynamic functions.
The test cases are comprehensive and the implementation should be
quite stable.

Even though the base higher-order function implementation was based on
the work of Dimitre Novatchev[0], I have chosen a different route for
partial application:  Novatchev's method relies on storing partially
applied arguments as nodes, together with their types.  The types are
detected the best they can be, with accuracy varying wildly depending
on whether a schema-aware processor is present.

But regardless, that method would not retain node context.

Sequences, however, do.  By using sequences, we allow the processor to
retain all type and context information perfectly without any
additional work that is inaccurate, adds complexity, and likely to
cause subtle problems.  It will also support any types that we are
unaware of.  As Novatchev mentions:

  The argument type-detection that f:curry() uses has been implemented
  only for the builtin XML Schema datatypes. It will not recognize the
  user-defined type of an argument, which can be created by an user of
  a Schema-Aware (SA) XSLT 2.0 processor.[0]

This is not a problem with hoxsl.

[0]: http://conferences.idealliance.org/extreme/html/2006/Novatchev01/EML2006Novatchev01.html
2014-11-27 01:12:17 -05:00
Mike Gerwitz 162c037508 apply-gen TODOs added to header 2014-11-27 01:11:31 -05:00
Mike Gerwitz d9f4894546 README.md updated with mention of partial applications
It does not do it much justice; documentation will come later.  The test
cases are comprehensive.
2014-11-27 01:11:31 -05:00
Mike Gerwitz a351e94910 All `f:apply' functions support partial application
'Tis tasty!
2014-11-27 01:11:30 -05:00
Mike Gerwitz 63487afa67 `f:apply' currying support
Partial application support on all the other `f:apply' functions (other
arities) will be completed in the next commit.
2014-11-27 01:11:30 -05:00
Mike Gerwitz 425f050b03 `f:apply' test case now using f:make-ref
That is, in place of manual construction.  This is especially important for
the next commit, which requires an arity datum.
2014-11-27 01:11:29 -05:00