def _find_options(self, source, name, lineno):
options = {}<EOL>for m in self._OPTION_DIRECTIVE_RE.finditer(source):<EOL><INDENT>option_strings = m.group(<NUM_LIT:1>).replace('<STR_LIT:U+002C>', '<STR_LIT:U+0020>').split()<EOL>for option in option_strings:<EOL><INDENT>if (option[<NUM_LIT:0>] not in '<STR_LIT>' or<EOL>option[<NUM_LIT:1>:] not in OPTIONFLAGS_BY_NAME):<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>' %<EOL>(lineno+<NUM_LIT:1>, name, option))<EOL><DEDENT>flag = OPTIONFLAGS_BY_NAME[option[<NUM_LIT:1>:]]<EOL>options[flag] = (option[<NUM_LIT:0>] == '<STR_LIT:+>')<EOL><DEDENT><DEDENT>if options and self._IS_BLANK_OR_COMMENT(source):<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>' %<EOL>(lineno, name, source))<EOL><DEDENT>return options<EOL>
Return a dictionary containing option overrides extracted from
option directives in the given source string.

`name` is the string's name, and `lineno` is the line number
where the example starts; both are used for error messages.