extendable argument parser