mirror of
https://github.com/Oreolek/gamebookformat.git
synced 2024-05-21 02:18:18 +03:00
Include multiple tags. Now also exclude tags.
This commit is contained in:
parent
df7ea9838a
commit
23999c2373
|
@ -10,6 +10,13 @@ Go on to [[demo1]] or [[demo2]] or [[notindemo1]].
|
||||||
* notindemo1
|
* notindemo1
|
||||||
This section is not included in the demo. Turn to [[notindemo2]].
|
This section is not included in the demo. Turn to [[notindemo2]].
|
||||||
|
|
||||||
|
* actuallynotindemoeither :demo:notthisone:
|
||||||
|
Tagged as demo, but excluded anyay because of the --exclude flag given.
|
||||||
|
|
||||||
|
* notatall :notthisone:
|
||||||
|
Not included at all, because excluded by command-line, and not
|
||||||
|
demo-tagged either.
|
||||||
|
|
||||||
* demo1 :demo:
|
* demo1 :demo:
|
||||||
This is the first demo section (not counting the start section).
|
This is the first demo section (not counting the start section).
|
||||||
You can go on to the end at [[theend]].
|
You can go on to the end at [[theend]].
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
--include demo
|
--include demo --exclude notthisone
|
|
@ -11,6 +11,13 @@ Go on to [[demo1]] or [[demo2]] or [[notindemo1]].
|
||||||
* notindemo1
|
* notindemo1
|
||||||
This section is not included in the demo. Turn to [[notindemo2]].
|
This section is not included in the demo. Turn to [[notindemo2]].
|
||||||
|
|
||||||
|
* actuallynotindemoeither :demo:notthisone:
|
||||||
|
Tagged as demo, but excluded anyay because of the --exclude flag given.
|
||||||
|
|
||||||
|
* notatall :notthisone:
|
||||||
|
Not included at all, because excluded by command-line, and not
|
||||||
|
demo-tagged either.
|
||||||
|
|
||||||
* demo1 :demo:
|
* demo1 :demo:
|
||||||
This is the first demo section (not counting the start section).
|
This is the first demo section (not counting the start section).
|
||||||
You can go on to the end at [[theend]].
|
You can go on to the end at [[theend]].
|
||||||
|
|
1
examples/withoutdemo.gamebook.options
Normal file
1
examples/withoutdemo.gamebook.options
Normal file
|
@ -0,0 +1 @@
|
||||||
|
--exclude notthisone
|
|
@ -68,10 +68,11 @@ def format_gamebook(inputfilenames,
|
||||||
import_default_map_file,
|
import_default_map_file,
|
||||||
templatedirs,
|
templatedirs,
|
||||||
shuffle,
|
shuffle,
|
||||||
includetag,
|
includetags,
|
||||||
|
excludetags,
|
||||||
mapfilenames):
|
mapfilenames):
|
||||||
output_format = make_output(outputfilename, templatedirs)
|
output_format = make_output(outputfilename, templatedirs)
|
||||||
book = sections.Book(make_bookid(outputfilename), includetag)
|
book = sections.Book(make_bookid(outputfilename), includetags, excludetags)
|
||||||
for inputfilename in inputfilenames:
|
for inputfilename in inputfilenames:
|
||||||
parse_file_to_book(open(inputfilename, 'r'), book)
|
parse_file_to_book(open(inputfilename, 'r'), book)
|
||||||
if import_default_map_file:
|
if import_default_map_file:
|
||||||
|
@ -194,8 +195,10 @@ if __name__ == '__main__':
|
||||||
help='input gamebook file (eg test.gamebook)')
|
help='input gamebook file (eg test.gamebook)')
|
||||||
ap.add_argument('outputfile', metavar='outputfile',
|
ap.add_argument('outputfile', metavar='outputfile',
|
||||||
help='output file (eg test.tex or test.rtf)')
|
help='output file (eg test.tex or test.rtf)')
|
||||||
ap.add_argument('-i', '--include', action='store', metavar='T',
|
ap.add_argument('-i', '--include', action='append', metavar='T',
|
||||||
dest='includetag', help='only include sections with tag')
|
dest='includetags', help='only include sections with tag')
|
||||||
|
ap.add_argument('-e', '--exclude', action='append', metavar='T',
|
||||||
|
dest='excludetags', help='exclude sections with tag')
|
||||||
ap.add_argument('-M', '--no-default-map', action='store_false',
|
ap.add_argument('-M', '--no-default-map', action='store_false',
|
||||||
dest='import_default_map_file',
|
dest='import_default_map_file',
|
||||||
help='ignore default map file')
|
help='ignore default map file')
|
||||||
|
@ -223,5 +226,6 @@ if __name__ == '__main__':
|
||||||
args.import_default_map_file,
|
args.import_default_map_file,
|
||||||
templatedirs,
|
templatedirs,
|
||||||
args.shuffle,
|
args.shuffle,
|
||||||
args.includetag,
|
args.includetags or [],
|
||||||
|
args.excludetags or [],
|
||||||
args.mapfiles or [])
|
args.mapfiles or [])
|
||||||
|
|
|
@ -13,6 +13,7 @@ gamebook on paper or a screen (or for debugging it).
|
||||||
: optional arguments:
|
: optional arguments:
|
||||||
: -h, --help show this help message and exit
|
: -h, --help show this help message and exit
|
||||||
: -i T, --include T only include sections with tag
|
: -i T, --include T only include sections with tag
|
||||||
|
: -e T, --exclude T exclude sections with tag
|
||||||
: -M, --no-default-map ignore default map file
|
: -M, --no-default-map ignore default map file
|
||||||
: -t D, --template D add custom template dir
|
: -t D, --template D add custom template dir
|
||||||
: -o D, --option D add template override options dir
|
: -o D, --option D add template override options dir
|
||||||
|
|
12
sections.py
12
sections.py
|
@ -13,6 +13,9 @@ class Section:
|
||||||
def hastag(self, tag):
|
def hastag(self, tag):
|
||||||
return tag in self.tags
|
return tag in self.tags
|
||||||
|
|
||||||
|
def hastag_in_set(self, tags):
|
||||||
|
return not self.tags.isdisjoint(tags)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "Section(%s, %s, %s)" % (repr(self.name), repr(self.text),
|
return "Section(%s, %s, %s)" % (repr(self.name), repr(self.text),
|
||||||
repr(self.tags))
|
repr(self.tags))
|
||||||
|
@ -59,13 +62,14 @@ STR_BOOK_CONFIG = set(['id', 'title', 'author', 'starttext', 'hideintrotext',
|
||||||
INT_BOOK_CONFIG = set(['max'])
|
INT_BOOK_CONFIG = set(['max'])
|
||||||
|
|
||||||
class Book:
|
class Book:
|
||||||
def __init__(self, bookid='gamebook', includetag=None):
|
def __init__(self, bookid='gamebook', includetags=None, excludetags=None):
|
||||||
self.sections = []
|
self.sections = []
|
||||||
self.introsections = []
|
self.introsections = []
|
||||||
self.from_name = {}
|
self.from_name = {}
|
||||||
self.nr_sections = {}
|
self.nr_sections = {}
|
||||||
self.codewords = set()
|
self.codewords = set()
|
||||||
self.includetag = includetag
|
self.includetags = set(includetags or [])
|
||||||
|
self.excludetags = set(excludetags or [])
|
||||||
self.config = {'max' : 0,
|
self.config = {'max' : 0,
|
||||||
'title' : 'Gamebook',
|
'title' : 'Gamebook',
|
||||||
'author' : '',
|
'author' : '',
|
||||||
|
@ -85,7 +89,9 @@ class Book:
|
||||||
raise Exception("Unknown book option '%s'." % name)
|
raise Exception("Unknown book option '%s'." % name)
|
||||||
|
|
||||||
def add(self, section):
|
def add(self, section):
|
||||||
if self.includetag and not section.hastag(self.includetag):
|
if ((len(self.includetags) > 0
|
||||||
|
and not section.hastag_in_set(self.includetags))
|
||||||
|
or section.hastag_in_set(self.excludetags)):
|
||||||
return
|
return
|
||||||
if section.name in self.from_name:
|
if section.name in self.from_name:
|
||||||
raise Exception('Duplicate section names (%s) not allowed.' %
|
raise Exception('Duplicate section names (%s) not allowed.' %
|
||||||
|
|
|
@ -36,14 +36,14 @@ class TestBook(TestCase):
|
||||||
self.assertEqual(b.config['max'], 0)
|
self.assertEqual(b.config['max'], 0)
|
||||||
|
|
||||||
def test_includetag(self):
|
def test_includetag(self):
|
||||||
b = sections.Book(includetag='test')
|
b = sections.Book(includetags=['test'])
|
||||||
sec = sections.Section("nnn", "text")
|
sec = sections.Section("nnn", "text")
|
||||||
sec.add_tags(['some', 'test', 'other'])
|
sec.add_tags(['some', 'test', 'other'])
|
||||||
b.add(sec)
|
b.add(sec)
|
||||||
self.assertEqual(b.sections, [sec])
|
self.assertEqual(b.sections, [sec])
|
||||||
|
|
||||||
def test_excludetag(self):
|
def test_excludetag(self):
|
||||||
b = sections.Book(includetag='test')
|
b = sections.Book(includetags=['test'])
|
||||||
sec = sections.Section("nnn", "text")
|
sec = sections.Section("nnn", "text")
|
||||||
sec.add_tags(['some', 'other'])
|
sec.add_tags(['some', 'other'])
|
||||||
b.add(sec)
|
b.add(sec)
|
||||||
|
|
Loading…
Reference in a new issue