<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~    http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface>
    <composite:attribute name="lang" default="xml"/>
    <composite:attribute name="linenums" default="false"/>
</composite:interface>


<composite:implementation>
    <h:outputStylesheet target="head" id="demoCodeStyle">
        .demoCode { font-size: smaller !important; overflow:hidden !important; }
    </h:outputStylesheet>
    
	<pre class="prettyprint lang-#{cc.attrs.lang} #{(cc.attrs.linenums) ? 'linenums:1' : ''} demoCode codeBox"><composite:insertChildren /></pre>
</composite:implementation>
</html>
