config.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package jade
  2. //go:generate stringer -type=itemType,NodeType -trimprefix=item -output=config_string.go
  3. var TabSize = 4
  4. var (
  5. golang_mode = false
  6. tag__bgn = "<%s%s>"
  7. tag__end = "</%s>"
  8. tag__void = "<%s%s/>"
  9. tag__arg = ` %s="{{ print %s }}"`
  10. tag__arg_str = ` %s="%s"`
  11. tag__arg_add = `%s " " %s`
  12. tag__arg_bgn = ""
  13. tag__arg_end = ""
  14. cond__if = "{{ if %s }}"
  15. cond__unless = "{{ if not %s }}"
  16. cond__case = "{{/* switch %s */}}"
  17. cond__while = "{{ range %s }}"
  18. cond__for = "{{/* %s, %s */}}{{ range %s }}"
  19. cond__end = "{{ end }}"
  20. cond__for_if = "{{ if gt len %s 0 }}{{/* %s, %s */}}{{ range %s }}"
  21. code__for_else = "{{ end }}{{ else }}"
  22. code__longcode = "{{/* %s */}}"
  23. code__buffered = "{{ %s }}"
  24. code__unescaped = "{{ %s }}"
  25. code__else = "{{ else }}"
  26. code__else_if = "{{ else if %s }}"
  27. code__case_when = "{{/* case %s: */}}"
  28. code__case_def = "{{/* default: */}}"
  29. code__mix_block = "{{/* block */}}"
  30. text__str = "%s"
  31. text__comment = "<!--%s -->"
  32. mixin__bgn = "\n%s"
  33. mixin__end = ""
  34. mixin__var_bgn = "{{/* var ("
  35. mixin__var = " %s = %s "
  36. mixin__var_rest = " %s = %#v "
  37. mixin__var_block = " block = `%s` "
  38. mixin__var_end = ") */}}\n"
  39. )
  40. type itemType int8
  41. const (
  42. itemError itemType = iota // error occurred; value is text of error
  43. itemEOF
  44. itemEndL
  45. itemIdent
  46. itemEmptyLine // empty line
  47. itemText // plain text
  48. itemComment // html comment
  49. itemHTMLTag // html <tag>
  50. itemDoctype // Doctype tag
  51. itemDiv // html div for . or #
  52. itemTag // html tag
  53. itemTagInline // inline tags
  54. itemTagEnd // for <tag />
  55. itemTagVoid // self-closing tags
  56. itemTagVoidInline // inline + self-closing tags
  57. itemID // id attribute
  58. itemClass // class attribute
  59. itemAttrStart
  60. itemAttrEnd
  61. itemAttr
  62. itemAttrSpace
  63. itemAttrComma
  64. itemAttrEqual
  65. itemAttrEqualUn
  66. itemFilter
  67. itemFilterText
  68. // itemKeyword // used only to delimit the keywords
  69. itemInclude
  70. itemExtends
  71. itemBlock
  72. itemBlockAppend
  73. itemBlockPrepend
  74. itemMixin
  75. itemMixinCall
  76. itemMixinBlock
  77. itemCode
  78. itemCodeBuffered
  79. itemCodeUnescaped
  80. itemIf
  81. itemElse
  82. itemElseIf
  83. itemUnless
  84. itemEach
  85. itemWhile
  86. itemFor
  87. itemForIfNotContain
  88. itemForElse
  89. itemCase
  90. itemCaseWhen
  91. itemCaseDefault
  92. )
  93. var key = map[string]itemType{
  94. "include": itemInclude,
  95. "extends": itemExtends,
  96. "block": itemBlock,
  97. "append": itemBlockAppend,
  98. "prepend": itemBlockPrepend,
  99. "mixin": itemMixin,
  100. "if": itemIf,
  101. "else": itemElse,
  102. "unless": itemUnless,
  103. "for": itemFor,
  104. "each": itemEach,
  105. "while": itemWhile,
  106. "case": itemCase,
  107. "when": itemCaseWhen,
  108. "default": itemCaseDefault,
  109. "doctype": itemDoctype,
  110. "a": itemTagInline,
  111. "abbr": itemTagInline,
  112. "acronym": itemTagInline,
  113. "b": itemTagInline,
  114. "code": itemTagInline,
  115. "em": itemTagInline,
  116. "font": itemTagInline,
  117. "i": itemTagInline,
  118. "ins": itemTagInline,
  119. "kbd": itemTagInline,
  120. "map": itemTagInline,
  121. "samp": itemTagInline,
  122. "small": itemTagInline,
  123. "span": itemTagInline,
  124. "strong": itemTagInline,
  125. "sub": itemTagInline,
  126. "sup": itemTagInline,
  127. "area": itemTagVoid,
  128. "base": itemTagVoid,
  129. "col": itemTagVoid,
  130. "command": itemTagVoid,
  131. "embed": itemTagVoid,
  132. "hr": itemTagVoid,
  133. "input": itemTagVoid,
  134. "keygen": itemTagVoid,
  135. "link": itemTagVoid,
  136. "meta": itemTagVoid,
  137. "param": itemTagVoid,
  138. "source": itemTagVoid,
  139. "track": itemTagVoid,
  140. "wbr": itemTagVoid,
  141. "br": itemTagVoidInline,
  142. "img": itemTagVoidInline,
  143. }
  144. // NodeType identifies the type of a parse tree node.
  145. type NodeType int
  146. // Type returns itself and provides an easy default implementation
  147. // for embedding in a Node. Embedded in all non-trivial Nodes.
  148. func (t NodeType) Type() NodeType {
  149. return t
  150. }
  151. const (
  152. NodeText NodeType = iota
  153. NodeList
  154. NodeTag
  155. NodeCode
  156. NodeCond
  157. NodeString
  158. NodeDoctype
  159. NodeMixin
  160. NodeBlock
  161. )