| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ Utility to remove comments from JSON files so that they can be parsed by |
| json.loads.""" |
| |
| def _ReadString(input, start, output): |
| output.append('"') |
| in_escape = False |
| for pos in xrange(start, len(input)): |
| output.append(input[pos]) |
| if in_escape: |
| in_escape = False |
| else: |
| if input[pos] == '\\': |
| in_escape = True |
| elif input[pos] == '"': |
| return pos + 1 |
| return pos |
| |
| def _ReadComment(input, start, output): |
| for pos in xrange(start, len(input)): |
| if input[pos] in ['\r', '\n']: |
| output.append(input[pos]) |
| return pos + 1 |
| return pos |
| |
| def Nom(input): |
| output = [] |
| pos = 0 |
| while pos < len(input): |
| if input[pos] == '"': |
| pos = _ReadString(input, pos + 1, output) |
| elif input[pos:pos+2] == '//': |
| pos = _ReadComment(input, pos + 2, output) |
| else: |
| output.append(input[pos]) |
| pos += 1 |
| return ''.join(output) |