Skip to content

Commit

Permalink
[tinystory] Add minor work for first revision of project
Browse files Browse the repository at this point in the history
  • Loading branch information
psyomn committed Apr 18, 2021
1 parent aa07578 commit aebdd5c
Show file tree
Hide file tree
Showing 8 changed files with 140 additions and 18 deletions.
5 changes: 5 additions & 0 deletions tinystory/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,8 @@ Run `make` in the root directory. Then you can run the binary in this
directory. You just need to pass the proper flags to the binary to
point to a story repository, and an assets directory (with the html
templates).

# todo

Since we're dealing with graphs, might be nice to have some checks to
make sure that certain nodes are not orphaned.
4 changes: 4 additions & 0 deletions tinystory/lib/parser.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
/**
* A very simple parser that relies on stories that are written in
* json
*/
package tinystory

import (
Expand Down
2 changes: 2 additions & 0 deletions tinystory/lib/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ func (s *Server) HandleStory(w http.ResponseWriter, r *http.Request) {
nodeIndex = maybeNodeIndex
}

// TODO: make a safe index check here with min(len(documents), actual)

responseData := struct {
Title string
Authors []string
Expand Down
2 changes: 2 additions & 0 deletions tinystory/lib/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ type Session struct {
Port string
Repository string
Assets string

ExperimentalParser string
}

func MakeDefaultSession() *Session {
Expand Down
63 changes: 63 additions & 0 deletions tinystory/lib/tinystory_parser.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/**
* A more experimental parser for the tinystory project. I'm mostly
* leveraging around generating json for now. Maybe we can scrap that
* in the future for our very own parser...
*/
package tinystory

import (
"errors"
"io"
"os"
)

type TokenTypeEnum uint64

const (
TokenKeyword TokenTypeEnum = iota
TokenWord
TokenWhitespace
TokenNewline
TokenNumber
)

// TODO: this will eventually be used
// nolint
var terminals = []string{
"TITLE",
"COMMENTS",
"AUTHORS",
"CHOICE",
"FRAGMENT",
"ENDFRAGMENT",
"GOTO",
}

type Token struct {
Type TokenTypeEnum
Value string
LineNumber uint64
}

func ParseTinyStoryFormat(path string) (*Document, error) {
fs, err := os.Open(path)
if err != nil {
return nil, err
}
doc, err := ParseTinystoryFormat(fs)
return doc, err
}

func ParseTinystoryFormat(reader io.ReadCloser) (*Document, error) {
var b [1]byte

for {
_, err := reader.Read(b[:])
if errors.Is(err, io.EOF) {
break
}
}

defer reader.Close()
return nil, nil
}
6 changes: 6 additions & 0 deletions tinystory/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,19 @@ func makeFlags(sess *tinystory.Session) {
flag.StringVar(&sess.Port, "port", sess.Port, "specify port to bind server")
flag.StringVar(&sess.Repository, "repository", sess.Repository, "specify story repository")
flag.StringVar(&sess.Assets, "assets", sess.Assets, "specify the assets root path")
flag.StringVar(&sess.ExperimentalParser, "experimental-parser", sess.ExperimentalParser, "use experimental parser")
flag.Parse()
}

func main() {
sess := tinystory.MakeDefaultSession()
makeFlags(sess)

if sess.ExperimentalParser != "" {
// TODO experimental for now
_, _ = tinystory.ParseTinyStoryFormat(sess.ExperimentalParser)
}

// TODO: there should be a less bleedy initialization here
docs, err := tinystory.ParseAllInDir(sess.Repository)
if err != nil {
Expand Down
36 changes: 18 additions & 18 deletions tinystory/stories/simple.json
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
{
"title": "the platypus war: part CXXII",
"authors": ["jon doe", "jon smith", "jane doe"],
"website": "https://github.com/psyomn/cacophagy",
"title": "the platypus war: part CXXII",
"authors": ["jon doe", "jon smith", "jane doe"],
"website": "https://github.com/psyomn/cacophagy",

"dev_comments": "maybe we can do something better in the future, like provide an editor to create stories easier",
"dev_comments": "maybe we can do something better in the future, like provide an editor to create stories easier",

"story": [
[0,
"you wake up in a dark room. you see a platypus. what do you do?",
[["choose to greet the platypus", 1],
["choose to ignore the platypus", 1],
["choose to look at the ceiling", 1]]
],
"story": [
[0,
"you wake up in a dark room. you see a platypus. what do you do?",
[["choose to greet the platypus", 1],
["choose to ignore the platypus", 1],
["choose to look at the ceiling", 1]]
],

[1,
[1,
"the platypus heeds your greeting, and tells you about a terrible war between the platypii and gingerbread men\nHe asks for your help.",
[["help platypus fight gingerbread men", 2],
["decline to help the platypus", 3]]
],
[["help platypus fight gingerbread men", 2],
["decline to help the platypus", 3]]
],

[2,
[2,
"you help the platypus by travelling far lands, finding where the gingerbread men infestation is, and drown their whole civilizatio in mapple syrup. the battle is won!\nThe platypus thanks you, and you go home.",
[]
],
],

[3,
"you decline to help the platypus because you have better things to do. gingerbread men erupt from the ground, grab the platypus and eat it alive right in front of you. you monster.",
[]
]
]
]
}
40 changes: 40 additions & 0 deletions tinystory/stories/simple.tinystory
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
TITLE
The platypus war: part CXXII;

AUTHORS
jon doe;
jon smith;
jane doeson;
jake andbake;


COMMENTS
maybe we can do something better in the future, like provide
an editor to create stories easier. For now maybe the

FRAGMENT 0
you wake up in a dark room. you see a platypus. what do you do?
GOTO 1 choose to greet the platypus
GOTO 1 choose to ignore the platypus
GOTO 1 choose to look at the ceiling
ENDFRAGMENT

FRAGMENT 1
the platypus heeds your greeting, and tells you about a terrible war
between the platypii and gingerbread men. He asks for your help.
GOTO 2 help platypus fight gingerbread men
GOTO 3 decline to help the platypus
ENDFRAGMENT

FRAGMENT 2
you help the platypus by travelling far lands, finding where the
gingerbread men infestation is, and drown their whole civilizatio in
mapple syrup. the battle is won! The platypus thanks you, and you go
home.
ENDFRAGMENT

FRAGMENT 3
you decline to help the platypus because you have better things to
do. gingerbread men erupt from the ground, grab the platypus and eat
it alive right in front of you. you monster.
ENDFRAGMENT

0 comments on commit aebdd5c

Please sign in to comment.