]> git.wincent.com - docvim.git/log
6 years agoAdd some fixture files that I previously forgot to include
Greg Hurrell [Tue, 31 May 2016 14:29:18 +0000 (07:29 -0700)] 
Add some fixture files that I previously forgot to include

6 years agoFix indentation
Greg Hurrell [Tue, 31 May 2016 14:27:34 +0000 (07:27 -0700)] 
Fix indentation

6 years agoRename `State` to `Metadata`
Greg Hurrell [Tue, 31 May 2016 14:21:34 +0000 (07:21 -0700)] 
Rename `State` to `Metadata`

State was a terrible name to use in conjunction with the Reader monad, as it
easily leads to confusion with the State monad. Let's just call it `Metadata`
(about the project AST) for now; that's a horribly generic name too, but it is
at least an improvement.

6 years agoUpdate .tmux paths for Vim 8-pre
Greg Hurrell [Tue, 31 May 2016 14:14:44 +0000 (07:14 -0700)] 
Update .tmux paths for Vim 8-pre

6 years agoFix lint
Greg Hurrell [Tue, 31 May 2016 14:13:21 +0000 (07:13 -0700)] 
Fix lint

6 years agoUpgrade README
Greg Hurrell [Tue, 31 May 2016 14:12:21 +0000 (07:12 -0700)] 
Upgrade README

6 years agoHook up plugin and footer extraction
Greg Hurrell [Tue, 31 May 2016 07:38:57 +0000 (00:38 -0700)] 
Hook up plugin and footer extraction

Obviously the horrible `ast2` binding name will have to go away, but this works.

6 years agoExtract footers and plugin sections
Greg Hurrell [Tue, 31 May 2016 07:36:24 +0000 (00:36 -0700)] 
Extract footers and plugin sections

6 years agoFix trailing whitespace at end of file
Greg Hurrell [Tue, 31 May 2016 06:56:10 +0000 (23:56 -0700)] 
Fix trailing whitespace at end of file

6 years agoActually write output files
Greg Hurrell [Tue, 31 May 2016 06:50:29 +0000 (23:50 -0700)] 
Actually write output files

6 years agoSimplify some case statements with the LambdaCase extension
Greg Hurrell [Tue, 31 May 2016 05:55:00 +0000 (22:55 -0700)] 
Simplify some case statements with the LambdaCase extension



6 years agoUse MultiWayIf extension to make a nested `if` less ugly
Greg Hurrell [Tue, 31 May 2016 05:44:51 +0000 (22:44 -0700)] 
Use MultiWayIf extension to make a nested `if` less ugly

Still pretty ugly though...



6 years agoSort link targets for Markdown output too
Greg Hurrell [Tue, 31 May 2016 05:37:48 +0000 (22:37 -0700)] 
Sort link targets for Markdown output too

6 years agoSort link targets
Greg Hurrell [Tue, 31 May 2016 05:36:20 +0000 (22:36 -0700)] 
Sort link targets

6 years agoRight-align link targets
Greg Hurrell [Tue, 31 May 2016 05:34:38 +0000 (22:34 -0700)] 
Right-align link targets

6 years agoStart prepping to hangle hard-wrapping
Greg Hurrell [Mon, 30 May 2016 14:36:25 +0000 (07:36 -0700)] 
Start prepping to hangle hard-wrapping

This is going to be ugly...

6 years agoFix @plugin printing in Vim printer
Greg Hurrell [Mon, 30 May 2016 14:28:32 +0000 (07:28 -0700)] 
Fix @plugin printing in Vim printer

6 years agoMake Vim printer more useful
Greg Hurrell [Mon, 30 May 2016 14:09:42 +0000 (07:09 -0700)] 
Make Vim printer more useful

Still a work-in-progress, but it is close to what we want now.

6 years agoFix some lints
Greg Hurrell [Mon, 30 May 2016 07:06:41 +0000 (00:06 -0700)] 
Fix some lints

6 years agoFix test breakage caused by missing modules
Greg Hurrell [Mon, 30 May 2016 07:00:51 +0000 (00:00 -0700)] 
Fix test breakage caused by missing modules

6 years agoAdd Mappings visitor
Greg Hurrell [Mon, 30 May 2016 06:57:26 +0000 (23:57 -0700)] 
Add Mappings visitor

