Development history of Finto in 2013

2013-05-03

Some changes in comments.

2013-05-22

Stack notation. finto-voc.

2013-05-23

Improvement: link? factored out.

Impromevent: link and +link rewritten: now invisible links point to the latest linked passage; this makes the narrative syntax easiero, because the one passage id is enough for any number of links (the visible link and any amount of invisible links).

Fix: ?link now prints the link text when the link cannot be created.

New: ?|link and ?|l.

New: | as alias for print_cr.

2013-05-26

New: Completed the parsing forms for printing and linking.

Change: Removed all combined forms of printing and linking in a new paragraph (|p, |l...) It's simpler and clearer to use | apart.

Change: | now is an alias for (paragraph); the narrative syntax is clearer this way.

Change: p (as for "print" or "paragraph") is renamed to t (text); p" is renamed to t".

Change: passage is renamed to passage:.

Change: field prefix is changed from "~" to "+".

Fix: typo in comment of obey.

New: module used in order to hide the inner words.

2013-06-01

Fix: config variables were hidden.

Change: Removed ?link, ?l, ?+link and ?+l; they are not generic enough. A simple if in the narrative game can be used instead.

Change: link? renamed to linkable?.

Change: removed the hidden words that were used only once.

New: =link and =l" create visible links to the latest linked passage.

2013-06-09

Fix: =l" called link instead of =link.

Fix: The value of /command was wrong.

New: t\" and l\".

Change: text config values are stored with Gforth dynamic strings, not with svariable.

2013-06-19 (start of version A-01)

Change: The keywords management is rewritten: Keywords were dynamic strings in a fixed length table; now they are Forth words in a wordlist. This makes command completion possible, and makes the number of keywords per passage unlimited.

2013-06-20

Change: all "passage(s)" are changed to "scene(s)"; it's a better name.

New: separate wordlist for node keywords and common keywords.

2013-06-26 (start of version A-02)

Change: removed keywords/scene, forgotten from previous versions.

Change: all "scene(s)" are changed to "node(s)"; it's even a better name.

2013-06-28 (start of version A-03)

Change: better names for invisible link words; the low-level words can be used directly: (link) renamed to keyword, with alias k' (=link) renamed to +keyword , with alias +k'

Change: removed the words that create links with C-like \-escape sequences

Change: removed :keyword, forgotten from previous versions.

2013-07-05

New: Two tools words to forbid and allow spaces during the input.

2013-07-06

Fix: Now node saves the value of this on the return stack.

2013-07-07

Change: "common keywords" renamed to "global keywords".

New: First tools for global keywords.

Change: Better factoring for (+keyword).

New: -trailing_punctuation removes all chars, not only the last one.

2013-07-08

New: exit_this to force an early exit from the current node.

2013-07-09

First ideas for a new syntax for the narrative. The goal is the nodes to be created on the fly the first time they are used. No need to define their ids first.

Current syntax:

  node: node1-id
  node: node2-id

  node1-id :node
    node2-id k" keyword" +k" keyword"
    ;node

New syntax:

  node: node1-id
    ( definition )
    s" keyword" *-> node2-id
    s" keyword" <-*
    s" keyword" -> node2-id
    s" keyword" <-
    ;node

Options to create a link:

  s" keyword" -> node  \ invisible
  s" keyword" => node  \ visible

  s" keyword" -> node  \ invisible
  s" keyword" --> node  \ visible

  s" keyword" -> node  \ invisible xxx best
  s" keyword" *-> node  \ visible  xxx best

  s" keyword" => node  \ invisible
  s" keyword" ==> node  \ visible

  s" keyword" >> node  \ invisible
  s" keyword" >>> node  \ visible

Options to create an additional link:

  s" keyword" -<  \ invisible
  s" keyword" =<  \ visible

  s" keyword" <-  \ invisible
  s" keyword" <--  \ visible

  s" keyword" <-  \ invisible xxx best
  s" keyword" <-*  \ visible xxx best

  s" keyword" ->=  \ invisible
  s" keyword" =>=  \ visible

  s" keyword" <<
  s" keyword" >>+
  s" keyword" <+
  s" keyword" <==
  +" keyword"

  s" keyword" +>  \ invisible
  s" keyword" ++>  \ invisible

