#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# This file contains classes to handle .typos files in $GTFREE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see .
#
# Copyright 2012 Børre Gaup
#
import unittest
import re
class TestTypoline(unittest.TestCase):
"""Class to test the typos synchroniser
"""
def setUp(self):
pass
def testGetTypo(self):
tl = Typoline('deatalaš\tdeaŧalaš')
self.assertEqual(tl.getTypo(), 'deatalaš')
tl = Typoline('deatalaš\tdeaŧalaš')
self.assertEqual(tl.getTypo(), 'deatalaš')
def testGetCorrection(self):
tl = Typoline('deatalaš\tdeaŧalaš')
self.assertEqual(tl.getCorrection(), 'deaŧalaš')
tl = Typoline('deatalaš')
self.assertEqual(tl.getCorrection(), None)
def testMakeTypoline(self):
tl = Typoline('deatalaš\tdeaŧalaš')
self.assertEqual(tl.makeTypoline(), 'deatalaš\tdeaŧalaš')
tl = Typoline('deatalaš\tdeatalaš')
self.assertEqual(tl.makeTypoline(), 'deatalaš')
def testSetCorrection(self):
tl = Typoline('deatalaš\tdeaŧalaš')
tl.setCorrection('ditalaš')
self.assertEqual(tl.getCorrection(), 'ditalaš')
class Typoline:
"""Class to parse a line of a .typos file
"""
def __init__(self, typoline):
"""Parse a typoline
A typoline has a number showing frequency of the typo, the typo and
possibly a correction
"""
parts = typoline.split('\t')
self.typo = parts[0]
if len(parts) == 2:
self.correction = parts[1]
else:
self.correction = None
def getTypo(self):
return self.typo
def setCorrection(self, correction):
self.correction = correction
def getCorrection(self):
return self.correction
def makeTypoline(self):
"""Make a typoline from the three data parts in this class
"""
result = self.typo
if self.correction and self.correction != self.typo:
result = result + '\t' + self.correction
return result
class Typos:
"""A class that reads typos and corrections from a .typos files and stores them in a dict
"""
def __init__(self, typosfile):
"""Read typos from typosfile. If a correction exists, insert the typos
and corrections into self.typos
"""
self.typos = {}
typofile = open(typosfile)
for line in typofile:
if line.strip():
tl = Typoline(line.rstrip())
if tl.getCorrection() and tl.getTypo() != tl.getCorrection():
self.typos[tl.getTypo()] = tl.getCorrection()
typofile.close()
def getTypos(self):
"""Return the typos dict
"""
return self.typos
if __name__ == '__main__':
for test in [TestTypoline]:
testSuite = unittest.TestSuite()
testSuite.addTest(unittest.makeSuite(test))
unittest.TextTestRunner().run(testSuite)