6 years agoAdd extract function to Plugin visitor
Greg Hurrell [Mon, 30 May 2016 06:51:10 +0000 (23:51 -0700)] 
Add extract function to Plugin visitor

Lots of duplication/similarity with the Footer visitor, but I want to do this a
few times before I dry to identify and abstract away the pattern.

6 years agoTrim down footer extraction to its "final" form
Greg Hurrell [Sun, 29 May 2016 23:13:37 +0000 (16:13 -0700)] 
Trim down footer extraction to its "final" form

Want the external interface provided by "extract" to
be simple, so we wrap the `runWriter` call and return
a List instead of a DList.

6 years agoAdd some notes about footer extraction
Greg Hurrell [Sun, 29 May 2016 14:27:55 +0000 (07:27 -0700)] 
Add some notes about footer extraction

Likely going to settle on postorder uniplate technique
at which point I will remove some of the extraneous
exports and simplify.

6 years agoTeach CLI to operate on target arguments
Greg Hurrell [Sat, 28 May 2016 14:02:34 +0000 (07:02 -0700)] 
Teach CLI to operate on target arguments

Still not writing to filesystem, but will add that in a bit.
For now, just debugging everything over standard out is
super convenient.

Obviously, this code is super ugly with that staggered `if`
statement, so will refactor.

6 years agoMake CLI tool print markdown
Greg Hurrell [Sat, 28 May 2016 06:37:04 +0000 (23:37 -0700)] 
Make CLI tool print markdown

Apologies for the shitty commit with a bunch of very stale lingering worktree
changes just thrown in there for no good reason.

6 years agoInclude a couple of examples of alternatives to `walk`
Greg Hurrell [Thu, 7 Apr 2016 14:39:39 +0000 (07:39 -0700)] 
Include a couple of examples of alternatives to `walk`

6 years agoFix lints
Greg Hurrell [Thu, 7 Apr 2016 06:57:54 +0000 (23:57 -0700)] 
Fix lints

6 years agoRemove explicit Plated instance
Greg Hurrell [Thu, 7 Apr 2016 06:56:24 +0000 (23:56 -0700)] 
Remove explicit Plated instance

Thought I would need it based on reading:


but it seems that I do not.

6 years agoUse lens library and uniplate functionality to simplify `walk`
Greg Hurrell [Thu, 7 Apr 2016 06:53:46 +0000 (23:53 -0700)] 
Use lens library and uniplate functionality to simplify `walk`

As suggested here:


6 years agoRevert "(Temporarily) switch to partitioning footer visitor"
Greg Hurrell [Wed, 6 Apr 2016 14:00:33 +0000 (07:00 -0700)] 
Revert "(Temporarily) switch to partitioning footer visitor"

This reverts commit e1b6966168f9618ad28f.

As explained in that commit message, back to the old drawing board.

6 years ago(Temporarily) switch to partitioning footer visitor
Greg Hurrell [Wed, 6 Apr 2016 13:51:27 +0000 (06:51 -0700)] 
(Temporarily) switch to partitioning footer visitor

This is semi-broken, so will revert, but I wanted to show where my
thinking erroneously took me.

The main idea is that if I extract the footer sections from the tree,
then I am left with "something" that I need to pass to the Markdown
printer and that "something" should _not_ have the extracted contents in
it as well, otherwise they will appear as duplicated in the output.

So, I thought to partition instead of extract. One list would be
extracted footer nodes and another whatever was left. I could then
string these extractors into a pipeline, effectively filtering the
remaining output down as I went. Or I could merge them into one big
extractor/classifier which would return a collection of non-overlapping

This is flawed for two reasons:

(1) My implementation was wrong. As committed here, the partitioning is
half-busted because of my `nodes` implementation. I tried a few
different ways, only some of which type-checked and none of which
actually produced the right results (either too much was accumulated,
producing repeated entries, or not enough).

(2) The conceptual model is fundamentally flawed because what I need is
a tree pruning process and not something that can only output arrays
(even if those arrays contain trees). This was my principal mistake,
because I thought this could be made to work because we're dealing with
subtrees. Maybe it can, but I don't think so: a `Unit` might be a list
`Node`s, but all the interesting distinctions happen inside some nested
child (usually a DocBlock, but not always: for example it might be
inside a DocBlock inside a FunctionDeclaration).

