<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># Copyright (C) 2009-2011 AG Projects. See LICENSE for details.
#

from Foundation import NSBundle

import os

from application.python.types import Singleton
from util import escape_html

SMILEY_STYLE="MSN"


class SmileyManager(object, metaclass=Singleton):
    def __init__(self):
        self.smiley_directory = None
        self.icon = None
        self.smileys = {}
        self.smileys_html = {}
        self.smiley_keys = []
        self.load_theme(str(NSBundle.mainBundle().resourcePath())+"/smileys" , "default")

    def load_theme(self, smiley_theme_directory, name="default"):
        self.smiley_directory = smiley_theme_directory
        self.theme = name
        self.icon = None

        in_header = True
        found = False

        f = open(os.path.join(self.smiley_directory, self.theme, "theme"), "r")

        for line in f:
            line = line.strip()
            if not line or line[0] == "#":
                continue

            if in_header:
                if "=" in line:
                    k, v = line.split("=", 1)
                    if k == "Icon":
                        self.icon = v
                    continue

                if line[0] == "[":
                    in_header = False
                else:
                    continue
            if line == "[%s]"%SMILEY_STYLE:
                if found:
                    break
                found = True
                continue
            elif line.startswith("["):
                if found:
                    break

            if found:
                line = line.replace("\\\\", "\\")

                toks = [s.strip() for s in line.split()]
                if len(toks) &gt;= 2:
                    file = toks[0]
                    for text in toks[1:]:
                        self.smileys[text] = file
                    self.smiley_keys.append(toks[1])

        f.close()

        self.smileys_html = {}
        for k, v in self.smileys.items():
            # pre-escape the smiley so that it matches escaped text later
            ek = escape_html(k)
            self.smileys_html[ek] = "&lt;img src='file:%s' class='smiley' /&gt;"%(self.get_smiley(k))

    def get_smiley(self, text):
        if text in self.smileys:
            return os.path.join(self.smiley_directory, self.theme, self.smileys[text])
        return None


    def subst_smileys_html(self, text):
        items = list(self.smileys_html.items())
        sorted(items, key=lambda x: x[0], reverse=True)
        for k, v in items:
            text = text.replace(k, v)
        return text


    def get_smiley_list(self):
        l = []
        for text in self.smiley_keys:
            l.append((text, self.get_smiley(text)))
        return l


</pre></body></html>