view frontends/src/tools/composition.py @ 1005:b4af31a8a4f2

core (logs): added formatting, name filter and outputs management: - formatting is inspired from, and use when possible, standard logging. "message", "levelname", and "name" are the only format managed, depending on backend more can be managed (standard backend formats are specified in official python logging doc) - name filter use regular expressions. It's possible to log only plugins with SAT_LOG_LOGGER="^sat.plugins". To log only XEPs 96 & 65, we can use SAT_LOG_LOGGER='(xep_0095|xep_0065)' - output management use a particular syntax: - output handler are name with "//", so far there are "//default" (most of time stderr), "//memory" and "//file" - options can be specified in parenthesis, e.g. "//memory(50)" mean a 50 lines memory buffer (50 is the current default, so that's equivalent to "//memory") - several handlers can be specified: "//file(/tmp/sat.log)//default" will use the default logging + a the /tmp/sat.log file - if there is only one handler, it use the file handler: "/tmp/sat.log" is the same as "//file(/tmp/sat.log)" - not finished, need more work for twisted and basic backends
author Goffi <goffi@goffi.org>
date Mon, 05 May 2014 18:58:34 +0200
parents 58b4568ed4f2
children 069ad98b360d
line wrap: on
line source

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
Libervia: a Salut à Toi frontend
Copyright (C) 2013, 2014 Adrien Cossa <souliane@mailoo.org>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""

# Map the messages recipient types to their properties.
RECIPIENT_TYPES = {"To": {"desc": "Direct recipients", "optional": False},
                   "Cc": {"desc": "Carbon copies", "optional": True},
                   "Bcc": {"desc": "Blind carbon copies", "optional": True}}

# Rich text buttons icons and descriptions
RICH_BUTTONS = {
    "bold": {"tip": "Bold", "icon": "media/icons/dokuwiki/toolbar/16/bold.png"},
    "italic": {"tip": "Italic", "icon": "media/icons/dokuwiki/toolbar/16/italic.png"},
    "underline": {"tip": "Underline", "icon": "media/icons/dokuwiki/toolbar/16/underline.png"},
    "code": {"tip": "Code", "icon": "media/icons/dokuwiki/toolbar/16/mono.png"},
    "strikethrough": {"tip": "Strikethrough", "icon": "media/icons/dokuwiki/toolbar/16/strike.png"},
    "heading": {"tip": "Heading", "icon": "media/icons/dokuwiki/toolbar/16/hequal.png"},
    "numberedlist": {"tip": "Numbered List", "icon": "media/icons/dokuwiki/toolbar/16/ol.png"},
    "list": {"tip": "List", "icon": "media/icons/dokuwiki/toolbar/16/ul.png"},
    "link": {"tip": "Link", "icon": "media/icons/dokuwiki/toolbar/16/linkextern.png"},
    "horizontalrule": {"tip": "Horizontal rule", "icon": "media/icons/dokuwiki/toolbar/16/hr.png"},
    "image":  {"tip": "Image", "icon": "media/icons/dokuwiki/toolbar/16/image.png"},
    }

# Define here your rich text syntaxes, the key must match the ones used in button.
# Tupples values must have 3 elements : prefix to the selection or cursor
# position, sample text to write if the marker is not applied on a selection,
# suffix to the selection or cursor position.
# FIXME: must not be hard-coded like this
RICH_SYNTAXES = {"markdown": {"bold": ("**", "bold", "**"),
                              "italic": ("*", "italic", "*"),
                              "code": ("`", "code", "`"),
                              "heading": ("\n# ", "Heading 1", "\n## Heading 2\n"),
                              "link": ("[desc](", "link", ")"),
                              "list": ("\n* ", "item", "\n    + subitem\n"),
                              "horizontalrule": ("\n***\n", "", ""),
                              "image": ("![desc](", "path", ")"),
                        },
           "bbcode": {"bold": ("[b]", "bold", "[/b]"),
                      "italic": ("[i]", "italic", "[/i]"),
                      "underline": ("[u]", "underline", "[/u]"),
                      "code": ("[code]", "code", "[/code]"),
                      "strikethrough": ("[s]", "strikethrough", "[/s]"),
                      "link": ("[url=", "link", "]desc[/url]"),
                      "list": ("\n[list] [*]", "item 1", " [*]item 2 [/list]\n"),
                      "image": ("[img alt=\"desc\]", "path", "[/img]"),
                     },
           "dokuwiki": {"bold": ("**", "bold", "**"),
                        "italic": ("//", "italic", "//"),
                        "underline": ("__", "underline", "__"),
                        "code": ("<code>", "code", "</code>"),
                        "strikethrough": ("<del>", "strikethrough", "</del>"),
                        "heading": ("\n==== ", "Heading 1", " ====\n=== Heading 2 ===\n"),
                        "link": ("[[", "link", "|desc]]"),
                        "list": ("\n  * ", "item\n", "\n    * subitem\n"),
                        "horizontalrule": ("\n----\n", "", ""),
                        "image": ("{{", "path", " |desc}}"),
                        },
           "XHTML": {"bold": ("<b>", "bold", "</b>"),
                     "italic": ("<i>", "italic", "</i>"),
                     "underline": ("<u>", "underline", "</u>"),
                     "code": ("<pre>", "code", "</pre>"),
                     "strikethrough": ("<s>", "strikethrough", "</s>"),
                     "heading": ("\n<h3>", "Heading 1", "</h3>\n<h4>Heading 2</h4>\n"),
                     "link": ("<a href=\"", "link", "\">desc</a>"),
                     "list": ("\n<ul><li>", "item 1", "</li><li>item 2</li></ul>\n"),
                     "horizontalrule": ("\n<hr/>\n", "", ""),
                     "image": ("<img src=\"", "path", "\" alt=\"desc\"/>"),
                     }
                 }

# Define here the commands that are supported by the WYSIWYG edition.
# Keys must be the same than the ones used in RICH_SYNTAXES["XHTML"].
# Values will be used to call execCommand(cmd, False, arg), they can be:
# - a string used for cmd and arg is assumed empty
# - a tuple (cmd, prompt, arg) with cmd the name of the command,
#   prompt the text to display for asking a user input and arg is the
#   value to use directly without asking the user if prompt is empty.
COMMANDS = {"bold": "bold",
            "italic": "italic",
            "underline": "underline",
            "code": ("formatBlock", "", "pre"),
            "strikethrough": "strikeThrough",
            "heading": ("heading", "Please specify the heading level (h1, h2, h3...)", ""),
            "link": ("createLink", "Please specify an URL", ""),
            "list": "insertUnorderedList",
            "horizontalrule": "insertHorizontalRule",
            "image": ("insertImage", "Please specify an image path", ""),
            }

# These values should be equal to the ones in plugin_misc_text_syntaxes
# FIXME: should the plugin import them from here to avoid duplicity? Importing
# the plugin's values from here is not possible because Libervia would fail.
PARAM_KEY_COMPOSITION = "Composition"
PARAM_NAME_SYNTAX = "Syntax"