in tools/licenses/lib/licenses.dart [583:645]
_SplitLicense _splitLicense(String body, { bool verifyResults = true }) {
final Iterator<_LineRange> lines = _walkLinesForwards(body).iterator;
if (!lines.moveNext())
throw 'tried to split empty license';
int end = 0;
while (true) {
final String line = lines.current.value;
if (line == 'Author:' ||
line == 'This code is derived from software contributed to Berkeley by' ||
line == 'The Initial Developer of the Original Code is') {
if (!lines.moveNext())
throw 'unexpected end of block instead of author when looking for copyright';
if (lines.current.value.trim() == '')
throw 'unexpectedly blank line instead of author when looking for copyright';
end = lines.current.end;
if (!lines.moveNext())
break;
} else if (line.startsWith('Authors:') || line == 'Other contributors:') {
if (line != 'Authors:') {
// assume this line contained an author as well
end = lines.current.end;
}
if (!lines.moveNext())
throw 'unexpected end of license when reading list of authors while looking for copyright';
final String firstAuthor = lines.current.value;
int subindex = 0;
while (subindex < firstAuthor.length && (firstAuthor[subindex] == ' ' ||
firstAuthor[subindex] == '\t'))
subindex += 1;
if (subindex == 0 || subindex > firstAuthor.length)
throw 'unexpected blank line instead of authors found when looking for copyright';
end = lines.current.end;
final String prefix = firstAuthor.substring(0, subindex);
while (lines.moveNext() && lines.current.value.startsWith(prefix)) {
final String nextAuthor = lines.current.value.substring(prefix.length);
if (nextAuthor == '' || nextAuthor[0] == ' ' || nextAuthor[0] == '\t')
throw 'unexpectedly ragged author list when looking for copyright';
end = lines.current.end;
}
if (lines.current == null)
break;
} else if (line.contains(halfCopyrightPattern)) {
do {
if (!lines.moveNext())
throw 'unexpected end of block instead of copyright holder when looking for copyright';
if (lines.current.value.trim() == '')
throw 'unexpectedly blank line instead of copyright holder when looking for copyright';
end = lines.current.end;
} while (lines.current.value.contains(trailingComma));
if (!lines.moveNext())
break;
} else if (copyrightStatementPatterns.every((RegExp pattern) => !line.contains(pattern))) {
break;
} else {
end = lines.current.end;
if (!lines.moveNext())
break;
}
}
if (verifyResults && 'Copyright ('.allMatches(body, end).isNotEmpty && !body.startsWith('If you modify libpng'))
throw 'the license seems to contain a copyright:\n===copyright===\n${body.substring(0, end)}\n===license===\n${body.substring(end)}\n=========';
return _SplitLicense(body, end);
}