# coding: utf8
"""
Модуль предоставляет тип координат слова в исходном тексте.
Координаты не меняются.
"""

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

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

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

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

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

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

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

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

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

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

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

		return сам.__цСтр

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

		return сам.__цПоз


	def __str__(сам)->str:
		return "Коорд: стр="+str(сам.цСтр)+"   поз="+str(сам.цПоз)