So, I am going to back this out and reconsider my approach.

Footer extraction will still work but I need to figure out what to do
with what's left, and whether I can really do this properly by pruning
at a tree level.

6 years agoDRY up Footer visitor
Greg Hurrell [Wed, 6 Apr 2016 06:14:40 +0000 (23:14 -0700)] 
DRY up Footer visitor

6 years agoFurther flesh out footer visitor
Greg Hurrell [Wed, 6 Apr 2016 06:05:13 +0000 (23:05 -0700)] 
Further flesh out footer visitor

6 years agoStart working on Footer visitor
Greg Hurrell [Wed, 6 Apr 2016 05:46:25 +0000 (22:46 -0700)] 
Start working on Footer visitor

This one uses the State monad to do a context-sensitive traversal: the
traversal is either in capturing or non-capturing mode, and it
accumulates nodes into the final result list on that basis.

6 years agoBrevity
Greg Hurrell [Wed, 6 Apr 2016 01:32:25 +0000 (18:32 -0700)] 

6 years agoBe a little more generic
Greg Hurrell [Tue, 5 Apr 2016 05:40:27 +0000 (22:40 -0700)] 
Be a little more generic

6 years agoSimplify `walk` callers by using monoidal nature of argument
Greg Hurrell [Tue, 5 Apr 2016 03:26:34 +0000 (20:26 -0700)] 
Simplify `walk` callers by using monoidal nature of argument

We can let `walk` do the `mappend` for all the callers, simplifying

6 years agoMay as well line these up with what follows them
Greg Hurrell [Tue, 5 Apr 2016 01:13:40 +0000 (18:13 -0700)] 
May as well line these up with what follows them

6 years agoDrop unnecessary parens
Greg Hurrell [Tue, 5 Apr 2016 01:13:17 +0000 (18:13 -0700)] 
Drop unnecessary parens

6 years agoSort
Greg Hurrell [Tue, 5 Apr 2016 01:12:59 +0000 (18:12 -0700)] 

6 years agoTraverse into functions in Markdown printer
Greg Hurrell [Tue, 5 Apr 2016 01:04:21 +0000 (18:04 -0700)] 
Traverse into functions in Markdown printer

Wondering if I should be able to re-use `walk` here. Not sure how easy
it will be to get the Reader monad and the `walk` function to play
nicely together. I think it will be worth figuring it out though, as
I'll need to make a bunch of pruned AST trees in order to produce the
different document sections (mappings, options etc) so otherwise will
wind up writing a lot of similar code in walkers for each one.

6 years agointercalate -> unwords as per linter
Greg Hurrell [Tue, 5 Apr 2016 01:01:47 +0000 (18:01 -0700)] 
intercalate -> unwords as per linter

6 years agoSkip past tabs in LetStatement RHS
Greg Hurrell [Tue, 5 Apr 2016 00:41:24 +0000 (17:41 -0700)] 
Skip past tabs in LetStatement RHS

We already do this with spaces, so we should do it with tabs too.

6 years agoDon't suppress all whitespace in GenericStatement representation
Greg Hurrell [Tue, 5 Apr 2016 00:39:22 +0000 (17:39 -0700)] 
Don't suppress all whitespace in GenericStatement representation

We're compressing it, which means that a string literal with an embedded
run of whitespace will get squished, but such is life.

6 years agoRemove an errant >
Greg Hurrell [Mon, 4 Apr 2016 15:52:05 +0000 (08:52 -0700)] 
Remove an errant >

6 years agoCopy parser integration fixtures over to Markdown directory
Greg Hurrell [Mon, 4 Apr 2016 15:50:10 +0000 (08:50 -0700)] 
Copy parser integration fixtures over to Markdown directory

Some rough edges in there, but these mostly work.

6 years agoFix overly eager GenericStatement parsing and eos issues
Greg Hurrell [Mon, 4 Apr 2016 15:42:04 +0000 (08:42 -0700)] 
Fix overly eager GenericStatement parsing and eos issues

Too much stuff was getting parsed as generic statement. Here we fix that
and the related issue of "lw 100 f" being parsed as "lw 100" + "f"

This does introduce a slight regression in that trailing comments are
now considered part of the RHS of a let statement, but it still fixes
more than it breaks, so I am keeping this in.

If I get to proper expression parsing (or at least proper string
literals) then I'll be able to fix that.