2013-07-10 (start of version A-04)

First changes to implement the new link syntax:

  s" keyword" -> node  \ invisible
  s" keyword" *-> node  \ visible
  s" keyword" <-  \ invisible, additional
  s" keyword" <-*  \ visible, additional

Nodes are created when defined or linked the first time.

Fix: the stack became unbalanced when a parsed node was already known.

Change: removed the subnodes stuff; secondary and secondary? are used instead.

The parsing syntax created new problems and obscure bugs. Besides, although node structures are created on the fly when nodes are defined or linked the first time, nodes id may be needed before linking or defining them, so the problem is not totally solved. It is much easier to return to a non-parsing syntax.

Draft ideas for a new syntax:

s" keyword" ~node ->  \ invisible
s" keyword" =->  \ invisible, synonym
s" keyword" ~node *->  \ visible
s" keyword" =*->  \ visible, synonym

s" keyword" ~node ->  \ invisible
s" keyword" +>  \ invisible, synonym
s" keyword" ~node *->  \ visible
s" keyword" *+>  \ visible, synonym

s" keyword" ~node ->  \ invisible
s" keyword" +->  \ invisible, synonym
s" keyword" ~node *->  \ visible
s" keyword" *+->  \ visible, synonym

\ good:
s" keyword" ~node ->  \ invisible
s" keyword" =>  \ invisible, synonym
s" keyword" ~node .->  \ visible
s" keyword" .=>  \ visible, synonym

\ parsing is not clear and is less versatile:
~node <" keyword"  \ invisible
<<" keyword"  \ invisible, synonym
~node <." keyword"  \ visible
<<." keyword"  \ visible, synonym

\ alternative
s" keyword" ~node ->  \ invisible
s" keyword" +>  \ invisible, synonym
s" keyword" ~node *->  \ visible
s" keyword" *+>  \ visible, synonym

\ alternative
s" keyword" ~node ->  \ invisible
s" keyword" <-  \ invisible, synonym
s" keyword" ~node .->  \ visible
s" keyword" <-.  \ visible, synonym

\ alternative
s" keyword" ~node ->  \ invisible
s" keyword" ->>  \ invisible, synonym
s" keyword" ~node .->  \ visible
s" keyword" .->>  \ visible, synonym

\ alternative
s" keyword" ~node ~  \ invisible
s" keyword" +~  \ invisible, synonym
s" keyword" ~node .~  \ visible
s" keyword" +.~  \ visible, synonym

\ alternative
s" keyword" ~node &  \ invisible
s" keyword" &&  \ invisible, synonym
s" keyword" ~node .&  \ visible
s" keyword" .&&  \ visible, synonym

\ good ( -> points to the next word, what looks strange,
\ but ^ seems a good option):
s" keyword" ~node ^  \ invisible
s" keyword" ^^  \ invisible, synonym
s" keyword" ~node .^  \ visible
s" keyword" .^^  \ visible, synonym

2013-07-10 (start of version A-05)

New syntax without parsing words (except for node:, that creates the node ids), same as version A-03.

New syntax for links:

s" keyword" ~node ^  \ invisible
s" keyword" ^^  \ invisible, synonym
s" keyword" ~node .^  \ visible
s" keyword" .^^  \ visible, synonym

Change: /node is a value, not a constant; this lets the programmer to extend the nodes structure.

Change: node ids are values, not constants; this lets the programmer to change the meaning of nodes any time.

New: "prompt" and "what?" are dynamic strings, not a string constants; /command is a calculation, not a constant; these changes let the programmer to customize the input line.

2013-07-10

New compact syntax instead of :global_keywords:

  local   global
  -----   ------
  ^       +^
  ^^      +^^

2013-07-12

Change: node renamed to ->.

2013-09-29

Change: (->) defined with :noname.