python - Indentation preserving formatting of multiline strings -


i generate bits of (c++) code using format strings such as

memfn_declaration = '''\   {doc}   {static}auto {fun}({formals}){const}     -> {result}; ''' 

format strings nice this, there way make them keep indentation level {doc} here? it's typically multiline.

i know can indent string corresponding doc 2 spaces, know there plenty of functions end, that's not i'm asking: i'm looking work without tweaking strings pass.

now you've posted own answer , clarified @ little more want. think better implement defining own str subclass extends way strings can formatted supporting new conversion type, 'i', must followed decimal number representing level of indentation desired.

here's implementation works in both python 2 & 3:

import re textwrap import dedent try:     textwrap import indent except importerror:     def indent(s, prefix):         return prefix + prefix.join(s.splitlines(true))  class indentable(str):     indent_format_spec = re.compile(r'''i([0-9]+)''')      def __format__(self, format_spec):         matches = self.indent_format_spec.search(format_spec)         if matches:             level = int(matches.group(1))             first, sep, text = dedent(self).strip().partition('\n')             return first + sep + indent(text, ' ' * level)          return super(indentable, self).__format__(format_spec)  sample_format_string = '''\   {doc:i2}   {static}auto {fun}({formals}){const}     -> {result}; '''  specs = {     'doc': indentable('''         // convert string float.         // quite obsolete.         // use better instead.     '''),     'static': '',     'fun': 'atof',     'formals': 'const char*',     'const': '',     'result': 'float', }  print(sample_format_string.format(**specs)) 

output:

  // convert string float.   // quite obsolete.   // use better instead.   auto atof(const char*)     -> float; 

Comments

Popular posts from this blog

ios - RestKit 0.20 — CoreData: error: Failed to call designated initializer on NSManagedObject class (again) -

laravel - PDOException in Connector.php line 55: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) -

java - Digest auth with Spring Security using javaconfig -