def GetLineWidth()

in cpplint.py [0:0]


def GetLineWidth(line):
    """Determines the width of the line in column positions.

  Args:
    line: A string, which may be a Unicode string.

  Returns:
    The width of the line in column positions, accounting for Unicode
    combining characters and wide characters.
  """
    if isinstance(line, unicode):
        width = 0
        for uc in unicodedata.normalize('NFC', line):
            if unicodedata.east_asian_width(uc) in ('W', 'F'):
                width += 2
            elif not unicodedata.combining(uc):
                # Issue 337
                # https://mail.python.org/pipermail/python-list/2012-August/628809.html
                if (sys.version_info.major, sys.version_info.minor) <= (3, 2):
                    # https://github.com/python/cpython/blob/2.7/Include/unicodeobject.h#L81
                    is_wide_build = sysconfig.get_config_var("Py_UNICODE_SIZE") >= 4
                    # https://github.com/python/cpython/blob/2.7/Objects/unicodeobject.c#L564
                    is_low_surrogate = 0xDC00 <= ord(uc) <= 0xDFFF
                    if not is_wide_build and is_low_surrogate:
                        width -= 1

                width += 1
        return width
    else:
        return len(line)