Class: PandocAbnt::ListaFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/pandoc_abnt/lista_filter.rb

Overview

Essa classe é responsável por filtrar as listas para adaptá-las as normas da ABNT.

Instance Method Summary collapse

Instance Method Details

#filtra_json(pandoc_json_tree) ⇒ Object

Converte a seguinte lista:

a) item 1. b) item 2. c) item 3.

Para:

a) item 1; b) item 2; c) item 3.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/pandoc_abnt/lista_filter.rb', line 38

def filtra_json(pandoc_json_tree)
  # Exemplo de código:
  
  # {"blocks":[{"t":"OrderedList","c":[[1,{"t":"LowerAlpha"},{"t":"OneParen"}],[[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"1."}]}],[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"2."}]}],[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"3."}]}]]]}],"pandoc-api-version":[1,17,0,4],"meta":{}}
  tree = JSON.parse(pandoc_json_tree)
  meta = tree["meta"]
  blocks = tree["blocks"]
  api = tree["pandoc-api-version"]
  
  filtrados = []
  anterior = nil
  
  if not blocks
    raise ArgumentError, "Problema no argumento passado: #{pandoc_json_tree}"
  end

  blocks.each do |node|
    if (lista?(node)) then
      lista_modificada = processa_items_da_lista(node)
      filtrados << lista_modificada
    else
      filtrados << node
    end
  end
  JSON.generate({"blocks"=>filtrados, "pandoc-api-version" => api, "meta" => meta})
end

#lista?(node) ⇒ Boolean

Verifica se node é um parágrafo que inicia com “Fonte:”

Returns:

  • (Boolean)


12
13
14
# File 'lib/pandoc_abnt/lista_filter.rb', line 12

def lista?(node)
   lista_ordenada?(node) or lista_nao_ordenada?(node)
end

#lista_nao_ordenada?(node) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/pandoc_abnt/lista_filter.rb', line 20

def lista_nao_ordenada?(node)
  node["t"] == "BulletList"
end

#lista_ordenada?(node) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/pandoc_abnt/lista_filter.rb', line 16

def lista_ordenada?(node)
  node["t"] == "OrderedList"
end