From 33319b0b2589a302eb07df20b1e57b51d5ba4b15 Mon Sep 17 00:00:00 2001 From: Oliverpool Date: Thu, 25 Feb 2016 21:36:10 +0100 Subject: [PATCH] Initial setcounter plugin (not working) --- patacrep/content/setcounter.py | 48 ++++++++++++++++++++++++++ test/test_content/setcounter.control | 4 +++ test/test_content/setcounter.source | 7 ++++ test/test_content/test_content.py | 5 ++- test/test_songbook/content.tex.control | 3 ++ test/test_songbook/content.yaml | 1 + 6 files changed, 67 insertions(+), 1 deletion(-) create mode 100755 patacrep/content/setcounter.py create mode 100644 test/test_content/setcounter.control create mode 100644 test/test_content/setcounter.source diff --git a/patacrep/content/setcounter.py b/patacrep/content/setcounter.py new file mode 100755 index 00000000..41729b52 --- /dev/null +++ b/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} diff --git a/test/test_content/setcounter.control b/test/test_content/setcounter.control new file mode 100644 index 00000000..dff14be1 --- /dev/null +++ b/test/test_content/setcounter.control @@ -0,0 +1,4 @@ +- setcounter{songnum}{101} +- setcounter{songnum}{1} +- setcounter{songnum}{5} +- setcounter{counter_name}{-1} \ No newline at end of file diff --git a/test/test_content/setcounter.source b/test/test_content/setcounter.source new file mode 100644 index 00000000..d1987d66 --- /dev/null +++ b/test/test_content/setcounter.source @@ -0,0 +1,7 @@ +- setcounter: + value: 101 +- setcounter: +- setcounter: 5 +- setcounter: + name: counter_name + value: -1 diff --git a/test/test_content/test_content.py b/test/test_content/test_content.py index 221a3212..af6dec57 100644 --- a/test/test_content/test_content.py +++ b/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) diff --git a/test/test_songbook/content.tex.control b/test/test_songbook/content.tex.control index 4120642f..a431c2db 100644 --- a/test/test_songbook/content.tex.control +++ b/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 diff --git a/test/test_songbook/content.yaml b/test/test_songbook/content.yaml index 15b06a91..2585a91f 100644 --- a/test/test_songbook/content.yaml +++ b/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