#!/usr/bin/env python # # Copyright 2008 The Closure Linter Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS-IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Classes to represent positions within strings.""" __author__ = ('robbyw@google.com (Robert Walker)', 'ajp@google.com (Andy Perelson)') class Position(object): """Object representing a segment of a string. Attributes: start: The index in to the string where the segment starts. length: The length of the string segment. """ def __init__(self, start, length): """Initialize the position object. Args: start: The start index. length: The number of characters to include. """ self.start = start self.length = length def Get(self, string): """Returns this range of the given string. Args: string: The string to slice. Returns: The string within the range specified by this object. """ return string[self.start:self.start + self.length] def Set(self, target, source): """Sets this range within the target string to the source string. Args: target: The target string. source: The source string. Returns: The resulting string """ return target[:self.start] + source + target[self.start + self.length:] def AtEnd(string): """Create a Position representing the end of the given string. Args: string: The string to represent the end of. Returns: The created Position object. """ return Position(len(string), 0) AtEnd = staticmethod(AtEnd) def IsAtEnd(self, string): """Returns whether this position is at the end of the given string. Args: string: The string to test for the end of. Returns: Whether this position is at the end of the given string. """ return self.start == len(string) and self.length == 0 def AtBeginning(): """Create a Position representing the beginning of any string. Returns: The created Position object. """ return Position(0, 0) AtBeginning = staticmethod(AtBeginning) def IsAtBeginning(self): """Returns whether this position is at the beginning of any string. Returns: Whether this position is at the beginning of any string. """ return self.start == 0 and self.length == 0 def All(string): """Create a Position representing the entire string. Args: string: The string to represent the entirety of. Returns: The created Position object. """ return Position(0, len(string)) All = staticmethod(All) def Index(index): """Returns a Position object for the specified index. Args: index: The index to select, inclusively. Returns: The created Position object. """ return Position(index, 1) Index = staticmethod(Index)