diff --git a/src/list.py b/src/list.py
deleted file mode 100755
index 633cacfd..00000000
--- a/src/list.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-'''
-ponysay - Ponysay, cowsay reimplementation for ponies
-
-Copyright (C) 2012, 2013, 2014 Erkin Batu Altunbaş et al.
-
-
-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 program. If not, see .
-
-
-If you intend to redistribute ponysay or a fork of it commercially,
-it contains aggregated images, some of which may not be commercially
-redistribute, you would be required to remove those. To determine
-whether or not you may commercially redistribute an image make use
-that line ‘FREE: yes’, is included inside the image between two ‘$$$’
-lines and the ‘FREE’ is and upper case and directly followed by
-the colon.
-'''
-from common import *
-from ucs import *
-
-
-
-class List():
- '''
- File listing functions
- '''
-
- @staticmethod
- def __columnise(ponies):
- '''
- Columnise a list and prints it
-
- @param ponies:list<(str, str)> All items to list, each item should have to elements: unformated name, formated name
- '''
- ## Get terminal width, and a 2 which is the space between columns
- termwidth = gettermsize()[1] + 2
- ## Sort the ponies, and get the cells' widths, and the largest width + 2
- ponies.sort(key = lambda pony : pony[0])
- widths = [UCS.dispLen(pony[0]) for pony in ponies]
- width = max(widths) + 2 # longest pony file name + space between columns
-
- ## Calculate the number of rows and columns, can create a list of empty columns
- cols = termwidth // width # do not believe electricians, this means ⌊termwidth / width⌋
- rows = (len(ponies) + cols - 1) // cols
- columns = []
- for c in range(0, cols): columns.append([])
-
- ## Fill the columns with cells of ponies
- (y, x) = (0, 0)
- for j in range(0, len(ponies)):
- cell = ponies[j][1] + ' ' * (width - widths[j]);
- columns[x].append(cell)
- y += 1
- if y == rows:
- x += 1
- y = 0
-
- ## Make the columnisation nicer by letting the last row be partially empty rather than the last column
- diff = rows * cols - len(ponies)
- if (diff > 2) and (rows > 1):
- c = cols - 1
- diff -= 1
- while diff > 0:
- columns[c] = columns[c - 1][-diff:] + columns[c]
- c -= 1
- columns[c] = columns[c][:-diff]
- diff -= 1
-
- ## Create rows from columns
- lines = []
- for r in range(0, rows):
- lines.append([])
- for c in range(0, cols):
- if r < len(columns[c]):
- line = lines[r].append(columns[c][r])
-
- ## Print the matrix, with one extra blank row
- print('\n'.join([''.join(line)[:-2] for line in lines]))
- print()
-
-
- @staticmethod
- def simplelist(ponydirs, quoters = [], ucsiser = None):
- '''
- Lists the available ponies
-
- @param ponydirs:itr The pony directories to use
- @param quoters:__in__(str)→bool Set of ponies that of quotes
- @param ucsiser:(list)?→void Function used to UCS:ise names
- '''
- for ponydir in ponydirs: # Loop ponydirs
- ## Get all ponies in the directory
- _ponies = os.listdir(ponydir)
-
- ## Remove .pony from all files and skip those that does not have .pony
- ponies = []
- for pony in _ponies:
- if endswith(pony, '.pony'):
- ponies.append(pony[:-5])
-
- ## UCS:ise pony names, they are already sorted
- if ucsiser is not None:
- ucsiser(ponies)
-
- ## If ther directory is not empty print its name and all ponies, columnised
- if len(ponies) == 0:
- continue
- print('\033[1mponies located in ' + ponydir + '\033[21m')
- List.__columnise([(pony, '\033[1m' + pony + '\033[21m' if pony in quoters else pony) for pony in ponies])
-
-
- @staticmethod
- def linklist(ponydirs = None, quoters = [], ucsiser = None):
- '''
- Lists the available ponies with alternatives inside brackets
-
- @param ponydirs:itr The pony directories to use
- @param quoters:__in__(str)→bool Set of ponies that of quotes
- @param ucsiser:(list, map)?→void Function used to UCS:ise names
- '''
- ## Get the size of the terminal
- termsize = gettermsize()
-
- for ponydir in ponydirs: # Loop ponydirs
- ## Get all pony files in the directory
- _ponies = os.listdir(ponydir)
-
- ## Remove .pony from all files and skip those that does not have .pony
- ponies = []
- for pony in _ponies:
- if endswith(pony, '.pony'):
- ponies.append(pony[:-5])
-
- ## If there are no ponies in the directory skip to next directory, otherwise, print the directories name
- if len(ponies) == 0:
- continue
- print('\033[1mponies located in ' + ponydir + '\033[21m')
-
- ## UCS:ise pony names
- pseudolinkmap = {}
- if ucsiser is not None:
- ucsiser(ponies, pseudolinkmap)
-
- ## Create target–link-pair, with `None` as link if the file is not a symlink or in `pseudolinkmap`
- pairs = []
- for pony in ponies:
- if pony in pseudolinkmap:
- pairs.append((pony, pseudolinkmap[pony] + '.pony'));
- else:
- pairs.append((pony, os.path.realpath(ponydir + pony + '.pony') if os.path.islink(ponydir + pony + '.pony') else None))
-
- ## Create map from source pony to alias ponies for each pony
- ponymap = {}
- for pair in pairs:
- if (pair[1] is None) or (pair[1] == ''):
- if pair[0] not in ponymap:
- ponymap[pair[0]] = []
- else:
- target = pair[1][:-5]
- if '/' in target:
- target = target[target.rindex('/') + 1:]
- if target in ponymap:
- ponymap[target].append(pair[0])
- else:
- ponymap[target] = [pair[0]]
-
- ## Create list of source ponies concatenated with alias ponies in brackets
- ponies = {}
- for pony in ponymap:
- w = UCS.dispLen(pony)
- item = '\033[1m' + pony + '\033[21m' if (pony in quoters) else pony
- syms = ponymap[pony]
- syms.sort()
- if len(syms) > 0:
- w += 2 + len(syms)
- item += ' ('
- first = True
- for sym in syms:
- w += UCS.dispLen(sym)
- if first: first = False
- else: item += ' '
- item += '\033[1m' + sym + '\033[21m' if (sym in quoters) else sym
- item += ')'
- ponies[(item.replace('\033[1m', '').replace('\033[21m', ''), item)] = w
-
- ## Print the ponies, columnised
- List.__columnise(list(ponies))
-
-
- @staticmethod
- def onelist(standarddirs, extradirs = None, ucsiser = None):
- '''
- Lists the available ponies on one column without anything bold or otherwise formated
-
- @param standard:itr? Include standard ponies
- @param extra:itr? Include extra ponies
- @param ucsiser:(list)?→void Function used to UCS:ise names
- '''
- ## Get all pony files
- _ponies = []
- if standarddirs is not None:
- for ponydir in standarddirs:
- _ponies += os.listdir(ponydir)
- if extradirs is not None:
- for ponydir in extradirs:
- _ponies += os.listdir(ponydir)
-
- ## Remove .pony from all files and skip those that does not have .pony
- ponies = []
- for pony in _ponies:
- if endswith(pony, '.pony'):
- ponies.append(pony[:-5])
-
- ## UCS:ise and sort
- if ucsiser is not None:
- ucsiser(ponies)
- ponies.sort()
-
- ## Print each one on a seperate line, but skip duplicates
- last = ''
- for pony in ponies:
- if not pony == last:
- last = pony
- print(pony)
-
-
- @staticmethod
- def balloonlist(balloondirs, isthink):
- '''
- Prints a list of all balloons
-
- @param balloondirs:itr The balloon directories to use
- @param isthink:bool Whether the ponythink command is used
- '''
- ## Get the size of the terminal
- termsize = gettermsize()
-
- ## Get all balloons
- balloonset = set()
- for balloondir in balloondirs:
- for balloon in os.listdir(balloondir):
- ## Use .think if running ponythink, otherwise .say
- if isthink and endswith(balloon, '.think'):
- balloon = balloon[:-6]
- elif (not isthink) and endswith(balloon, '.say'):
- balloon = balloon[:-4]
- else:
- continue
-
- ## Add the balloon if there is none with the same name
- if balloon not in balloonset:
- balloonset.add(balloon)
-
- ## Print all balloos, columnised
- List.__columnise([(balloon, balloon) for balloon in list(balloonset)])
-
diff --git a/src/lists.py b/src/lists.py
new file mode 100755
index 00000000..2f912de4
--- /dev/null
+++ b/src/lists.py
@@ -0,0 +1,262 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+'''
+ponysay - Ponysay, cowsay reimplementation for ponies
+
+Copyright (C) 2012, 2013, 2014 Erkin Batu Altunbaş et al.
+
+
+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 program. If not, see .
+
+
+If you intend to redistribute ponysay or a fork of it commercially,
+it contains aggregated images, some of which may not be commercially
+redistribute, you would be required to remove those. To determine
+whether or not you may commercially redistribute an image make use
+that line ‘FREE: yes’, is included inside the image between two ‘$$$’
+lines and the ‘FREE’ is and upper case and directly followed by
+the colon.
+
+
+File listing functions.
+'''
+
+
+from ucs import *
+
+
+def _columnise(ponies):
+ '''
+ Columnise a list and prints it
+
+ @param ponies:list<(str, str)> All items to list, each item should have to elements: unformated name, formated name
+ '''
+ ## Get terminal width, and a 2 which is the space between columns
+ termwidth = gettermsize()[1] + 2
+ ## Sort the ponies, and get the cells' widths, and the largest width + 2
+ ponies.sort(key = lambda pony : pony[0])
+ widths = [UCS.dispLen(pony[0]) for pony in ponies]
+ width = max(widths) + 2 # longest pony file name + space between columns
+
+ ## Calculate the number of rows and columns, can create a list of empty columns
+ cols = termwidth // width # do not believe electricians, this means ⌊termwidth / width⌋
+ rows = (len(ponies) + cols - 1) // cols
+ columns = []
+ for c in range(0, cols): columns.append([])
+
+ ## Fill the columns with cells of ponies
+ (y, x) = (0, 0)
+ for j in range(0, len(ponies)):
+ cell = ponies[j][1] + ' ' * (width - widths[j]);
+ columns[x].append(cell)
+ y += 1
+ if y == rows:
+ x += 1
+ y = 0
+
+ ## Make the columnisation nicer by letting the last row be partially empty rather than the last column
+ diff = rows * cols - len(ponies)
+ if (diff > 2) and (rows > 1):
+ c = cols - 1
+ diff -= 1
+ while diff > 0:
+ columns[c] = columns[c - 1][-diff:] + columns[c]
+ c -= 1
+ columns[c] = columns[c][:-diff]
+ diff -= 1
+
+ ## Create rows from columns
+ lines = []
+ for r in range(0, rows):
+ lines.append([])
+ for c in range(0, cols):
+ if r < len(columns[c]):
+ line = lines[r].append(columns[c][r])
+
+ ## Print the matrix, with one extra blank row
+ print('\n'.join([''.join(line)[:-2] for line in lines]))
+ print()
+
+
+def simplelist(ponydirs, quoters = [], ucsiser = None):
+ '''
+ Lists the available ponies
+
+ @param ponydirs:itr The pony directories to use
+ @param quoters:__in__(str)→bool Set of ponies that of quotes
+ @param ucsiser:(list)?→void Function used to UCS:ise names
+ '''
+ for ponydir in ponydirs: # Loop ponydirs
+ ## Get all ponies in the directory
+ _ponies = os.listdir(ponydir)
+
+ ## Remove .pony from all files and skip those that does not have .pony
+ ponies = []
+ for pony in _ponies:
+ if endswith(pony, '.pony'):
+ ponies.append(pony[:-5])
+
+ ## UCS:ise pony names, they are already sorted
+ if ucsiser is not None:
+ ucsiser(ponies)
+
+ ## If ther directory is not empty print its name and all ponies, columnised
+ if len(ponies) == 0:
+ continue
+ print('\033[1mponies located in ' + ponydir + '\033[21m')
+ _columnise([(pony, '\033[1m' + pony + '\033[21m' if pony in quoters else pony) for pony in ponies])
+
+
+def linklist(ponydirs = None, quoters = [], ucsiser = None):
+ '''
+ Lists the available ponies with alternatives inside brackets
+
+ @param ponydirs:itr The pony directories to use
+ @param quoters:__in__(str)→bool Set of ponies that of quotes
+ @param ucsiser:(list, map)?→void Function used to UCS:ise names
+ '''
+ ## Get the size of the terminal
+ termsize = gettermsize()
+
+ for ponydir in ponydirs: # Loop ponydirs
+ ## Get all pony files in the directory
+ _ponies = os.listdir(ponydir)
+
+ ## Remove .pony from all files and skip those that does not have .pony
+ ponies = []
+ for pony in _ponies:
+ if endswith(pony, '.pony'):
+ ponies.append(pony[:-5])
+
+ ## If there are no ponies in the directory skip to next directory, otherwise, print the directories name
+ if len(ponies) == 0:
+ continue
+ print('\033[1mponies located in ' + ponydir + '\033[21m')
+
+ ## UCS:ise pony names
+ pseudolinkmap = {}
+ if ucsiser is not None:
+ ucsiser(ponies, pseudolinkmap)
+
+ ## Create target–link-pair, with `None` as link if the file is not a symlink or in `pseudolinkmap`
+ pairs = []
+ for pony in ponies:
+ if pony in pseudolinkmap:
+ pairs.append((pony, pseudolinkmap[pony] + '.pony'));
+ else:
+ pairs.append((pony, os.path.realpath(ponydir + pony + '.pony') if os.path.islink(ponydir + pony + '.pony') else None))
+
+ ## Create map from source pony to alias ponies for each pony
+ ponymap = {}
+ for pair in pairs:
+ if (pair[1] is None) or (pair[1] == ''):
+ if pair[0] not in ponymap:
+ ponymap[pair[0]] = []
+ else:
+ target = pair[1][:-5]
+ if '/' in target:
+ target = target[target.rindex('/') + 1:]
+ if target in ponymap:
+ ponymap[target].append(pair[0])
+ else:
+ ponymap[target] = [pair[0]]
+
+ ## Create list of source ponies concatenated with alias ponies in brackets
+ ponies = {}
+ for pony in ponymap:
+ w = UCS.dispLen(pony)
+ item = '\033[1m' + pony + '\033[21m' if (pony in quoters) else pony
+ syms = ponymap[pony]
+ syms.sort()
+ if len(syms) > 0:
+ w += 2 + len(syms)
+ item += ' ('
+ first = True
+ for sym in syms:
+ w += UCS.dispLen(sym)
+ if first: first = False
+ else: item += ' '
+ item += '\033[1m' + sym + '\033[21m' if (sym in quoters) else sym
+ item += ')'
+ ponies[(item.replace('\033[1m', '').replace('\033[21m', ''), item)] = w
+
+ ## Print the ponies, columnised
+ _columnise(list(ponies))
+
+
+def onelist(standarddirs, extradirs = None, ucsiser = None):
+ '''
+ Lists the available ponies on one column without anything bold or otherwise formated
+
+ @param standard:itr? Include standard ponies
+ @param extra:itr? Include extra ponies
+ @param ucsiser:(list)?→void Function used to UCS:ise names
+ '''
+ ## Get all pony files
+ _ponies = []
+ if standarddirs is not None:
+ for ponydir in standarddirs:
+ _ponies += os.listdir(ponydir)
+ if extradirs is not None:
+ for ponydir in extradirs:
+ _ponies += os.listdir(ponydir)
+
+ ## Remove .pony from all files and skip those that does not have .pony
+ ponies = []
+ for pony in _ponies:
+ if endswith(pony, '.pony'):
+ ponies.append(pony[:-5])
+
+ ## UCS:ise and sort
+ if ucsiser is not None:
+ ucsiser(ponies)
+ ponies.sort()
+
+ ## Print each one on a seperate line, but skip duplicates
+ last = ''
+ for pony in ponies:
+ if not pony == last:
+ last = pony
+ print(pony)
+
+
+def balloonlist(balloondirs, isthink):
+ '''
+ Prints a list of all balloons
+
+ @param balloondirs:itr The balloon directories to use
+ @param isthink:bool Whether the ponythink command is used
+ '''
+ ## Get the size of the terminal
+ termsize = gettermsize()
+
+ ## Get all balloons
+ balloonset = set()
+ for balloondir in balloondirs:
+ for balloon in os.listdir(balloondir):
+ ## Use .think if running ponythink, otherwise .say
+ if isthink and endswith(balloon, '.think'):
+ balloon = balloon[:-6]
+ elif (not isthink) and endswith(balloon, '.say'):
+ balloon = balloon[:-4]
+ else:
+ continue
+
+ ## Add the balloon if there is none with the same name
+ if balloon not in balloonset:
+ balloonset.add(balloon)
+
+ ## Print all balloos, columnised
+ _columnise([(balloon, balloon) for balloon in balloonset])
diff --git a/src/ponysay.py b/src/ponysay.py
index 6dbe0aae..f9560f5b 100755
--- a/src/ponysay.py
+++ b/src/ponysay.py
@@ -35,7 +35,7 @@ from balloon import *
from spellocorrecter import *
from ucs import *
from kms import *
-from list import *
+import lists
from metadata import *
@@ -739,7 +739,7 @@ class Ponysay():
@param ponydirs:itr? The pony directories to use
'''
- List.simplelist(self.ponydirs if ponydirs is None else ponydirs,
+ lists.simplelist(self.ponydirs if ponydirs is None else ponydirs,
self.__quoters(), lambda x : self.__ucsise(x))
@@ -749,7 +749,7 @@ class Ponysay():
@param ponydirs:itr The pony directories to use
'''
- List.linklist(self.ponydirs if ponydirs is None else ponydirs,
+ lists.linklist(self.ponydirs if ponydirs is None else ponydirs,
self.__quoters(), lambda x, y : self.__ucsise(x, y))
@@ -760,7 +760,7 @@ class Ponysay():
@param standard:bool Include standard ponies
@param extra:bool Include extra ponies
'''
- List.onelist(self.ponydirs if standard else None,
+ lists.onelist(self.ponydirs if standard else None,
self.extraponydirs if extra else None,
lambda x : self.__ucsise(x))
@@ -801,7 +801,7 @@ class Ponysay():
'''
Prints a list of all balloons
'''
- List.balloonlist(self.balloondirs, self.isthink)
+ lists.balloonlist(self.balloondirs, self.isthink)
def __getBalloonPath(self, names, alt = False):