Compare commits

..

7 Commits

22 changed files with 62 additions and 147 deletions

View File

@ -59,12 +59,12 @@ This project is in its infancy and some of the larger goals are still unmet:
### Control and Flow
* [JLPMain](jlp://jlp.jdb-labs.com/JLPMain)
* [JLPMain](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/JLPMain.groovy.html)
The entry point to the JLP executable. Parses the command line input and
sets up the processor.
* [Processor](jlp://jlp.jdb-labs.com/Processor)
* [Processor](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/Processor)
The Processor processes one batch of input files to create a set of output files.
It holds the intermediate state needed by the generators and coordinates the
@ -72,39 +72,36 @@ This project is in its infancy and some of the larger goals are still unmet:
processor only generates HTML documentation and will likely be renamed in
the future to reflect this.
* [JLPBaseGenerator](jlp://jlp.jdb-labs.com/JLPBaseGenerator)
* [JLPBaseGenerator](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/JLPBaseGenerator)
The Generator processes one input file. It parses the AST for the input file
and emits the final documentation for the file. JLPBaseGenerator
implementations are expected to be tightly coupled to Processor
implementations.
* [LiterateMarkdownGenerator](jlp://jlp.jdb-labs.com/LiterateMarkdownGenerator)
* [LiterateMarkdownGenerator](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/LiterateMarkdownGenerator)
This implemetation of JLPBaseGenerator generates literate-style
documentation (as opposed to API-style), using [Markdown] to format the
documentation (as opposed to API-style), using
[Markdown](http://daringfireball.net/projects/markdown/) to format the
documentation blocks.
[Markdown]: http://daringfireball.net/projects/markdown/
### Parsing
* [JLPParser](jlp://jlp.jdb-labs.com/JLPParser)
* [JLPParser](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/JLPParser)
A very simple interface for parsing JLP input.
* [JLPPegParser](jlp://jlp.jdb-labs.com/JLPPegParser)
* [JLPPegParser](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/JLPPegParser)
A [PEG parser] implemented using the [parboiled] library. This is the
default source code parser. It is able to parse JLP documentation but leaves
code unparsed. It can be parameterized to fit the differing documentation
styles of source languages.
[PEG parser]: http://en.wikipedia.org/wiki/Parsing_expression_grammar
[parboiled]: http://www.parboiled.org
A [PEG parser](http://en.wikipedia.org/wiki/Parsing_expression_grammar)
implemented using the [parboiled](http://www.parboiled.org) library. This
is the default source code parser. It is able to parse JLP documentation
but leaves code unparsed. It can be parameterized to fit the differing
documentation styles of source languages.
### Abstract Syntax Tree
* [SourceFile](jlp://jlp.jdb-labs.com/ast/SourceFile)
* [SourceFile](https://jdbernard.github.io/jlp/doc/src/com/jdblabs/jlp/JLPPegParserSourceFile)
The top-level AST element. This represents a source file.

View File

@ -1,6 +1,6 @@
<project name="Jonathan's Literate Programming" basedir="." default="release">
<import file="jdb-build-1.9.xml"/>
<import file="jdb-build-1.10.xml"/>
<property environment="env"/>
<property file="project.properties"/>

View File

@ -1,2 +0,0 @@
Implement working internal links using ``jlp://`` schema.
=========================================================

View File

@ -1 +0,0 @@
Implement language-specific code parsing and comprehension.

View File

@ -1 +0,0 @@
Support multi-line block comments.

View File

@ -1 +0,0 @@
Make the parser configurable with respect to comment delimiters.

View File

@ -1,16 +0,0 @@
Fix delimited doc block behavior.
=================================
Delimited doc blocks require that the start token be the first non-space token
on the line it is on and that the end token be on it's own line. This is not in
line with the general nature of delimited comment blocks, which do not place
any restrictions on what comes before the start delimiter or after the end
delimiter.
----
========= ===================
Created : 2011-09-07
Resolved: 2011-12-25T23:26:07
========= ===================

View File

@ -1,25 +0,0 @@
Internal links are not smart enough about cross-file linking.
=============================================================
There are two main problems with internal linking as it works now:
1. The links are resolved relative to the directory of the file being processed
when they should be resolved relative to the root output directory.
For example, consider ``@org id1`` defined in ``dir/file1.src``, then
referenced in ``dir/file2.src`` in this manner: ``[link](jlp://id1``. The
url written in ``dir/file2.html`` is ``dir/file1.html#id1``. However, when
the page is viewed, this url is interpreted relative to the directory of the
current page. So if the docs live at ``file:///docs`` then the url will
resolve to ``file:///docs/dir/dir/file1.src#id1`` instead of
``file:///docs/dir/file1.html#id1``.
2. The links do substitute the ``html`` suffix to the file names in place of the
files' suffixes. In the above example note that the actual urls end in
``.src`` like the original input files, but the expected url ends in
``.html``.
========= ==========
Created: 2011-09-08
Resolved: 2011-09-09
========= ==========

View File

@ -1,12 +0,0 @@
Encode Documentation and Code Characters for HTML
=================================================
The text of the documentation and the code is not being HTML encoded,
so some characters (most notably `<`) are causing wierd display issues
in the resulting output.
----
======== ===================
Created: 2011-12-26T00:43:44
======== ===================

View File

@ -1,12 +0,0 @@
`Include` Directive.
====================
Add a new directive: `include`. This directive allows the author to include
the contents of a URL inline in the documentation (can be an internal JLP
reference URL).
----
======== ===================
Created: 2011-12-29T11:23:52
======== ===================

View File

@ -1,12 +0,0 @@
Automatically create document `org` directives.
===============================================
The author should not have to create an `org` directive at the top of every file.
This should be done for him during parsing. Ideally the system would be smart enough
to notice if he has defined an `org` at the top of a file and use that if he has.
----
======== ===================
Created: 2012-01-04T17:12:59
======== ===================

View File

@ -1,12 +0,0 @@
Add a `title` directive for titling documents.
==============================================
Return to defaulting a title for each document. Instead of the internal document id use
something more reasonable, like the filename without the path and without the extension.
A new attribute `title` could allow the author to override this value.
----
======== ===================
Created: 2012-01-04T17:14:26
======== ===================

View File

@ -1,18 +0,0 @@
Modify `org` behavior to include simple anchors.
================================================
Currently JLP supports at most one `org` directive per block which identifies the block.
It would be useful to support multiple `org` directives within a block, particularly
when there is a large block that may have many interesting internal targets. Maybe the
`org` directive should be handled differently when it is used multiple times within a
block. This would be discovered in the generator parse phase and we could change the
LinkAnchor type at that time. During the parse phase we emit the new type of anchors
as `<a id="link-name"/>` into the document. We would also change our search for block
ids to inly look for the single-occurance type of `orgs`.
----
========= ===================
Created : 2012-01-05T11:40:35
Resolved: 2012-01-06T14:32:46
========= ===================

32
doc/jlp-notes Normal file
View File

@ -0,0 +1,32 @@
Implement special-purpose Markdown processor. This way it can be intelligent
about connecting seperated doc-blocks that should be a unit, can process thing
like link references on a whole-document basis, and can be more intelligent
about indentation, line numbers for doc blocks.
Consider building up common, generic AST nodes for code parsers so that most of
the work of integrating a new language is already done in the common code,
leaving only the very specific behavior to be implemented. For starters:
CodeUnit
: Supports things like classes in OOP, modules, even files if that is a
common organizational unit for the language.
Callable
: Supports methods, functions, subroutines, closures, anything that takes
parameters and returns a value.
Structure
: May be a useful abstraction for pure data objects (Erlang record
definitions, C/C++ unions and structs, enums, etc.).
Make Directives completely configurable. Do not hard-code an enumeration of
possible values. Make the actual directive text just another field on the class.
This allows language-specific implementations to extend the built-in Directives
easily. It also has the benefit of allowing unknown or invalid directives
through the parser without causing the source file to fail to parse. This gives
us a better way to warn the user of unknown directives. To this end it may be
good to assemble a list of defined directives at runtime, but this would not
happen in the parser itself.
Add back the @doc directive to return to private implementation notes within a
block that has so far been marked public with an @api directive.

View File

@ -117,7 +117,7 @@
<target name="-compile-groovy" depends="-init,-init-groovy,-lib,-lib-groovy">
<mkdir dir="${build.dir}/main/classes"/>
<groovyc srcdir="${src.dir}/main" destdir="${build.dir}/main/classes"
includeAntRuntime="false">
includeAntRuntime="false" fork="true">
<classpath>
<path refid="groovy.classpath"/>
@ -139,7 +139,7 @@
<target name="-compile-tests-groovy" depends="-init,compile">
<mkdir dir="${build.dir}/test/classes"/>
<groovyc srcdir="${src.dir}/test" destdir="${build.dir}/test/classes"
includeAntRuntime="false">
includeAntRuntime="false" fork="true">
<classpath>
<path refid="groovy.classpath"/>

View File

@ -1,7 +1,7 @@
#Fri, 27 Jan 2012 18:21:58 -0600
#Tue, 13 Aug 2013 08:48:43 -0500
name=jlp
version=1.7
build.number=24
build.number=25
lib.local=true
release.dir=release
main.class=com.jdblabs.jlp.JLPMain

View File

@ -18,7 +18,7 @@ public abstract class JLPBaseGenerator {
/**
* The generator works in close conjunction with a JLP Processor.
* This tight coupling in intended for these two classes. The distiction
* This tight coupling is intended for these two classes. The distiction
* between the two classes is scope. The Processor class is concerned with
* data and behavior common to the whole documentation process whereas the
* Generator is concerned only with one file. The Generator does have

View File

@ -37,19 +37,19 @@ public class JLPMain {
/// : Print help information.
cli.h('Print this help information.', longOpt: 'help', required: false)
/// -o, --outputdir
/// -o, --outputdir <output-directory>
/// : Set the output directory where the documentation will be
/// written.
cli.o("Output directory (defaults to 'jlp-docs').",
longOpt: 'output-dir', args: 1, argName: "output-dir",
required: false)
/// --css-file
/// --css-file <file>
/// : Specify an alternate CSS file for the output documentation.
cli._('Use <css-file> for the documentation css.',
longOpt: 'css-file', args: 1, required: false, argName: 'css-file')
/// --relative-path-root
/// --relative-path-root <root-directory>
/// : Override the current working directory. This is useful if you
/// are invoking jlp remotely, or if the current working directory
/// is incorrectly set by the executing environment.

View File

@ -513,8 +513,8 @@ public class JLPPegParser extends BaseParser<Object> implements JLPParser {
/// ### Utility/Helper Functions. ###
/// ---------------------------------
/// The `popAs` functions exist primarily to make the parser rules more readable
/// by providing shortcuts for common casts.
/// The `popAs` functions exist primarily to make the parser rules more
/// readable by providing shortcuts for common casts.
String popAsString() { return (String) pop(); }
Integer popAsInt() { return (Integer) pop(); }
@ -524,8 +524,8 @@ public class JLPPegParser extends BaseParser<Object> implements JLPParser {
/**
* #### addToDocBlock
* Add the given block to the [`SourceFile`] node expected to be at the top of
* the parser value stack.
* Add the given block to the [`SourceFile`] node expected to be at the top
* of the parser value stack.
*
* [`SourceFile`]: jlp://jlp.jdb-labs.com/ast/SourceFile
*/
@ -535,8 +535,8 @@ public class JLPPegParser extends BaseParser<Object> implements JLPParser {
/**
* #### addToDocBlock
* Add the given [`Directive`] or [`DocText`] to the [`DocBlock`] expected to be at the
* top of the parser value stack.
* Add the given [`Directive`] or [`DocText`] to the [`DocBlock`] expected
* to be at the top of the parser value stack.
*
* [`Directive`]: jlp://jlp.jdb-labs.com/ast/Directive
* [`DocText`]: jlp://jlp.jdb-labs.com/ast/DocText

View File

@ -130,10 +130,8 @@ public class Processor {
def relPath = getRelativeFilepath(inputRoot, file)
def pathParts = relPath.split('/') as List
// Get our file type.
def fileType = sourceTypeForFile(file)
// We will skip binary files and files we know nothing about.
def fileType = sourceTypeForFile(file)
if (fileType == 'binary' || fileType == 'unknown') { return; }
// Start with just the file name.