Index: trac/ticket/api.py
===================================================================
--- trac/ticket/api.py	(revision 6425)
+++ trac/ticket/api.py	(working copy)
@@ -257,7 +257,8 @@
                 'type': config.get(name),
                 'order': config.getint(name + '.order', 0),
                 'label': config.get(name + '.label') or name.capitalize(),
-                'value': config.get(name + '.value', '')
+                'value': config.get(name + '.value', ''),
+                'format': config.get(name + '.format', 'plain')
             }
             if field['type'] == 'select' or field['type'] == 'radio':
                 field['options'] = config.getlist(name + '.options', sep='|')
Index: trac/ticket/templates/ticket.html
===================================================================
--- trac/ticket/templates/ticket.html	(revision 6425)
+++ trac/ticket/templates/ticket.html	(working copy)
@@ -153,9 +153,23 @@
                     class="${field and field.name in ('cc', 'keywords') and 'searchable' or None}"
                     colspan="${fullrow and 3 or None}">
                   <py:if test="field">
-                    <py:choose test="">
-                      <py:when test="'rendered' in field">${field.rendered}</py:when>
-                      <py:otherwise>${ticket[field.name]}</py:otherwise>
+                    <!--! wiki conversion for custom fields -->
+                    <py:choose test="field.format">
+                      <py:when test="'wiki'">
+                        ${wiki_to_html(context, ticket[field.name], escape_newlines=preserve_newlines)}
+                      </py:when>
+                      <py:when test="'wiki_oneliner'">
+                        ${wiki_to_oneliner(context, ticket[field.name])}
+                      </py:when>
+                      <py:when test="'pre'">
+                        <pre py:content="ticket[field.name]"/>
+                      </py:when>
+                      <py:otherwise>
+                        <py:choose test="">
+                          <py:when test="'rendered' in field">${field.rendered}</py:when>
+                          <py:otherwise>${ticket[field.name]}</py:otherwise>
+                        </py:choose>
+                      </py:otherwise>
                     </py:choose>
                   </py:if>
                 </td>
@@ -320,6 +334,7 @@
                     </select>
                     <textarea py:when="'textarea'" id="field-${field.name}" name="field_${field.name}"
                               cols="${field.width}" rows="${field.height}"
+                              class="${field.format == 'wiki' and 'wikitext' or None}" 
                               py:content="ticket[field.name]"></textarea>
                     <span py:when="'checkbox'">
                       <input type="checkbox" id="field-${field.name}" name="field_${field.name}"
Index: trac/ticket/tests/api.py
===================================================================
--- trac/ticket/tests/api.py	(revision 6425)
+++ trac/ticket/tests/api.py	(working copy)
@@ -19,7 +19,7 @@
         self.env.config.set('ticket-custom', 'test.value', 'Foo bar')
         fields = TicketSystem(self.env).get_custom_fields()
         self.assertEqual({'name': 'test', 'type': 'text', 'label': 'Test',
-                          'value': 'Foo bar', 'order': 0},
+                          'value': 'Foo bar', 'order': 0, 'format': 'plain'},
                          fields[0])
 
     def test_custom_field_select(self):
@@ -30,7 +30,7 @@
         fields = TicketSystem(self.env).get_custom_fields()
         self.assertEqual({'name': 'test', 'type': 'select', 'label': 'Test',
                           'value': '1', 'options': ['option1', 'option2'],
-                          'order': 0},
+                          'order': 0, 'format': 'plain'},
                          fields[0])
 
     def test_custom_field_optional_select(self):
@@ -41,7 +41,7 @@
         fields = TicketSystem(self.env).get_custom_fields()
         self.assertEqual({'name': 'test', 'type': 'select', 'label': 'Test',
                           'value': '1', 'options': ['option1', 'option2'],
-                          'order': 0, 'optional': True},
+                          'order': 0, 'optional': True, 'format': 'plain'},
                          fields[0])
 
     def test_custom_field_textarea(self):
@@ -50,10 +50,11 @@
         self.env.config.set('ticket-custom', 'test.value', 'Foo bar')
         self.env.config.set('ticket-custom', 'test.cols', '60')
         self.env.config.set('ticket-custom', 'test.rows', '4')
+        self.env.config.set('ticket-custom', 'test.format', 'wiki')
         fields = TicketSystem(self.env).get_custom_fields()
         self.assertEqual({'name': 'test', 'type': 'textarea', 'label': 'Test',
                           'value': 'Foo bar', 'width': 60, 'height': 4,
-                          'order': 0},
+                          'order': 0, 'format': 'wiki'},
                          fields[0])
 
     def test_custom_field_order(self):
@@ -64,7 +65,7 @@
         fields = TicketSystem(self.env).get_custom_fields()
         self.assertEqual('test2', fields[0]['name'])
         self.assertEqual('test1', fields[1]['name'])
-
+        
     def test_available_actions_full_perms(self):
         ts = TicketSystem(self.env)
         self.perm.grant_permission('anonymous', 'TICKET_CREATE')

