Browse Source

Initial setcounter plugin (not working)

pull/208/head
Oliverpool 8 years ago
parent
commit
33319b0b25
  1. 48
      patacrep/content/setcounter.py
  2. 4
      test/test_content/setcounter.control
  3. 7
      test/test_content/setcounter.source
  4. 5
      test/test_content/test_content.py
  5. 3
      test/test_songbook/content.tex.control
  6. 1
      test/test_songbook/content.yaml

48
patacrep/content/setcounter.py

@ -0,0 +1,48 @@
"""Allows to set an arbitrary value to any LaTeX counter (like `songnum`)."""
from patacrep.content import ContentItem, ContentList, validate_parser_argument
class CounterSetter(ContentItem):
"""Set a counter."""
# pylint: disable=too-few-public-methods
def __init__(self, name, value):
self.name = name
self.value = value
def render(self, __context):
"""Set the value of the counter."""
return r'\setcounter{{{}}}{{{}}}'.format(self.name, self.value)
#pylint: disable=unused-argument
@validate_parser_argument("""
type: //any
of:
- //nil
- //int
- type: //rec
optional:
name: //str
value: //int
""")
def parse(keyword, argument, config):
"""Parse the counter setter.
Arguments:
- nothing
reset the "songnum" counter to 1
- an int
reset the "songnum" counter to this value
- a dict:
- name ("songnum"): the counter to set;
- value: value to set the counter to;
"""
if argument is None:
argument = {}
if isinstance(argument, int):
argument = {'value': argument}
name = argument.get('name', 'songnum')
value = argument.get('value', 1)
return ContentList([CounterSetter(name, value)])
CONTENT_PLUGINS = {'setcounter': parse}

4
test/test_content/setcounter.control

@ -0,0 +1,4 @@
- setcounter{songnum}{101}
- setcounter{songnum}{1}
- setcounter{songnum}{5}
- setcounter{counter_name}{-1}

7
test/test_content/setcounter.source

@ -0,0 +1,7 @@
- setcounter:
value: 101
- setcounter:
- setcounter: 5
- setcounter:
name: counter_name
value: -1

5
test/test_content/test_content.py

@ -10,7 +10,7 @@ import yaml
from pkg_resources import resource_filename
from patacrep import content, files
from patacrep.content import song, section, songsection, tex
from patacrep.content import song, section, setcounter, songsection, tex
from patacrep.songbook import prepare_songbook
from .. import logging_reduced
@ -89,6 +89,9 @@ class FileTest(unittest.TestCase, metaclass=dynamic.DynamicTest):
elif isinstance(elem, tex.LaTeX):
return files.path2posix(elem.filename)
elif isinstance(elem, setcounter.CounterSetter):
return elem.render(None)[1:]
else:
raise Exception(elem)

3
test/test_songbook/content.tex.control

@ -122,6 +122,9 @@ guitar,
\songsection{Test of song section}
\setcounter{songnum}{101}
\begin{songs}{titleidx,authidx}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% content_datadir/content/song.csg

1
test/test_songbook/content.yaml

@ -11,6 +11,7 @@ content:
- section: Test of section
- sort:
- songsection: Test of song section
- setcounter: 101
- cwd:
# relative to yaml songfile
path: content_datadir/content

Loading…
Cancel
Save