Zum Inhalt springen

rte table in ein div wrappen bzw. html-rendering beeinflussen?

Erstellt am 26. September 2012 · 1 Antwort · letzte Antwort am 26. September 2012

Tags: HTML & CSS, Frage

rookie07 ·

hallo,

ich bin nun dabei das rte-monster zu konfigurieren eigentlich fehlt mir nicht mehr viel, nun bin ich gerade dabei die table des rte so zu gestallten, dass der user möglichst das ci nicht verbiegen kann. auch zebratabellen klappen schon. leider ist vom designer, wohl auch aus accessebility-gründen, vorgesehen dass die gesamte table mit einem div-container umschlossen wird - da ich noch naiv genug bin und mir gedacht habe das kann ich sicher "einfach" über typoscript lösen habe ich es mit zig varianten meiner letzten zeile in folgender config, ohne erfolg probiert:

# RTE -----------------------------------------------------------------------------------------------------------------------------
# delete all standard settings for the classes and reconfigure the styles included in the select boxes
page.RTE.classes >
page.RTE.classes {
	subueberschrift {
		name = Subüberschrift
		value = margin:0; color:#009252; font:bold 1em/1.33em Arial, Helvetica, sans-serif; text-transform:uppercase;
	}
	content-list {
		name = Verweis
	}
	content-listenpunkt {
		name = Listenpunkt
	}	
	stripedtable {
		name = Tabelle mit alternierenden Zeilen
		alternating.rows {
			# 0 = even, 1  = odd 
			startAt = 1
			oddClass = odd
			evenClass = even
			oddHeaderClass = odd
			evenHeaderClass = even
		}
    }	
}
# alternating row background in a table
page.RTE.mutuallyExclusiveClasses = odd,even
# delete all standard settings for the classesAnchor
page.RTE.classesAnchor >
page.RTE.classesAnchor {
	externalLink {
		class = extlink
		type = url
		target = _blank
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:external_link_titleText
		# image = fileadmin/templates/Adhurricane_templates/images/ico-extlink.gif
	}
	internalLink {
		class = default
		type = page
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:internal_link_titleText
	}
	file {
		class = doclink
		type = file
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:download_titleText
		# image = fileadmin/templates/Adhurricane_templates/images/ico-doclink.gif
	}
	download {
		class = doclink
		type = file
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:download_titleText
	}
	mail {
		class = defaultmail
		type = mail
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:mail_titleText
	}
}

