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.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/pandoc_abnt/lista_filter.rb', line 44

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

#lista_ordenada_por_letras?(node) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
# File 'lib/pandoc_abnt/lista_filter.rb', line 24

def lista_ordenada_por_letras?(node)
  # node: {"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."}]}]]]}
  node["t"] == "OrderedList" and  node["c"][0][1]["t"]=="LowerAlpha"
end