6 years agoStore ints rather than strings in AST
Greg Hurrell [Mon, 4 Apr 2016 15:27:23 +0000 (08:27 -0700)] 
Store ints rather than strings in AST

And note horrible bug where my `eos` parser doesn't seem to be enforcing
an actual end of statement.

6 years agoFix silly bug with lwindow parsing
Greg Hurrell [Mon, 4 Apr 2016 15:18:04 +0000 (08:18 -0700)] 
Fix silly bug with lwindow parsing

6 years agoAdd support for lexpr, lw
Greg Hurrell [Mon, 4 Apr 2016 15:05:10 +0000 (08:05 -0700)] 
Add support for lexpr, lw

Notably, this is enough to make the entire Ferret fixture parse without
blowing up. There are definitely bugs in here (just look at the ASTs
produced) that will need to be fixed, but it's nice that it doesn't

I am probably doing this l-statement disambiguation in a stupid way
(probably need to start thinking about leveraging the token parser
stuff), but this works so a I am going to run with it.

6 years agoDisambiguate :endfo[r] and :endf[unction]
Greg Hurrell [Mon, 4 Apr 2016 14:20:58 +0000 (07:20 -0700)] 
Disambiguate :endfo[r] and :endf[unction]

6 years agoHandle varargs (...)
Greg Hurrell [Mon, 4 Apr 2016 13:57:47 +0000 (06:57 -0700)] 
Handle varargs (...)

6 years agoHandle autoloaded functions
Greg Hurrell [Mon, 4 Apr 2016 06:51:36 +0000 (23:51 -0700)] 
Handle autoloaded functions

This is pretty ugly, but it works.

6 years agoHandle "blank" lines in normal (non-docblock) comments
Greg Hurrell [Mon, 4 Apr 2016 06:24:39 +0000 (23:24 -0700)] 
Handle "blank" lines in normal (non-docblock) comments

6 years agoFix problem with trailing comments
Greg Hurrell [Mon, 4 Apr 2016 06:21:48 +0000 (23:21 -0700)] 
Fix problem with trailing comments

6 years agoUpdate let.golden
Greg Hurrell [Mon, 4 Apr 2016 05:10:58 +0000 (22:10 -0700)] 
Update let.golden

Forgot to include this with the fix.

6 years agoUse <> infix instead of mappend
Greg Hurrell [Mon, 4 Apr 2016 05:10:10 +0000 (22:10 -0700)] 
Use <> infix instead of mappend

Reads a little more nicely, I think.

6 years agoHandle more kinds of let assignment
Greg Hurrell [Sun, 3 Apr 2016 14:20:54 +0000 (07:20 -0700)] 
Handle more kinds of let assignment

Huge kludge territory at this point, until we have a proper expression
parser, but working through the Ferret fixtures I discovered the need to

  let l:list[l:line - 1]=0

Note that in adding the test cases I discovered a problem with our
trailing comment parsing. This would parse fine:

  let g:foo=1 " Trailing.
  unlet g:foo

But this would not:

  let g:foo=1 " Trailing.

  unlet g:foo

Because our comment parse needed to slurp up the empty lines.

6 years agoUnbreak some tests caused by introduction of generic statements
Greg Hurrell [Sun, 3 Apr 2016 13:48:55 +0000 (06:48 -0700)] 
Unbreak some tests caused by introduction of generic statements

See the included comment for reasons why.

6 years agoCull a comment
Greg Hurrell [Sun, 3 Apr 2016 05:15:52 +0000 (22:15 -0700)] 
Cull a comment

6 years agoAdd basic support for "generic" (catch-all) VimL statements
Greg Hurrell [Sat, 2 Apr 2016 23:20:26 +0000 (16:20 -0700)] 
Add basic support for "generic" (catch-all) VimL statements

6 years agoAdd missed import
Greg Hurrell [Sat, 2 Apr 2016 22:32:41 +0000 (15:32 -0700)] 
Add missed import

Was supposed to be included in d1d8c43.

6 years agoFix a lint
Greg Hurrell [Sat, 2 Apr 2016 22:31:40 +0000 (15:31 -0700)] 
Fix a lint

6 years agoAdd plugin name to Reader state
Greg Hurrell [Sat, 2 Apr 2016 22:31:15 +0000 (15:31 -0700)] 
Add plugin name to Reader state

