summaryrefslogtreecommitdiff
path: root/mercurial/formatter.py
diff options
context:
space:
mode:
Diffstat (limited to 'mercurial/formatter.py')
-rw-r--r--mercurial/formatter.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/mercurial/formatter.py b/mercurial/formatter.py
new file mode 100644
index 0000000..53a2022
--- /dev/null
+++ b/mercurial/formatter.py
@@ -0,0 +1,71 @@
+# formatter.py - generic output formatting for mercurial
+#
+# Copyright 2012 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+class baseformatter(object):
+ def __init__(self, ui, topic, opts):
+ self._ui = ui
+ self._topic = topic
+ self._style = opts.get("style")
+ self._template = opts.get("template")
+ self._item = None
+ def __bool__(self):
+ '''return False if we're not doing real templating so we can
+ skip extra work'''
+ return True
+ def _showitem(self):
+ '''show a formatted item once all data is collected'''
+ pass
+ def startitem(self):
+ '''begin an item in the format list'''
+ if self._item is not None:
+ self._showitem()
+ self._item = {}
+ def data(self, **data):
+ '''insert data into item that's not shown in default output'''
+ def write(self, fields, deftext, *fielddata, **opts):
+ '''do default text output while assigning data to item'''
+ for k, v in zip(fields.split(), fielddata):
+ self._item[k] = v
+ def plain(self, text, **opts):
+ '''show raw text for non-templated mode'''
+ pass
+ def end(self):
+ '''end output for the formatter'''
+ if self._item is not None:
+ self._showitem()
+
+class plainformatter(baseformatter):
+ '''the default text output scheme'''
+ def __init__(self, ui, topic, opts):
+ baseformatter.__init__(self, ui, topic, opts)
+ def __bool__(self):
+ return False
+ def startitem(self):
+ pass
+ def data(self, **data):
+ pass
+ def write(self, fields, deftext, *fielddata, **opts):
+ self._ui.write(deftext % fielddata, **opts)
+ def plain(self, text, **opts):
+ self._ui.write(text, **opts)
+ def end(self):
+ pass
+
+class debugformatter(baseformatter):
+ def __init__(self, ui, topic, opts):
+ baseformatter.__init__(self, ui, topic, opts)
+ self._ui.write("%s = {\n" % self._topic)
+ def _showitem(self):
+ self._ui.write(" " + repr(self._item) + ",\n")
+ def end(self):
+ baseformatter.end(self)
+ self._ui.write("}\n")
+
+def formatter(ui, topic, opts):
+ if ui.configbool('ui', 'formatdebug'):
+ return debugformatter(ui, topic, opts)
+ return plainformatter(ui, topic, opts)