page.RTE.default {
  # clean pasted text from ms word and equivalents
  enableWordClean = 1
  # removes automatically added <br /> tags
  removeTrailingBR = 1
  # removes HTML comment
  removeComments = 1
  # removes HTML tags specified 
  removeTags = center, sdfield
  # removes HTML tags specified and their content
  removeTagsAndContents = style, script 

  # each style in the css specified can be configured to appear in the style selectboxes
  contentCSS = fileadmin/templates/Adhurricane_templates/css/rteContent.css

  # configure the main format selectbox 
  buttons.formatblock {
	# only show these items
	restrictToItems = p, h2
	# configure each item
	  items {
		h2	{
			label = Subüberschrift
		}
	  }
  }
   
  # shows all CSS-classes defined in the rteContent.css which do not have a tag prefix (eg div.onlyDivStyle would only show up if div was selected in the formatblock)
  showTagFreeClasses = 0
  
  # use all custom defined css styles and override the standard-configuration
  ignoreMainStyleOverride = 1
  
  # Specifies that Mozilla/Firefox should use style attributes or not. When enabled, Mozilla/Firefox use span tags with style attributes rather than tags such as b, i, font, etc.
  useCSS = 0
  
  # show these buttons
  showButtons = formatblock, blockstyle, orderedlist, unorderedlist, bold, italic, strong, insertcharacter, image, line, link, unlink, acronym, removeformat, copy, cut, paste, pastetoggle, pastebehaviour, undo, redo, table, tableproperties, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge, user, findreplace, chMode
  # hide these buttons
  # hideButtons = emoticon, spellcheck, showhelp, about,  textstylelabel, fontstyle, fontsize, showhelp, textcolor, image, bgcolor,  strikethrough, underline, inserttag, user, findreplace, about, help 
  
  # build the tool bar containing the defined buttons
  toolbarOrder = formatblock, blockstyle, bar, bold, italic ,orderedlist, unorderedlist, link, unlink, insertcharacter, image, bar, copy, cut, paste, pastetoggle, pastebehaviour, removeformat, insertcharacter, undo, redo, bar, table, rowinsertabove, rowinsertunder, rowdelete, rowsplit, columninsertbefore, columninsertafter, columndelete, columnsplit, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge, bar, user, findreplace, chMode
  keepButtonGroupTogether = 1
  keepToggleBordersInToolbar = 1

  # show status bar
  showStatusBar = 1
  
  # user defined buttons
  userElements {
	  # Category of empty div containers
	  10 = Leerbereiche
	  10 {
		10 = kleiner Leerbereich
		10 {
			description = Fügt an der aktuellen Cursor-Position einen kleinen Leerbereich ein
			mode = default
			content = <div class="empty-block smallspace"></div>
		}
		20 = großer Leerbereich
		20 {
			description = Fügt an der aktuellen Cursor-Position einen großen Leerbereich ein
			mode = default
			content = <div class="empty-block bigspace"></div>
		}
	  }
	  # Category simulating the <hr /> tag
	  20 = Trennlinien
	  20 {
		10 = Trennlinie
		10 {
			description = Fügt an der aktuellen Cursor-Position eine Trennlinie ein
			mode = default
			content = <div class="line-block"></div>
		}	  
	  }
}  
  
  
  # restrict the list of class selectors presented by the RTE to the following for the specified tags
  buttons.textstyle.tags.span.allowedClasses >
  buttons.textstyle.tags.ul.allowedClasses := addToList(content-list, content-listenpunkt)
  buttons.blockstyle.tags {
	table.allowedClasses := addToList (stripedtable)
    tr.allowedClasses := addToList (odd, even)  
	h2.allowedClasses := addToList(subueberschrift)
  }
  
  # classes available in the Insert/Modify link dialogue
  buttons.link.properties.class.allowedClasses = linkbutton, internal-link, external-link, mail, download

  # Use same processing as on entry to database to clean content pasted into the editor
  enableWordClean.HTMLparser < page.RTE.default.proc.entryHTMLparser_db
  
	buttons.link {
		# assing css-classes for the different hyperlink types
		properties.class.allowedClasses = extlink, doclink, default, defaultmail
		page.properties.class {
			default = default
			required = 1
		}
		url.properties.class {
			default = extlink
			required = 1
		}
		file.properties.class {
			default = doclink
			required = 1
		}
		mail.properties.class {
			default = defaultmail
			required = 1
		}	
		# disable the target selector, the target should have been assign allready automatically by type
		targetSelector.disabled = 0
		popupSelector.disabled = 1
  }  
  
  # customization of the server processing of the content - also called 'transformations'.
  proc {
		# overrule CSS Styled Content's css styles
		overruleMode = ts_css
		# br tags in the content are assumed to be intentional
		dontConvBRtoParagraph = 1
		# PRESERVE DIV SECTIONS - DO NOT REMAP TO P
		preserveDIVSections = 1
		# TAGS ALLOWED OUTSIDE P & DIV
		allowTagsOutside = address, article, aside, blockquote, footer, header, hr, h2, nav, section, img
		# all these tags will be also written to the database
		allowTags (
			a, abbr, acronym, address, article, aside, b, bdo, big, blockquote, br, caption, center, cite, code, col, colgroup, dd, del, dfn, dl, div, dt, em, font, footer,
			header, h1, h2, h3, h4, h5, h6, hr, i, img, ins, kbd, label, li, link, meta, nav, ol, p, pre, q, samp, sdfield, section, small,
			span, strike, strong, style, sub, sup, table, thead, tbody, tfoot, td, th, tr, title, tt, u, ul, var
			)
		# add css classes to the selectbox which can be assigned to the content selected
		allowedClasses := addToList(subueberschrift, content-list, content-listenpunkt, even, odd, stripedtable)
		# Make sure we can set rules on any tag listed in allowTags.
		denyTags >
		# This is a list of additional attributes to keep
		keepPDIVattribs = id, title, dir, lang, xml:lang, itemscope, itemtype, itemprop
		# ALLOW TO WRITE ABOUT HTML
		dontUndoHSC_db = 1
		dontHSC_rte = 1
		# CONTENT TO DATABASE
		entryHTMLparser_db = 1
		entryHTMLparser_db {
			# Always use the same list of allowed tags.
			allowTags < page.RTE.default.proc.allowTags
			denyTags >
			# AVOID CONTENT BEING HSC'ed TWICE
			htmlSpecialChars = 0
			
			tags {
				# remap i->em and b->strong
				b.remap = strong
				i.rempa = em
				
				# remove standard-config for <img /> tag
				img >
				#img.allowedAttribs = 0
				#img.rmTagIfNoAttrib = 1
				
				# CLEAN ATTRIBUTES ON THE FOLLOWING TAGS
				span.fixAttrib.style.unset = 1
				span.allowedAttribs = id, title, dir, lang, xml:lang, class, itemscope, itemtype, itemprop
				span.rmTagIfNoAttrib = 1
				p {
					allowedAttribs = id, title, dir, lang, xml:lang, class, itemscope, itemtype, itemprop
					fixAttrib.align.unset = 1
				}
				div < .p
				hr.allowedAttribs = class
				b.allowedAttribs  < .span.allowedAttribs
				bdo.allowedAttribs  < .span.allowedAttribs
				big.allowedAttribs  < .span.allowedAttribs
				blockquote.allowedAttribs  < .span.allowedAttribs
				cite.allowedAttribs  < .span.allowedAttribs
				code.allowedAttribs  < .span.allowedAttribs
				del.allowedAttribs  < .span.allowedAttribs
				dfn.allowedAttribs  < .span.allowedAttribs
				em.allowedAttribs  < .span.allowedAttribs
				i.allowedAttribs  < .span.allowedAttribs
				ins.allowedAttribs  < .span.allowedAttribs
				kbd.allowedAttribs  < .span.allowedAttribs
				label.allowedAttribs  < .span.allowedAttribs
				q.allowedAttribs  < .span.allowedAttribs
				samp.allowedAttribs  < .span.allowedAttribs
				small.allowedAttribs  < .span.allowedAttribs
				strike.allowedAttribs  < .span.allowedAttribs
				strong.allowedAttribs  < .span.allowedAttribs
				sub.allowedAttribs  < .span.allowedAttribs
				sup.allowedAttribs  < .span.allowedAttribs
				tt.allowedAttribs  < .span.allowedAttribs
				u.allowedAttribs  < .span.allowedAttribs
				var.allowedAttribs  < .span.allowedAttribs

				# configure table
				table {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}
				}
				tr {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}				
				}
				td {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}				
				}
			}
			# REMOVE OPEN OFFICE META DATA TAGS, WORD 2003 TAGS, LINK, META, STYLE AND TITLE TAGS, AND DEPRECATED HTML TAGS
			# We use this rule instead of the denyTags rule so that we can protect custom tags without protecting these unwanted tags.
			removeTags = center, font, link, o:p, sdfield, meta, style, title, strike, u
			# PROTECT CUSTOM TAGS
			keepNonMatchedTags = protect
		}
		
		HTMLparser_db {
			# STRIP ALL ATTRIBUTES FROM THESE TAGS
			# If this list of tags is not set, it will default to: b,i,u,br,center,hr,sub,sup,strong,em,li,ul,ol,blockquote,strike.
			# However, we want to keep xml:lang attribute on most tags and tags from the default list where cleaned on entry.
			noAttrib = br
			# XHTML COMPLIANCE
			# Note that applying xhtml_cleaning on exit would break non-standard attributes of typolink tags
			xhtml_cleaning = 1
		}
		
		exitHTMLparser_db = 1
		exitHTMLparser_db {
			# KEEP ALL TAGS
			# Unwanted tags were removed on entry.
			# Without this rule, the parser will remove all tags! Presumably, this rule will be more efficient than repeating the allowTags rule
			keepNonMatchedTags = 1
			# AVOID CONTENT BEING HSC'ed TWICE
			htmlSpecialChars = 0
				
			tags {
				# remap i->em and b->strong
				b.remap = strong
				i.rempa = em
			}			
		}
	}
  # proc end
  
  # Use same RTE processing rules in FE
  FE.proc < page.RTE.default.proc
}
# front end RTE configuration for the general public
page.RTE.default.FE < page.RTE.default

