# coding: utf8
"""
Координаты слов можно менять.
"""

if True:
	from .модКоордФикс import тКоордФикс
	from пакОберон.пакКомпилятор.пакСущность.пакОшибка import тОшибка

class тКоордИзм(тКоордФикс):
	__slots__ = ("ош",)
	def __init__(сам, пОберон, пцСтр:int, пцПоз:int)->None:
		def НомСтр_Проверить():
			if type(пцСтр) != int:
				стрОш = "пцСтр должен быть числом, type(пцСтр)="+str(type(пцСтр))
				сам.ош.Внутр("__init__()", стрОш)
				return

			if пцСтр < 1:
				стрОш = "пцСтр должен быть 1 или больше, пцСтр="+str(пцСтр)
				сам.ош.Внутр("__init__()", стрОш)
				return

		def НомПоз_Проверить():
			if type(пцПоз) != int:
				стрОш = " пцПоз должен быть числом, type(пцПоз)="+str(type(пцПоз))
				сам.ош.ОшВнутр("__init__()", стрОш)
				return

			if пцПоз < 0:
				стрОш = "пцПоз должен быть 0 или больше, пцПоз="+str(пцПоз)
				сам.ош.Внутр("__init__()", стрОш)
				return

		сам.ош = тОшибка(пОберон, "тКоордИзм")

		НомСтр_Проверить()
		if сам.ош.бВнутр:
			return

		НомПоз_Проверить()
		if сам.ош.бВнутр:
			return

		сам.__цСтр :int = пцСтр # Строка в исходнике
		сам.__цПоз :int = пцПоз # позиция в строке исходника

	@property
	def цСтр(сам)->int:
		if type(сам.__цСтр) != int:
			стрОш = "цСтр должен быть int, type="+str(type(сам.__цСтр))
			сам.ош.Внутр("цСтр", стрОш)
			return -3
		if сам.__цСтр < 0:
			стрОш = "цСтр должен быть больше 0 "+str(сам.__цСтр)
			сам.ош.Внутр("цСтр", стрОш)
			return -3
		return сам.__цСтр

	@цСтр.setter
	def цСтр(сам, пцСтр:int):
		if type(пцСтр) != int:
			стрСообщ = "пцСтр должен быть числом"+str(type(пцСтр))
			сам.ош.Внутр("цСтр(пцСтр)", стрСообщ)
			return

		if пцСтр <= 0:
			стрСообщ = "пцСтр должен быть 1 или больше, пцСтр="+str(пцСтр)
			сам.ош.Внутр("цСтр(пцСтр)", стрСообщ)
			return

		сам.__цСтр = пцСтр

	def Стр_Доб(сам):
		сам.__цСтр += 1

	@property
	def цПоз(сам)->int:
		if type(сам.__цПоз) != int:
			стрОш = "сам.цПоз должен быть int, type="+str(type(сам.__цПоз))
			сам.ош.Внутр("цПоз", стрОш)
			return -3
		if сам.__цПоз < 0:
			стрСообщ = "сам.цПоз должен быть 0 или больше, пцСтр="+str(сам.__цПоз)
			сам.ош.Внутр("цПоз", стрСообщ)
			return -3
		return сам.__цПоз

	@цПоз.setter
	def цПоз(сам, пцПоз:int):
		if type(пцПоз) != int:
			стрСообщ = "пцПоз должен быть int, type= "+str(type(пцПоз))
			сам.ош.Внутр("Поз_Уст(пцПоз)", стрСообщ)
			return

		if пцПоз < 0:
			стрСообщ = "пцПоз должен быть 0 или больше, пцПоз="+str(пцПоз)
			сам.ош.Внутр("Поз_Уст(пцПоз)", стрСообщ)
			return

		сам.__цПоз = пцПоз

	def Поз_Доб(сам):
		"""
		Сдвигает позицию в исходнике дальше
		"""
		сам.__цПоз += 1

	def Поз_Сброс(сам):
		сам.__цПоз = 0
