Known failures

A list of rare edge cases where Prism highlights code incorrectly.

There are certain edge cases where Prism will fail. There are always such cases in every regex-based syntax highlighter.
However, Prism dares to be open and honest about them. If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug.

Comments only support one level of nesting

(* Nested block
	(* comments
		(* on more than
		2 levels *)
	are *)
not supported *)

Nested block comments

#cs
	#cs
		foo()
	#ce
#ce

Two levels of nesting inside C section

{
	if($1) {
		if($2) {

		}
	}
} // <- Broken
%%
%%

Comments only support one level of nesting

/+ /+ /+ this does not work +/ +/ +/

Token strings only support one level of nesting

q{ q{ q{ this does not work } } }

String interpolation in single-quoted strings

'#{:atom} <- this should not be highligted'

Two divisions on the same line

2 / 3 / 4

Names starting with a number

The box 1A is a container

String interpolation containing a closing brace

`${ /* } */ a + b }`
`${ '}' }`

String interpolation with deeply nested braces

`${foo({ a: { b: { c: true } } })}`

At-rules looking like variables

@import "some file.less";

At-rules containing interpolation

@import "@{themes}/tidal-wave.less";

extend is not highlighted consistently

nav ul {
  &:extend(.inline);
  background: blue;
}
.a:extend(.b) {}

Functions with a single string parameter not using parentheses are not highlighted

foobar"param";

Numbers with underscores

mov     ax,1100_1000b
mov     ax,1100_1000y
mov     ax,0b1100_1000
mov     ax,0y1100_1000

dd    1.222_222_222

Code block starting with a comment

# Doesn't work
# Does work
 # Does work when prefixed with a space

Comments inside expressions break literals and operators

^if(
    $age>=4  # not too young
    && $age<=80  # and not too old
)

Null-ary predicates are not highlighted

halt.
trace.

:- if(test1).
section_1.
:- elif(test2).
section_2.
:- elif(test3).
section_3.
:- else.
section_else.
:- endif.

More than one level of nested braces inside interpolation

"Foobar ${foo({
    bar => {baz => 42}
    baz => 42
})} <- broken"

Interpolation expressions containing strings with { or }

f"{'}'}"

The global context is highlighted as a verb

\d .

Nothing is highlighted inside table cells

+---------------+----------+
| column 1     | column 2  |
+--------------+-----------+
| **bold**?    | *italic*? |
+--------------+-----------+

The inline markup recognition rules are not as strict as they are in the spec

No inline markup should be highlighted in the following code.

2 * x a ** b (* BOM32_* ` `` _ __ |
"*" '|' (*) [*] {*} <*> ‘*’ ‚*‘ ‘*‚ ’*’ ‚*’ “*” „*“ “*„ ”*” „*” »*« ›*‹ «*» »*» ›*›

Nested block comments

/* Nested block
	/* comments
	are */
not supported */

Delimiters of parameters for closures that don't use braces

|x| x + 1i;

Deprecated Sass syntax is not supported

.page
  color = 5px + 9px

!width = 13px
.icon
  width = !width

Selectors with pseudo classes are highlighted as property/value pairs

a:hover
  text-decoration: underline

Nested block comments

/* Nested block
	/* comments
	are */
not supported */

The first argument of case-lambda argument lists are highlighted as functions

(define plus
	(case-lambda
		(() 0)
		((x) x)
		((x y) (+ x y))
		((x y z) (+ (+ x y) z))
		(args (apply + args))))

Nested block comments

/* Nested block
	/* comments
	are */
not supported */

HTML inside Textile is not supported

But Textile inside HTML should be just fine.

<strong>This _should_ work properly.</strong>
*But this is <em>definitely</em> broken.*

Tag containing Twig is not highlighted

<div{% if foo %} class="bar"{% endif %}></div>

Nested magic words are not supported

{{#switch:{{PAGENAME}}
| L'Aquila = No translation
| L = Not OK
| L'Aquila = Entity escaping
| L'Aquila = Numeric char encoding
}}

Nesting of bold and italic is not supported

''Italic with '''bold''' inside''

Themes

Some of our themes are not compatible with certain layouts.

Coy

Coy's shadows and background might not wrap around the code correctly if combined with float of flexbox layouts.

Workarounds

There are 2 possible workarounds:

The first workaround is setting display: flex-root; for the pre element. This will fix the issue but flex-root has limited browser support.

The second is adding clear: both; to the style of the pre element. This will fix the issue but it will change the way code blocks behave when overlapping with other elements.