Index: trac.css
===================================================================
--- trac.css	(revision 2235)
+++ trac.css	(working copy)
@@ -360,6 +360,13 @@
 table.listing tbody tr:hover { background: #eed !important }
 
 /* Styles for the error page (and rst errors) */
+span.notice {
+ background: #fcb;
+ border: 1px dotted #d00;
+ color: #500;
+ padding: 0 0 0 .5em;
+ margin: .5em;
+}
 #content.error .message, div.system-message {
  background: #fdc;
  border: 2px solid #d00;
Index: formatter.py
===================================================================
--- formatter.py	(revision 2235)
+++ formatter.py	(working copy)
@@ -44,6 +44,7 @@
 SUBSCRIPT_TOKEN = ",,"
 SUPERSCRIPT_TOKEN = r"\^"
 INLINE_TOKEN = "`"
+NOTICE_TOKEN = r"\*\*\*"
 
 LINK_SCHEME = r"[\w.+-]+" # as per RFC 2396
 
@@ -144,6 +145,7 @@
                   r"(?P<strike>!?%s)" % STRIKE_TOKEN,
                   r"(?P<subscript>!?%s)" % SUBSCRIPT_TOKEN,
                   r"(?P<superscript>!?%s)" % SUPERSCRIPT_TOKEN,
+                  r"(?P<notice>!?%s)" % NOTICE_TOKEN,
                   r"(?P<inlinecode>!?\{\{\{(?P<inline>.*?)\}\}\})",
                   r"(?P<inlinecode2>!?%s(?P<inline2>.*?)%s)" % (INLINE_TOKEN,
                                                                 INLINE_TOKEN),
@@ -376,6 +378,13 @@
         else:
             return self.simple_tag_handler('<sup>', '</sup>')
 
+    def _notice_formatter(self, match, fullmatch):
+        print match
+        if match[0] == '!':
+            return match[1:]
+        else:
+            return self.simple_tag_handler('<span class="notice">', '</span>')
+
     def _inlinecode_formatter(self, match, fullmatch):
         return '<tt>%s</tt>' % fullmatch.group('inline')
 

