aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'roverlay/ebuild/abstractcomponents.py')
-rw-r--r--roverlay/ebuild/abstractcomponents.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/roverlay/ebuild/abstractcomponents.py b/roverlay/ebuild/abstractcomponents.py
new file mode 100644
index 0000000..73dac03
--- /dev/null
+++ b/roverlay/ebuild/abstractcomponents.py
@@ -0,0 +1,93 @@
+# R Overlay -- ebuild creation, <?>
+# Copyright 2006-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+INDENT = '\t'
+
+def listlike ( ref ):
+ return hasattr ( ref, '__iter__' ) and not isinstance ( ref, str )
+
+
+class ListValue ( object ):
+ def __init__ ( self, value, indent_level=1, empty_value=None ):
+ self.set_level ( indent_level )
+
+ self.empty_value = empty_value
+
+
+ self.single_line = False
+ self.indent_lines = True
+ # only used in multi line mode
+ self.append_indented_newline = True
+
+ self.val_join = ' '
+
+ self.set_value ( value )
+
+
+ def __len__ ( self ):
+ l = len ( self.value )
+ return l if self.empty_value is None else l - 1
+
+ def set_level ( self, level ):
+ self.level = level
+ self.var_indent = (level - 1) * INDENT
+ self.val_indent = level * INDENT
+ self.line_join = '\n' + self.val_indent
+ # --- end of set_level (...) ---
+
+ def set_value ( self, value ):
+ self.value = list()
+ if self.empty_value is not None:
+ self.value.append ( self.empty_value )
+ self.add_value ( value )
+ # --- end of set_value (...) ---
+
+ def add_value ( self, value ):
+ if value is None:
+ pass
+ elif listlike ( value ):
+ self.value.extend ( value )
+ else:
+ self.value.append ( value )
+ # --- end of add_value (...) ---
+
+ add = add_value
+
+ def to_str ( self ):
+ if len ( self.value ) == 0:
+ ret = ""
+ elif len ( self.value ) == 1:
+ ret = str ( self.value [0] )
+ elif self.single_line:
+ ret = self.val_join.join ( self.value )
+ else:
+ ret = self.line_join.join ( ( self.value ) )
+ if self.append_indented_newline:
+ ret += self.var_indent + '\n'
+
+ return ret
+ # --- end of to_str (...) ---
+
+ __str__ = to_str
+
+
+class EbuildVar ( object ):
+
+ def __init__ ( self, name, value, priority ):
+ self.name = name
+ self.priority = priority
+ self.value = value
+ self.set_level ( 0 )
+
+ def set_level ( self, level ):
+ self.level = level
+ self.indent = self.level * INDENT
+ if hasattr ( self.value, 'set_level' ):
+ self.value.set_level ( level + 1 )
+ # --- end of set_level (...) ---
+
+ def active ( self ): return True
+
+ def __str__ ( self ):
+ return '%s%s="%s"' % ( self.indent, self.name, self.value )