page.RTE.config.tt_content {
	# RTE processing rules for bodytext column of tt_content table, erase settings from other extensions	
	bodytext >
	bodytext {
		proc {
			overruleMode = ts_css
			entryHTMLparser_db.xhtml_cleaning = 1
		}
		types {
			text.proc.overruleMode = ts_css
			textpic.proc.overruleMode = ts_css
		}
	}
	
}

# the rte of the tt_news should be configured similar
page.RTE.config.tt_news >
page.RTE.config.tt_news < page.RTE.config.tt_content

# RTE Tuning
lib.parseFunc_RTE.nonTypoTagStdWrap >
lib.parseFunc_RTE.nonTypoTagStdWrap {
	encapsLines {
		addAttributes >
		# remove class="bodytext" from <p>
		addAttributes.P.class >
		addAttributes.DIV.class >
		# do not remap <div> to <p>
		remapTag >
		remapTag.DIV = DIV
		# these tags may not be surrounded by <p>
		encapsTagList := addToList(cite, div, pre, p, hr, h1, h2, h3, h4, h5, h6, table, tr, td)
	}
}

# configure the table
lib.parseFunc_RTE.externalBlocks.table {
	# add the alternating row style
	stdWrap.HTMLparser.tags.table.fixAttrib.class.list = stripedtable
	# if a css class has been assigned to the table remove the 'contenttable' class which comes with css_styled_content
	#stdWrap.HTMLparser.tags.table.fixAttrib.class.list >
	# surround the whole <tale> with a <div>
	stdWrap.innerWrap = <div class="table-container">|</div>
}
# RTE -----------------------------------------------------------------------------------------------------------------------------

