--- # Syntaxe des raccourcis SPIP, version 0.0.1
    #
    # Si on nomme une regle, elle devient surchargeable

math:
  if_str: "<math>"
  type: all
  is_callback: y
  replace: "replace_math"
  priority: -50 # en tout premier : le contenu des formules math ne doit pas etre modifie

traiter_retours_chariots_1:
  # Harmonise les retours chariots et mange les paragraphes html
  if_chars: "\r"
  match: ",\r\n?,S"
  replace: "\n"
  priority: -40 # avant tout

init-trim:
  # trim
  type: all
  is_callback: y
  replace: trim
  priority: -40 # avant tout

init-saut:
  type: all
  replace: "\n$0"
  priority: -40

lignes-vides:
  match: ",^[ \t]+$,m"
  replace: ""
  priority: -35 # avant les tableaux

tableaux:
  type: all
  # included subwheel with relative filepath
  replace: spip/spip-tableaux.yaml
  is_wheel: Y
  if_str: "\n|"
  priority: -30 # avant les raccourcis

listes:
  if_str: "\n-"
  is_wheel: Y
  type: all
  replace: spip/spip-listes.yaml
  priority: -20 # avant !paragraphes

echappe-tags:
  # voir restaure-tags plus bas
  match: ",</?[a-z!][^<>]*?[{}_-][^<>]*>,imsS"
  if_chars: "{}_-"
  priority: -20 # avant !paragraphes
  is_wheel: Y
  replace:
    echappe-tags-sub:
      if_match: "/[{}]|\n[_-]|--/"
      match: ['{', '}', '_', '-']
      replace: ["\x1\x1", "\x1\x2", "\x1\x3", "\x1\x4"]
      type: str

echappe-raccourcis:
  if_str: '\'
  priority: -20 # avant !paragraphes
  match: ['\{', '\}', '\_', '\-', '\[', '\]', '\|', '\<', '\>', '\\', '\*', '\#', '\+', '\~']
  replace: ["\x1\x1", "\x1\x2", "\x1\x3", "\x1\x4", "\x1\x5", "\x1\x6", "\x1\x7", "\x1\x8", "\x1\x9", "\x1\x10", "\x1\x11", "\x1\x12", "\x1\x13", "\x1\x14"]
  type: str

ligne-horizontale:
  match: "/\n(----+|____+)/S"
  replace: "\n\n\n<hr class=\"spip\" />\n\n\n"
  if_chars: "\n"
  priority: -20 # avant !paragraphes

alinea:
  match: "/\n-- */"
  replace: "\n<br />&mdash;&nbsp;"
  if_str: "\n--"
  priority: -20 # avant !paragraphes

puce:
  match: "/\n- */S"
  replace: replace_puce
  if_str: "\n-"
  is_callback: Y
  priority: -20 # avant !paragraphes

br-inutile:
  match: "/(^|^\n|\n\n)_ +/S"
  replace: "$1"
  if_str: "_ "
  priority: -20 # avant !paragraphes

br:
  match: "/\n_ +/S"
  replace: "<br class='manualbr' />"
  if_str: "\n_"
  priority: -20 # avant !paragraphes

abbr:
  # raccourcis en [ABBR|abbreviation]
  if_chars: "["
  if_chars: "|"
  match: "/\[([^\|\[\]>]+)\|([^\|\]\{>]+)(?:\{([a-z]+)\})?\]/S"
  is_callback: Y
  replace: inserer_abbr

intertitres-compliques:
  # raccourcis imbriques en {{{{..}}}}
  # intertitres
  match: ['/(^|[^{])[{][{][{]/S', '/[}][}][}]($|[^}])/S']
  replace: ["$1\n\n\n<h2 class=\"spip\">", "</h2>\n\n\n$1"]
  if_str: '}}}}'

intertitres:
  # raccourcis en {{{..}}}
  # intertitres
  match: ['{{{', '}}}']
  replace: ["\n\n\n<h2 class=\"spip\">", "</h2>\n\n\n"]
  if_str: '{{{'
  type: str

gras-vide:
  # faux raccourcis vides en {{}}
  # echappes
  match: '{{}}'
  replace: "\x1\x1\x1\x1\x1\x2\x1\x2"
  type: str
  if_str: '{{'

gras:
  # raccourcis en {{..}}
  # strong
  match: ['{{', '}}']
  replace: ['<strong>', '</strong>']
  type: str
  if_str: '{{'

italiques-vide:
  # faux raccourcis vides en {}
  # echappes
  match: '{}'
  replace: "\x1\x1\x1\x2"
  type: str
  if_str: '{'

italiques:
  # raccourcis en {..}
  # i
  match: ['{', '}']
  replace: ['<i>', '</i>']
  type: str
  if_str: '{'

paragraphes:
  # paragraphes
  # lignes vides consecutives, br imbriques dans des p
  # mais attention pas les br trop riches (ex: br style=clear:both)
  match: ["/ *\n(?: *\n)+(?:<br ?\/?>)*/S", '/(?:<br\b[^>]*>){2,}\s*/S', "/(<p\b[^>]*>)\n*(?:<br ?\/?>\n*)+/S"]
  replace: ['<p>', '<p>', '$1']
  priority: 0

quote:
  # raccourci <quote>
  match: ['<quote>', '</quote>']
  replace: ['<blockquote class="spip"><p>', '</blockquote>']
  if_str: '<quote>'
  type: str

intro:
  # suppr raccourci <intro>
  # + suppression de <intro>
  match: ['<intro>', '</intro>']
  replace: ['', '']
  if_str: '<intro>'
  type: str

br-restant:
  # eliminer les br restant en debut de texte
  match: "@^\n<br />@S"
  replace: ''
  if_str: "\n<br"
  priority: -20 # avant !paragraphes


poesie:
  # poesie|poetry
  # utilise une callback
  match: ",<poe(sie|try)>(.*)</poe(sie|try)>,UimsS"
  replace: spip/spip-poesie.yaml
  pick_match: 2
  is_wheel: Y
  if_str: '<poe'
  priority: -40

restaure-tags:
  # voir echappe-tags ci-dessus
  if_chars: "\x1"
  match: ["\x1\x1", "\x1\x2", "\x1\x3", "\x1\x4", "\x1\x5", "\x1\x6", "\x1\x7", "\x1\x8", "\x1\x9", "\x1\x10", "\x1\x11", "\x1\x12", "\x1\x13", "\x1\x14"]
  replace: ['{', '}', '_', '-', '[', ']', '|', '<', '>', '\', '*', '#', '+', '~']
  type: str

echappe-chevron-solitaire:
  # un < qui n'est pas suivi d'une lettre ou d'un / est toujours echappe
  type: preg
  match: "/<(?=[^a-z\/!])/Uims"
  replace: "&lt;"

echappe-chevron-pas-ferme:
  # un < suivi d'une lettre ou d'un / est echappe si il semble mal ferme
  type: preg
  match: "/<([^><\"'!]*)(?=<|$)/Uims"
  replace: "&lt;$1"