code: def linesubst(line, variables):
      
      # trivial no substitution early detection:
      if '{{' not in line and '\\' not in line:
          return line
      st = NORM
      out = ""
      curvar = ""
      for c in line:
          if st is NORM:
              if c == '{':
                  st = ONE
              elif c == '\\':
                  st = LIT
              else:
                  out += c
          elif st is LIT:
              out += c
              st = NORM
          elif st is ONE:
              if c == '{':
                  st = TWO
              elif c == '\\':
                  out += '{'
                  st = LIT
              else:
                  out += '{' + c
                  st = NORM
          elif st is TWO:
              if c == '\\':
                  st = TLIT
              elif c == '}':
                  st = TERM
              else:
                  curvar += c
          elif st is TLIT:
              curvar += c
              st = TWO
          elif st is TERM:
              if c == '}':
                  if curvar not in variables:
                      LOG.warning("Unknown variable %r detected, will just be replaced by an empty string", curvar)
                  else:
                      LOG.debug("Substitution of {{%s}} by %r", curvar, variables[curvar])
  
                      value = variables[curvar]
                      if isinstance(value, (float, int, long)):
                          value = str(value)
  
                      out += value
                  curvar = ''
                  st = NORM
              elif c == '\\':
                  curvar += '}'
                  st = TLIT
              else:
                  curvar += '}' + c
                  st = TWO
      if st is not NORM:
          LOG.warning("st is not NORM at end of line: " + line)
          LOG.warning("returned substitution: " + out)
      return out
docs: In a string, substitute '{{varname}}' occurrences with the value of
      variables['varname'], '\\' being an escaping char...
      If at first you don't understand this function, draw its finite state
      machine and everything will become crystal clear :)