aber sicher stimmt da wiedermal die reihenfolge wer, was zur laufzeit überschreibt, oder die angesprochene eigenschaft nicht - very mühsam!

so kann ich doch das table-"objekt" ansprechen

lib.parseFunc_RTE.externalBlocks.table.

welche eigenschaften hat das denn, dieselben von tsref ctable?

bin über hinweise sehr dankbar!!!

rookie07 ·

also wahrscheinlich scheint mein vorhaben nicht so einfach realisierbar zu sein. das hat auch offensichtlich mit den verschiedenen parsern und der historischen entwicklung des rte zu tun, man könnte sich einen eigenen parser schreiben, auf fce (templavoila) um-switchen oder eine mischlösung probieren...

ich hab mich momentan für letzeres entschieden, über ein userelement füge ich den html-code der divs ein und was ich sonst noch brauche, dann liegt es an der disziplin der user (mir wird jetzt schon schlecht), die können nun in den eben eingefügten container eine tabelle einfügen. diese habe ich dann entsprechend so konfiguriert, dass da wenigstens nicht mehr viele möglichkeiten gibt unfug zu treiben. leider bekomme ich die "contenttable" klasse nicht aus der select box raus (ich eh schon soweit, dass ich eine extension schreibe und den rest mit jquery erledige / sachen einausblende etc...#angry#)

hier hab ich noch mal mein abgeändertes rte-script angefügt (ja, teilweise habe ich da sicher obsolete konfigs drinnen und teilweise ist mir noch nicht wirklich klar wie sich was wo und wann auswirkt...sorry)

# RTE -----------------------------------------------------------------------------------------------------------------------------
# delete all standard settings for the classes and reconfigure the styles included in the select boxes
page.RTE.classes >
page.RTE.classes {
	subueberschrift {
		name = Subüberschrift
		value = margin:0; color:#009252; font:bold 1em/1.33em Arial, Helvetica, sans-serif; text-transform:uppercase;
	}
	content-list {
		name = Verweis
	}
	content-listenpunkt {
		name = Listenpunkt
	}	
	stripedtable {
		name = Tabelle mit alternierenden Zeilen
		alternating.rows {
			# 0 = even, 1  = odd 
			startAt = 1
			oddClass = odd
			evenClass = even
			#oddHeaderClass = odd
			#evenHeaderClass = even
		}
    }	
	hidden {
		name = Versteckt den Tabellen-Titel
	}
}
# alternating row background in a table
page.RTE.mutuallyExclusiveClasses = odd,even
# delete all standard settings for the classesAnchor
page.RTE.classesAnchor >
page.RTE.classesAnchor {
	externalLink {
		class = extlink
		type = url
		target = _blank
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:external_link_titleText
	}
	internalLink {
		class = default
		type = page
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:internal_link_titleText
	}
	file {
		class = doclink
		type = file
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:download_titleText
	}
	download {
		class = doclink
		type = file
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:download_titleText
	}
	mail {
		class = defaultmail
		type = mail
		titleText = LLL:fileadmin/private/tscripts/rte_lang.xml:mail_titleText
	}
}

page.RTE.default {
  # clean pasted text from ms word and equivalents
  enableWordClean = 1
  # removes automatically added <br /> tags
  removeTrailingBR = 1
  # removes HTML comment
  removeComments = 1
  # removes HTML tags specified 
  removeTags = center, sdfield
  # removes HTML tags specified and their content
  removeTagsAndContents = style, script 

  # each style in the css specified can be configured to appear in the style selectboxes
  contentCSS = fileadmin/templates/Adhurricane_templates/css/rteContent.css

  # configure the buttons and dialogues
  buttons {
	# configure the main format selectbox 
	formatblock {
		# only show these items
		restrictToItems = p, h2
		# configure each item
	  items {
		h2	{
			label = Subüberschrift
		}
	  }	
	  
	 }
	# restrict the list of class selectors presented by the RTE to the following for the specified tags
	textstyle {
		tags {
			span.allowedClasses >
			ul.allowedClasses := addToList(content-list, content-listenpunkt)
		}
	}
	blockstyle {
		tags {
		table.allowedClasses := addToList(stripedtable)
		caption.allowedClasses := addToList(hidden)
		tr.allowedClasses := addToList(odd, even)  
		h2.allowedClasses := addToList(subueberschrift)
	  }	
	}
	
	# classes available in the Insert/Modify link dialogue
	link {
		# assing css-classes for the different hyperlink types
		properties.class.allowedClasses = extlink, doclink, default, defaultmail, linkbutton, internal-link, external-link, mail, download
		page.properties.class {
			default = default
			# if required = 1 the blank class is removed
			required = 1
		}
		url.properties.class {
			default = extlink
			required = 0
		}
		file.properties.class {
			default = doclink
			required = 0
		}
		mail.properties.class {
			default = defaultmail
			required = 1
		}	
		# disable the target selector, the target should have been assign allready automatically by type
		targetSelector.disabled = 0
		popupSelector.disabled = 1
	}  	
  # table buttons config
	  table {
		properties {
			# caption & summary has to be assigned
			required = caption, summary
			numberOfRows.defaultValue = 2
			numberOfColumns.defaultValue = 2
			# header should be positioned on thop of the table, the other posibilities should be removed
			headers {
				defaultValue = top
				removeItems = none, left, both
			}
			# the table should have the alternating row style
			tableClass.defaultValue = stripedtable
		}
	  }
  } 
  # end buttons
   
  # shows all CSS-classes defined in the rteContent.css which do not have a tag prefix (eg div.onlyDivStyle would only show up if div was selected in the formatblock)
  showTagFreeClasses = 0
  
  # use all custom defined css styles and override the standard-configuration
  ignoreMainStyleOverride = 1
  
  # Specifies that Mozilla/Firefox should use style attributes or not. When enabled, Mozilla/Firefox use span tags with style attributes rather than tags such as b, i, font, etc.
  useCSS = 0
  
  # show these buttons
  showButtons = formatblock, blockstyle, textstyle, orderedlist, unorderedlist, bold, italic, strong, insertcharacter, image, line, link, unlink, acronym, removeformat, copy, cut, paste, pastetoggle, pastebehaviour, undo, redo, table, tableproperties, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge, user, findreplace, chMode
  # hide these buttons
  # hideButtons = emoticon, spellcheck, showhelp, about,  textstylelabel, fontstyle, fontsize, showhelp, textcolor, image, bgcolor,  strikethrough, underline, inserttag, user, findreplace, about, help 
  
  # build the tool bar containing the defined buttons
  toolbarOrder = formatblock, blockstyle, textstyle, bar, bold, italic ,orderedlist, unorderedlist, link, unlink, insertcharacter, image, bar, copy, cut, paste, pastetoggle, pastebehaviour, removeformat, insertcharacter, undo, redo, bar, table, rowinsertabove, rowinsertunder, rowdelete, rowsplit, columninsertbefore, columninsertafter, columndelete, columnsplit, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge, bar, user, findreplace, chMode
  keepButtonGroupTogether = 1
  keepToggleBordersInToolbar = 1

  # show status bar
  showStatusBar = 1
  
  # user defined buttons
  userElements {
	  # Category of empty div containers
	  10 = Leerbereiche
	  10 {
		10 = kleiner Leerbereich
		10 {
			description = Fügt an der aktuellen Cursor-Position einen kleinen Leerbereich ein
			mode = default
			content = <div class="empty-block smallspace"></div>
		}
		20 = großer Leerbereich
		20 {
			description = Fügt an der aktuellen Cursor-Position einen großen Leerbereich ein
			mode = default
			content = <div class="empty-block bigspace"></div>
		}
	  }
	  # Category simulating the <hr /> tag
	  20 = Trennlinien
	  20 {
		10 = Trennlinie
		10 {
			description = Fügt an der aktuellen Cursor-Position eine Trennlinie ein
			mode = default
			content = <div class="line-block"></div>
		}	  
	  }
	  # Category for warpping the <table>
	  30 = Tabellen
	  30 {
		10 = Tabellen-Container
		10 {
			description = Eine Tabelle muss sich immer in einem Tabellen-Container befinden, über diese Schaltfläche fügen Sie einen solchen ein
			mode = default
			content = <div class="table-block bigspace"><h3>Überschrift</h3><div class="table-container">Diesen Bereich markieren und durch eine Tabelle ersetzen!</div></div>
		}	  
	  }	  
	}  
  

  # Use same processing as on entry to database to clean content pasted into the editor
  enableWordClean.HTMLparser < page.RTE.default.proc.entryHTMLparser_db
  # customization of the server processing of the content - also called 'transformations'.
  proc {
		# overrule CSS Styled Content's css styles
		overruleMode = ts_css
		# br tags in the content are assumed to be intentional
		dontConvBRtoParagraph = 1
		# PRESERVE DIV SECTIONS - DO NOT REMAP TO P
		preserveDIVSections = 1
		# TAGS ALLOWED OUTSIDE P & DIV
		allowTagsOutside = address, article, aside, blockquote, footer, header, hr, h2, nav, section, img
		# all these tags will be also written to the database
		allowTags (
			a, abbr, acronym, address, article, aside, b, bdo, big, blockquote, br, caption, center, cite, code, col, colgroup, dd, del, dfn, dl, div, dt, em, font, footer,
			header, h1, h2, h3, h4, h5, h6, hr, i, img, ins, kbd, label, li, link, meta, nav, ol, p, pre, q, samp, sdfield, section, small,
			span, strike, strong, style, sub, sup, table, thead, tbody, tfoot, td, th, tr, title, tt, u, ul, var
			)
		# add css classes to the selectbox which can be assigned to the content selected
		allowedClasses := addToList(subueberschrift, content-list, content-listenpunkt, even, odd, stripedtable, hidden)
		# Make sure we can set rules on any tag listed in allowTags.
		denyTags >
		# This is a list of additional attributes to keep
		keepPDIVattribs = id, title, dir, lang, xml:lang, itemscope, itemtype, itemprop
		# ALLOW TO WRITE ABOUT HTML
		dontUndoHSC_db = 1
		dontHSC_rte = 1
		# CONTENT TO DATABASE
		entryHTMLparser_db = 1
		entryHTMLparser_db {
			# Always use the same list of allowed tags.
			allowTags < page.RTE.default.proc.allowTags
			denyTags >
			# AVOID CONTENT BEING HSC'ed TWICE
			htmlSpecialChars = 0
			
			tags {
				# remap i->em and b->strong
				b.remap = strong
				i.rempa = em
				
				# remove standard-config for <img /> tag
				img >
				# img.allowedAttribs = 0
				# img.rmTagIfNoAttrib = 1
				
				# CLEAN ATTRIBUTES ON THE FOLLOWING TAGS
				span.fixAttrib.style.unset = 1
				span.allowedAttribs = id, title, dir, lang, xml:lang, class, itemscope, itemtype, itemprop
				span.rmTagIfNoAttrib = 1
				p {
					allowedAttribs = id, title, dir, lang, xml:lang, class, itemscope, itemtype, itemprop
					fixAttrib.align.unset = 1
				}
				div < .p
				hr.allowedAttribs = class
				b.allowedAttribs  < .span.allowedAttribs
				bdo.allowedAttribs  < .span.allowedAttribs
				big.allowedAttribs  < .span.allowedAttribs
				blockquote.allowedAttribs  < .span.allowedAttribs
				cite.allowedAttribs  < .span.allowedAttribs
				code.allowedAttribs  < .span.allowedAttribs
				del.allowedAttribs  < .span.allowedAttribs
				dfn.allowedAttribs  < .span.allowedAttribs
				em.allowedAttribs  < .span.allowedAttribs
				i.allowedAttribs  < .span.allowedAttribs
				ins.allowedAttribs  < .span.allowedAttribs
				kbd.allowedAttribs  < .span.allowedAttribs
				label.allowedAttribs  < .span.allowedAttribs
				q.allowedAttribs  < .span.allowedAttribs
				samp.allowedAttribs  < .span.allowedAttribs
				small.allowedAttribs  < .span.allowedAttribs
				strike.allowedAttribs  < .span.allowedAttribs
				strong.allowedAttribs  < .span.allowedAttribs
				sub.allowedAttribs  < .span.allowedAttribs
				sup.allowedAttribs  < .span.allowedAttribs
				tt.allowedAttribs  < .span.allowedAttribs
				u.allowedAttribs  < .span.allowedAttribs
				var.allowedAttribs  < .span.allowedAttribs

				# configure table
				table {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}
				}
				tr {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}				
				}
				td {
					# remove the resizing-infos added by dragging in the editor
					fixAttrib{
						style.unset = 1
						width.unset = 1
						height.unset = 1					
					}				
				}
			}
			# REMOVE OPEN OFFICE META DATA TAGS, WORD 2003 TAGS, LINK, META, STYLE AND TITLE TAGS, AND DEPRECATED HTML TAGS
			# We use this rule instead of the denyTags rule so that we can protect custom tags without protecting these unwanted tags.
			removeTags = center, font, link, o:p, sdfield, meta, style, title, strike, u
			# PROTECT CUSTOM TAGS
			keepNonMatchedTags = protect
		}
		
		HTMLparser_db {
			# STRIP ALL ATTRIBUTES FROM THESE TAGS
			# If this list of tags is not set, it will default to: b,i,u,br,center,hr,sub,sup,strong,em,li,ul,ol,blockquote,strike.
			# However, we want to keep xml:lang attribute on most tags and tags from the default list where cleaned on entry.
			noAttrib = br
			# XHTML COMPLIANCE
			# Note that applying xhtml_cleaning on exit would break non-standard attributes of typolink tags
			xhtml_cleaning = 1
		}
		
		exitHTMLparser_db = 1
		exitHTMLparser_db {
			# KEEP ALL TAGS, unwanted tags were removed on entry. Without this rule, the parser will remove all tags! Presumably, this rule will be more efficient than repeating the allowTags rule
			keepNonMatchedTags = 1
			# AVOID CONTENT BEING HSC'ed TWICE
			htmlSpecialChars = 0
				
			tags {
				# remap i->em and b->strong
				b.remap = strong
				i.rempa = em
			}			
		}
	}
  # proc end
  
  # Use same RTE processing rules in FE
  FE.proc < page.RTE.default.proc
}
# front end RTE configuration for the general public
page.RTE.default.FE < page.RTE.default

