gather parser, todo: runtime, gather+divert
This commit is contained in:
parent
88e8994a0b
commit
e494c4f855
|
@ -28,7 +28,10 @@ local stitch = Ct(P('=')^1/'stitch' * wh * C(id) * wh * P('=')^0) * wh
|
|||
|
||||
local optDiv = '[' * C((P(1) - ']')^0) * ']'
|
||||
|
||||
local optStars = wh * Ct(C'*' * (sp * C'*')^0)/table.getn
|
||||
local optStar = sp * C'*'
|
||||
local optStars = wh * Ct(optStar * optStar^0)/table.getn
|
||||
local gatherMark = sp * C'-'
|
||||
local gatherMarks = wh * Ct(gatherMark * gatherMark^0)/table.getn
|
||||
|
||||
local hash = P('#')
|
||||
local tag = hash * wh * V'text'
|
||||
|
@ -48,6 +51,7 @@ local ink = P({
|
|||
optAns = V'optAnsWithDiv' + V'optAnsWithoutDiv',
|
||||
|
||||
option = Ct(Cc'option' * optStars * sp * V'optAns'),
|
||||
gather = Ct(Cc'gather' * gatherMarks * sp * V'text'),
|
||||
|
||||
|
||||
|
||||
|
@ -56,7 +60,7 @@ local ink = P({
|
|||
|
||||
para = tagAbove^0 * Ct(Cc'para' * V'text') * tagEnd^0 * wh + tagGlobal,
|
||||
|
||||
line = V'stmt' + V'para',
|
||||
line = V'stmt' + V'gather'+ V'para' ,
|
||||
lines = Ct(V'line'^0)
|
||||
})
|
||||
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
return {
|
||||
ink=[[
|
||||
I looked at Monsieur Fogg
|
||||
* ... and I could contain myself no longer.
|
||||
'What is the purpose of our journey, Monsieur?'
|
||||
'A wager,' he replied.
|
||||
* * 'A wager!'[] I returned.
|
||||
He nodded.
|
||||
* * * 'But surely that is foolishness!'
|
||||
* * * 'A most serious matter then!'
|
||||
- - - He nodded again.
|
||||
* * * 'But can we win?'
|
||||
'That is what we will endeavour to find out,' he answered.
|
||||
* * * 'A modest wager, I trust?'
|
||||
'Twenty thousand pounds,' he replied, quite flatly.
|
||||
* * * I asked nothing further of him then[.], and after a final, polite cough, he offered nothing more to me. <>
|
||||
* * 'Ah[.'],' I replied, uncertain what I thought.
|
||||
- - After that, <>
|
||||
* ... but I said nothing[] and <>
|
||||
- we passed the day in silence.
|
||||
- -> END
|
||||
]], expected= {
|
||||
{"para", "I looked at Monsieur Fogg"},
|
||||
{"option", 1, "... and I could contain myself no longer.", "", ""},
|
||||
{"para", "'What is the purpose of our journey, Monsieur?'"},
|
||||
{"para", "'A wager,' he replied."},
|
||||
{"option", 2, "'A wager!'", "", " I returned."},
|
||||
{"para", "He nodded."},
|
||||
{"option", 3, "'But surely that is foolishness!'", "", ""},
|
||||
{"option", 3, "'A most serious matter then!'", "", ""},
|
||||
{"gather", 3, "He nodded again."},
|
||||
{"option", 3, "'But can we win?'", "", ""},
|
||||
{"para", "'That is what we will endeavour to find out,' he answered."},
|
||||
{"option", 3, "'A modest wager, I trust?'", "", ""},
|
||||
{"para", "'Twenty thousand pounds,' he replied, quite flatly."},
|
||||
{
|
||||
"option",
|
||||
3,
|
||||
"I asked nothing further of him then",
|
||||
".",
|
||||
", and after a final, polite cough, he offered nothing more to me. "
|
||||
},
|
||||
{"glue"},
|
||||
{"option", 2, "'Ah", ".'", ",' I replied, uncertain what I thought."},
|
||||
{"gather", 2, "After that, "},
|
||||
{"glue"},
|
||||
{"option", 1, "... but I said nothing", "", " and "},
|
||||
{"glue"},
|
||||
{"gather", 1, "we passed the day in silence."},
|
||||
{"gather", 2, "> END"} -- FIXME!
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -3,12 +3,16 @@ ink=[[
|
|||
* "Murder!"
|
||||
** A
|
||||
* * A
|
||||
* * * B
|
||||
*** B
|
||||
* "Suicide!"
|
||||
]], expected= {
|
||||
|
||||
{"option", 1, '"Murder!"', "", ""},
|
||||
{"option", 2, "A", "", ""},
|
||||
{"option", 2, "A", "", ""},
|
||||
{"option", 3, "B", "", ""},
|
||||
{"option", 3, "B", "", ""},
|
||||
{"option", 1, '"Suicide!"', "", ""}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ function testBranching() doTest('branching') end
|
|||
function testGlue() doTest('glue') end
|
||||
function testInclude() doTest('include') end
|
||||
function testTags() doTest('tags') end
|
||||
function testGather() doTest('gather') end
|
||||
|
||||
|
||||
--- runtime ---
|
||||
|
@ -40,7 +41,7 @@ end
|
|||
|
||||
function testRChoices()
|
||||
local story = pink.getStory('test/runtime/branching.ink')
|
||||
story.choosePathString('back_in_london');
|
||||
story.choosePathString('back_in_london');
|
||||
story.continue()
|
||||
luaunit.assertEquals(story.continue(), 'exactly')
|
||||
luaunit.assertFalse(story.canContinue)
|
||||
|
@ -49,7 +50,8 @@ function testRChoices()
|
|||
luaunit.assertEquals(story.continue(), 'My master clouted me firmly around the head')
|
||||
luaunit.assertEquals(#story.currentChoices, 2)
|
||||
story.chooseChoiceIndex(2)
|
||||
luaunit.assertEquals(story.continue(), 'huhu')
|
||||
luaunit.assertEquals(story.continue(), 'huhu')
|
||||
luaunit.assertFalse(story.canContinue)
|
||||
end
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue