code: def parse(text):
      lines = iter(text.split("\n"))
  
      target = None
      rule = None
      inputs = []
      outputs = []
  
      try:
          target = next(lines)[:-1]  # strip trailing colon
  
          line = next(lines)
          (match, rule) = match_strip(line, "  input: ")
          if match:
              (match, line) = match_strip(next(lines), "    ")
              while match:
                  type = None
                  (match, line) = match_strip(line, "| ")
                  if match:
                      type = "implicit"
                  (match, line) = match_strip(line, "|| ")
                  if match:
                      type = "order-only"
                  inputs.append((line, type))
                  (match, line) = match_strip(next(lines), "    ")
  
          match, _ = match_strip(line, "  outputs:")
          if match:
              (match, line) = match_strip(next(lines), "    ")
              while match:
                  outputs.append(line)
                  (match, line) = match_strip(next(lines), "    ")
      except StopIteration:
          pass
  
      return Node(inputs, rule, target, outputs)
  
imports: import argparse
  import os
  import socket
  import subprocess
  import sys
  import webbrowser
  from collections import namedtuple
label_desc: Use image node_id 3 for calling a global function with example usage: parse(text) and returns: Node