6 years agoImprove lookahead rules for special tokens
Greg Hurrell [Sat, 2 Apr 2016 21:58:06 +0000 (14:58 -0700)] 
Improve lookahead rules for special tokens

6 years agoFix phrasing run-on consuming special tokens
Greg Hurrell [Sat, 2 Apr 2016 06:58:44 +0000 (23:58 -0700)] 
Fix phrasing run-on consuming special tokens

Without this, we parse:

  " |thing|
  " # foo

As if it were:

  " |thing| # foo

ie. "# foo" becomes just more phrasing content instead of a special

Just a quick and dirty fix. Will need to come up with something nicer.

6 years agoDedupe dupes
Greg Hurrell [Sat, 2 Apr 2016 06:17:06 +0000 (23:17 -0700)] 
Dedupe dupes

6 years agoHandle colons in function names
Greg Hurrell [Sat, 2 Apr 2016 04:39:18 +0000 (21:39 -0700)] 
Handle colons in function names

6 years agoFix lints
Greg Hurrell [Sat, 2 Apr 2016 04:01:29 +0000 (21:01 -0700)] 
Fix lints

Some good ones in here, seeing as I was trying to figure out how to get
rid of those explicit `return`s the other day without much luck.

6 years agoAdd crude error reporting for duplicate symbols
Greg Hurrell [Sat, 2 Apr 2016 03:51:10 +0000 (20:51 -0700)] 
Add crude error reporting for duplicate symbols

6 years agoPrefix plugin name to title anchors
Greg Hurrell [Sat, 2 Apr 2016 01:56:41 +0000 (18:56 -0700)] 
Prefix plugin name to title anchors

6 years agoRemove unnecessary `join`
Greg Hurrell [Sat, 2 Apr 2016 01:41:27 +0000 (18:41 -0700)] 
Remove unnecessary `join`

6 years agoDo single walk in symbol visitor
Greg Hurrell [Sat, 2 Apr 2016 01:40:42 +0000 (18:40 -0700)] 
Do single walk in symbol visitor

6 years agoMake symbol visitor extract plugin annotations
Greg Hurrell [Fri, 1 Apr 2016 14:33:07 +0000 (07:33 -0700)] 
Make symbol visitor extract plugin annotations

Adding a sort in here to make the tests happier (still one failure).
Eventually the table will probably become a set and be
order-insensitive, so we can drop the sort.

6 years agoMove sanitizeAnchor into AST module
Greg Hurrell [Fri, 1 Apr 2016 14:22:44 +0000 (07:22 -0700)] 
Move sanitizeAnchor into AST module

There may be a better place for this, but for now sticking it in here so
that it can be used by both the Markdown printer and the symbol visitor
(which both already depend on the AST module).

6 years agoStart augmenting symbol table
Greg Hurrell [Fri, 1 Apr 2016 14:18:54 +0000 (07:18 -0700)] 
Start augmenting symbol table

This is a no-op change, other than adding the failing
tests. Real functionality to come.

6 years agoAccept multiple output files
Greg Hurrell [Fri, 1 Apr 2016 07:15:53 +0000 (00:15 -0700)] 
Accept multiple output files

If none supplied, will right to stdout alone,
and probably in Markdown.

6 years agoMore shortcuts
Greg Hurrell [Fri, 1 Apr 2016 07:04:08 +0000 (00:04 -0700)] 
More shortcuts

6 years agoGet rid of another runReader call
Greg Hurrell [Fri, 1 Apr 2016 07:02:17 +0000 (00:02 -0700)] 
Get rid of another runReader call

6 years agoGet rid of an ugly explicit runReader call
Greg Hurrell [Fri, 1 Apr 2016 06:54:26 +0000 (23:54 -0700)] 
Get rid of an ugly explicit runReader call

6 years agoMore simplification
Greg Hurrell [Fri, 1 Apr 2016 06:36:42 +0000 (23:36 -0700)] 
More simplification

Including removal of some braindead code.

6 years agoUse better ordering with =<< instead of >>=
Greg Hurrell [Fri, 1 Apr 2016 06:26:03 +0000 (23:26 -0700)] 
Use better ordering with =<< instead of >>=

6 years agoAnother one liner
Greg Hurrell [Fri, 1 Apr 2016 06:24:08 +0000 (23:24 -0700)] 
Another one liner

