hasAttribute('startFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getStartFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * @throws NoNodePosition * * @psalm-pure */ public static function getEndColumn(string $source, Node $node): int { if (! $node->hasAttribute('endFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getEndFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * * @psalm-pure */ private static function calculateColumn(string $source, int $position): int { $sourceLength = strlen($source); if ($position >= $sourceLength) { throw InvalidNodePosition::fromPosition($position); } $lineStartPosition = strrpos($source, "\n", $position - $sourceLength); /** @psalm-var positive-int */ return $lineStartPosition === false ? $position + 1 : $position - $lineStartPosition; } } __halt_compiler();----SIGNATURE:----dpQcEdOed/LwOdy/oV9mHKAcawH8UUeWJgkQ4ePv/wIcJMdkiVLYJsikeMsTZJc0EpeFgO1COPA8rF6jsxQWQa7dl77WUjVQmYkA9GCuRnS9UtMTNincFY1s+dFpROJ3Cn2UuUCzstaNOtllN3iB1Z0gtuzWcq32dZpbZByPpmqfMFZsuHWrPqUP8+BBnhVDr7CnfeoMnXqFlPY27oUBKamUsMiggbO44LlQ5zQLpMlM3fiEJ2FeVKb9N4ScHoIJJGTWcL8hzZQYVhU4RJvz1XGoFFeAI6Ae0Tia2sAtDjDoXU7rgcvB41dO50Elf+LSvwWDOhMsoDxBtZ8r2UAsXztHHDBthMsnafPLH5RU0wI2XsjZtiO91H61HnXhkTrb6jiIVcUAUbJZn/jfIHk94XXTxBJXS0I+SUKEhPI6ZmwnmEUmPaiyPcdhl9SG6O5mJ95VWq7icWKoHQgcgK+H0d6JaHY6QZyFZfBgDjBREm6mbSjVAHY+c8nzqKHSZaY65n/wIHN1O6fN0LmLFbZtQaar12N/sTpOcuIILg2Wgx36FYt2T3hJAY7AGEO6CkpNF4fLwYLJpKdqwoCtcIScITImP1CfqxtqNtXLQpZjOihkqIer03SN+/YNSrPr6g/no0HJLoFtNNY8sSeKAXDEkqzi/u4WV+T9G9v71kYCu6w=----ATTACHMENT:----ODU0MzE3NDk5NjY0OTg0MSA3MTM4Mjg0NDkzMTYxNjU2IDgzOTI3NDAxOTYzNTIwMjU=