HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers84/zuiderbos.nl/vendor/nqxcode/phpmorphy/src/phpMorphy/Aot/MrdManager.php
<?php
/*
* This file is part of phpMorphy project
*
* Copyright (c) 2007-2012 Kamaev Vladimir <heromantor@users.sourceforge.net>
*
*     This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
*     This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
*     You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/

class phpMorphy_Aot_MrdManager {
	protected
		$opened = false,
		$language,
		$encoding,
		$mrd,
		$gram_info;

	function open($filePath) {
		$mwz = $this->openMwz($filePath);
		$this->encoding = $mwz->getEncoding();
		$mrd_path = $mwz->getMrdPath();
		$language = $mwz->getLanguage();

		$this->mrd = $this->openMrd($mrd_path, $this->encoding);

		$this->gram_info = $this->convertFromGramtabToDict(
			$this->openGramTab($language, $this->encoding)
		);

		$this->language = $language;
		$this->opened = true;
	}

	function isOpened() {
		return $this->opened;
	}

	protected function checkOpened() {
		if(!$this->isOpened()) {
			throw new phpMorphy_Aot_Mrd_Exception(__CLASS__ . " not initialized, use open() method");
		}
	}

	function getEncoding() {
		$this->checkOpened();
		return $this->getEncoding();
	}

	function getLanguage() {
		$this->checkOpened();
		return $this->language;
	}

	function getMrd() {
		$this->checkOpened();
		return $this->mrd;
	}

	function getGramInfo() {
		$this->checkOpened();
		return $this->gram_info;
	}

	protected function convertFromGramtabToDict($ancodes) {
		$result = array();

		foreach($ancodes as $ancode) {
			$ancode_id = $ancode->getAncodeId();

			$result[$ancode_id] = new phpMorphy_Dict_Ancode(
				$ancode_id,
				$ancode->getPartOfSpeech(),
				$ancode->isPartOfSpeechProductive(),
				$ancode->getGrammems()
			);
		}

		return new ArrayIterator($result);
	}

	protected function openMwz($wmzFile) {
		return new phpMorphy_Aot_Mwz_File($wmzFile);
	}

	protected function openMrd($path, $encoding) {
		return new phpMorphy_Aot_Mrd_File($path, $encoding);
	}

	protected function openGramTab($lang, $encoding) {
		try {
			return $this->createGramTabFile(
				$this->getGramTabPath($lang),
				$encoding,
				$this->createGramInfoFactory($lang)
			);
		} catch(Exception $e) {
			throw new phpMorphy_Aot_Mrd_Exception('Can`t parse gramtab file: ' . $e->getMessage());
		}
	}

	protected function getGramTabPath($lang) {
		$rml = new phpMorphy_Aot_Rml_IniFile();

		return $rml->getGramTabPath($lang);
	}

	protected function createGramInfoFactory($lang) {
		return new phpMorphy_Aot_GramTab_GramInfoFactory(
            phpMorphy_Aot_GramTab_GramInfoHelperAbstract::createByLanguage($lang)
        );
	}

	protected function createGramTabFile($file, $encoding, phpMorphy_Aot_GramTab_GramInfoFactory $factory) {
		return new phpMorphy_Aot_GramTab_File($file, $encoding, $factory);
	}
}