This one is suckishly hard to read though because of the ordering.
Unless I can figure out a way to make it better I am going to revert it

6 years agoReadability
Greg Hurrell [Fri, 1 Apr 2016 06:18:57 +0000 (23:18 -0700)] 

Is this better? No idea. It is longer, but probably less noisy.

6 years agoMore terseness
Greg Hurrell [Fri, 1 Apr 2016 06:17:24 +0000 (23:17 -0700)] 
More terseness

6 years agoSimplify markdown function
Greg Hurrell [Fri, 1 Apr 2016 01:02:08 +0000 (18:02 -0700)] 
Simplify markdown function

6 years agoImprove link styling
Greg Hurrell [Fri, 1 Apr 2016 00:54:34 +0000 (17:54 -0700)] 
Improve link styling

6 years agoRemove an extraneous comment
Greg Hurrell [Fri, 1 Apr 2016 00:54:00 +0000 (17:54 -0700)] 
Remove an extraneous comment

6 years agoAdd separator support
Greg Hurrell [Fri, 1 Apr 2016 00:53:41 +0000 (17:53 -0700)] 
Add separator support

6 years agoUse symbol table to conditionalize Link printing behavior
Greg Hurrell [Thu, 31 Mar 2016 14:36:53 +0000 (07:36 -0700)] 
Use symbol table to conditionalize Link printing behavior

Stuff we have in our symbol table becomes an internal link. Stuff we
haven't seen is probably a Vim help target outside our control (or a
error on the part of the documentation author, but we can't know that),
and we render it, for now, using backticks.

This introduces a couple of test failures, but I am not fixing them yet;
need to decide what I want the actual behavior here to be. Perhaps
backticks will be fine.

6 years agoDon't shadow `nodes` function
Greg Hurrell [Thu, 31 Mar 2016 14:36:53 +0000 (07:36 -0700)] 
Don't shadow `nodes` function

6 years agoAdd some labeling comments
Greg Hurrell [Thu, 31 Mar 2016 14:36:53 +0000 (07:36 -0700)] 
Add some labeling comments

6 years agoDRY up ugly reader pattern a bit
Greg Hurrell [Thu, 31 Mar 2016 14:36:53 +0000 (07:36 -0700)] 
DRY up ugly reader pattern a bit

Still not sure what the right way to do this is, but this is still an

6 years agoTake first, clowny steps towards using a Reader
Greg Hurrell [Thu, 31 Mar 2016 16:07:31 +0000 (09:07 -0700)] 
Take first, clowny steps towards using a Reader

6 years agoPrepare to thread symbol "table" through via reader monad
Greg Hurrell [Thu, 31 Mar 2016 14:18:32 +0000 (07:18 -0700)] 
Prepare to thread symbol "table" through via reader monad

6 years agoFactor out repeated computation of `node p`
Greg Hurrell [Thu, 31 Mar 2016 14:13:28 +0000 (07:13 -0700)] 
Factor out repeated computation of `node p`

Hopefully doesn't harm readability too much.

6 years agoCollapse `node` into a single function in Markdown printer
Greg Hurrell [Thu, 31 Mar 2016 14:04:10 +0000 (07:04 -0700)] 
Collapse `node` into a single function in Markdown printer

This may enable me to share code between the different branches (eg. via
a `where` block) or if I have to add something monadic, I'll have a
single point to do so.

6 years agoFold `md` into `node` function in Markdown printer
Greg Hurrell [Thu, 31 Mar 2016 13:57:27 +0000 (06:57 -0700)] 
Fold `md` into `node` function in Markdown printer

I think this is going to enable some useful code reuse
as I refactor the `node` function to add reader state.

6 years agoRemove underived Show instances
Greg Hurrell [Thu, 31 Mar 2016 06:02:43 +0000 (23:02 -0700)] 
Remove underived Show instances

Not sure if this is a good idea or not, but got it from reading this:


> The problem with using Show is that Show is just supposed to transform
> a given data type into a string in the most vanilla way possible. If I
> can show a data type, I should theoretically be able to reverse that
> operation by reading the string back in and getting the original data
> type I started with. This makes injecting markup and formatting really
> awkward. You should keep Show free of surprises for the sake of
> debugging if nothing else.

So, let's go with what the system produces.