code: def is_macro_name(func_name, dialect):
      
      if not func_name:
          return False
      if dialect == 'lisp':
          return re.search('^(macro|def|do|with-)', func_name, re.I)
      if dialect == 'scheme':
          return re.search('^(call-|def|with-)', func_name)
      if dialect == 'clojure':
          return re.search('^(def|with)', func_name)
      if dialect == 'newlisp':
          return re.search('^(macro|def)', func_name)
      else:
          return False
docs: is_macro_name(func_name : str, dialect : str) -> bool
  
      >>> is_macro_name('yacc:define-parser')
      True
  
      Tests if a word is a macro using the language's/dialect's convention,
      e.g macros in Lisp usually start with 'def' and 'with' in Scheme. Saves
      the effort of finding all the macros in Lisp/Scheme/Clojure/newLISP and storing
      them in a list.