parameters: (text, start_pattern)
return_statement: return text[start_position:position - 1]
docstring: r"""Retrieves all the text between matching open and close parentheses.
  
    Given a string of lines and a regular expression string, retrieve all the text
    following the expression and between opening punctuation symbols like
    (, [, or {, and the matching close-punctuation symbol. This properly nested
    occurrences of the punctuations, so for the text like
      printf(a(), b(c()));
    a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'.
    start_pattern must match string having an open punctuation symbol at the end.
  
    Args:
      text: The lines to extract text. Its comments and strings must be elided.
             It can be single line and can span multiple lines.
      start_pattern: The regexp string indicating where to start extracting
                     the text.
    Returns:
      The extracted text.
      None if either the opening string or ending punctuation could not be found.
docstring_summary: r"""Retrieves all the text between matching open and close parentheses.
docstring_tokens: r Retrieves all the text between matching open and close parentheses .
function: def _GetTextInside(text, start_pattern):
    r"""Retrieves all the text between matching open and close parentheses.
  
    Given a string of lines and a regular expression string, retrieve all the text
    following the expression and between opening punctuation symbols like
    (, [, or {, and the matching close-punctuation symbol. This properly nested
    occurrences of the punctuations, so for the text like
      printf(a(), b(c()));
    a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'.
    start_pattern must match string having an open punctuation symbol at the end.
  
    Args:
      text: The lines to extract text. Its comments and strings must be elided.
             It can be single line and can span multiple lines.
      start_pattern: The regexp string indicating where to start extracting
                     the text.
    Returns:
      The extracted text.
      None if either the opening string or ending punctuation could not be found.
    """
    # TODO(unknown): Audit cpplint.py to see what places could be profitably
    # rewritten to use _GetTextInside (and use inferior regexp matching today).
  
    # Give opening punctuations to get the matching close-punctuations.
    matching_punctuation = {'(': ')', '{': '}', '[': ']'}
    closing_punctuation = set(matching_punctuation.itervalues())
  
    # Find the position to start extracting text.
    match = re.search(start_pattern, text, re.M)
    if not match:  # start_pattern not found in text.
      return None
    start_position = match.end(0)
  
    assert start_position > 0, (
        'start_pattern must ends with an opening punctuation.')
    assert text[start_position - 1] in matching_punctuation, (
        'start_pattern must ends with an opening punctuation.')
    # Stack of closing punctuations we expect to have in text after position.
    punctuation_stack = [matching_punctuation[text[start_position - 1]]]
    position = start_position
    while punctuation_stack and position < len(text):
      if text[position] == punctuation_stack[-1]:
        punctuation_stack.pop()
      elif text[position] in closing_punctuation:
        # A closing punctuation without matching opening punctuations.
        return None
      elif text[position] in matching_punctuation:
        punctuation_stack.append(matching_punctuation[text[position]])
      position += 1
    if punctuation_stack:
      # Opening punctuations left without matching close-punctuations.
      return None
    # punctuations match.
    return text[start_position:position - 1]
function_tokens: def _GetTextInside ( text , start_pattern ) : # TODO(unknown): Audit cpplint.py to see what places could be profitably # rewritten to use _GetTextInside (and use inferior regexp matching today). # Give opening punctuations to get the matching close-punctuations. matching_punctuation = { '(' : ')' , '{' : '}' , '[' : ']' } closing_punctuation = set ( matching_punctuation . itervalues ( ) ) # Find the position to start extracting text. match = re . search ( start_pattern , text , re . M ) if not match : # start_pattern not found in text. return None start_position = match . end ( 0 ) assert start_position > 0 , ( 'start_pattern must ends with an opening punctuation.' ) assert text [ start_position - 1 ] in matching_punctuation , ( 'start_pattern must ends with an opening punctuation.' ) # Stack of closing punctuations we expect to have in text after position. punctuation_stack = [ matching_punctuation [ text [ start_position - 1 ] ] ] position = start_position while punctuation_stack and position < len ( text ) : if text [ position ] == punctuation_stack [ - 1 ] : punctuation_stack . pop ( ) elif text [ position ] in closing_punctuation : # A closing punctuation without matching opening punctuations. return None elif text [ position ] in matching_punctuation : punctuation_stack . append ( matching_punctuation [ text [ position ] ] ) position += 1 if punctuation_stack : # Opening punctuations left without matching close-punctuations. return None # punctuations match. return text [ start_position : position - 1 ]