page.RTE.config.tt_content {
	# RTE processing rules for bodytext column of tt_content table, erase settings from other extensions	
	bodytext >
	# make sure we use ts_css transformation
	bodytext {
		proc {
			overruleMode = ts_css
			entryHTMLparser_db.xhtml_cleaning = 1
		}
		types {
			text.proc.overruleMode = ts_css
			textpic.proc.overruleMode = ts_css
		}
	}	
}

# the rte of the tt_news should be configured similar
page.RTE.config.tt_news >
page.RTE.config.tt_news < page.RTE.config.tt_content

# RTE Tuning
lib.parseFunc_RTE.nonTypoTagStdWrap >
lib.parseFunc_RTE.nonTypoTagStdWrap {
	encapsLines {
		addAttributes >
		# remove class="bodytext" from <p>
		addAttributes.P.class >
		addAttributes.DIV.class >
		# do not remap <div> to <p>
		remapTag >
		remapTag.DIV = DIV
		# these tags may not be surrounded by <p>
		encapsTagList := addToList(cite, div, pre, p, hr, h1, h2, h3, h4, h5, h6, table, tr, td)
	}
}

# configure the parser
lib.parseFunc_RTE {
	# separately processing of tags specified
	externalBlocks := addToList(table, ol, ul)
	externalBlocks {
		table {
			# add the alternating row style
			stdWrap.HTMLparser.tags.table.fixAttrib.class.list = stripedtable
		}
	}
}
# RTE -----------------------------------------------------------------------------------------------------------------------------