All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.kaitai.struct.HtmlClassCompiler.scala Maven / Gradle / Ivy

package io.kaitai.struct

import io.kaitai.struct.datatype.DataType
import io.kaitai.struct.datatype.DataType.UserType
import io.kaitai.struct.exprlang.Ast
import io.kaitai.struct.format._
import io.kaitai.struct.languages.components.{LanguageCompiler, LanguageCompilerStatic}

class HtmlClassCompiler(classSpecs: ClassSpecs, topClass: ClassSpec) extends DocClassCompiler(classSpecs, topClass) {
  import HtmlClassCompiler._

  override def outFileName(topClass: ClassSpec): String = s"${topClass.nameAsStr}.html"

  override def indent: String = ""

  override def fileHeader(topClass: ClassSpec): Unit = {
    out.puts(
      s"""
        |
        |
        |  
        |    
        |    
        |    
        |
        |    
        |    
        |
        |    ${type2str(topClass.name.last)} format specification
        |  
        |  
           
|

${type2str(topClass.name.last)} format specification

| """.stripMargin) // TODO: parse & output meta/title, meta/file-extensions, etc } override def fileFooter(topClass: ClassSpec): Unit = { out.puts( """ |
| | | | | | | """.stripMargin) } override def classHeader(classSpec: ClassSpec): Unit = { out.puts(s"") out.puts(s"<$headerByIndent>Type: ${type2str(classSpec.name.last)}") out.puts classSpec.doc.summary.foreach(summary => out.puts(s"

$summary

") ) out.inc } override def classFooter(classSpec: ClassSpec): Unit = { out.dec } override def seqHeader(classSpec: ClassSpec): Unit = { out.puts("") out.puts("") } override def seqFooter(classSpec: ClassSpec): Unit = { out.puts("
OffsetSizeIDTypeNote
") } override def compileSeqAttr(classSpec: ClassSpec, attr: AttrSpec, seqPos: Option[Int], sizeElement: Sized, sizeContainer: Sized): Unit = { out.puts("") out.puts(s"${GraphvizClassCompiler.seqPosToStr(seqPos).getOrElse("???")}") out.puts(s"...") out.puts(s"${attr.id.humanReadable}") out.puts(s"${kaitaiType2NativeType(attr.dataType)}") out.puts(s"${attr.doc.summary.getOrElse("")}") out.puts("") } override def compileParseInstance(classSpec: ClassSpec, inst: ParseInstanceSpec): Unit = { out.puts(s"

Parse instance: ${inst.id.humanReadable}

") out.puts("") out.puts("") out.puts(s"") out.puts(s"") out.puts(s"") out.puts(s"") out.puts(s"") out.puts("") out.puts("
${expression(inst.pos)}...${inst.id.humanReadable}${kaitaiType2NativeType(inst.dataType)}${inst.doc.summary.getOrElse("")}
") } override def compileValueInstance(vis: ValueInstanceSpec): Unit = { out.puts(s"value instance: ${vis}") } override def compileEnum(enumName: String, enumColl: EnumSpec): Unit = { out.puts(s"") out.puts(s"<$headerByIndent>Enum: $enumName") out.puts out.puts("") out.puts("") out.puts("") out.puts("") enumColl.sortedSeq.foreach { case (id, value) => out.puts("") out.puts(s"") out.puts("") } out.puts("
IDNameNote
$id${value.name}${value.doc.summary.getOrElse("")}
") } def headerByIndent: String = s"h${out.indentLevel + 1}" def expression(exOpt: Option[Ast.expr]): String = { exOpt match { case Some(ex) => translator.translate(ex) case None => "" } } } object HtmlClassCompiler extends LanguageCompilerStatic { // FIXME: Unused, should be probably separated from LanguageCompilerStatic override def getCompiler( tp: ClassTypeProvider, config: RuntimeConfig ): LanguageCompiler = ??? def type2str(name: String): String = Utils.upperCamelCase(name) def classSpec2Anchor(spec: ClassSpec): String = "type-" + spec.name.mkString("-") def enumSpec2Anchor(spec: EnumSpec): String = "enum-" + spec.name.mkString("-") def kaitaiType2NativeType(attrType: DataType): String = attrType match { case ut: UserType => "" + type2str(ut.name.last) + "" case _ => GraphvizClassCompiler.dataTypeName(attrType) } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy