pfa 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f913dd85d082580d078e4ad450e301a5319dcc40bd3fdefd7f91d5bac0e3de2
4
- data.tar.gz: 14fcd1184d5f3d27abdd806bdbd21dddc73208096fc12224823f7f3bbabfa16c
3
+ metadata.gz: 954bf4b6d68f905c832b829cb2b60576862cfca4181625120cbf9a05714c1af4
4
+ data.tar.gz: 3e39efe3488f45edd9641a7cb6f6c34d874b5e2e1082772e2b4dca93b71c82a9
5
5
  SHA512:
6
- metadata.gz: 5dfb3c9ec216dfb1c3e9c5b079de3335fb5129ddb8d5a8dcefd72aafdbf8f92df3ae301328dde4bbe2e51c3def13b91629e673af3c50c24d60873b827d9a3c6c
7
- data.tar.gz: 174732fa70895295f02f92205abfec880462a4bbaf78c0e5b78c3145284ece140c8df977974f23e301dab74ab624ab9fc0851c8f537d5af1769bd538bd895b08
6
+ metadata.gz: edaacba4bb1310875003dcb54a4b8cccd784e0ce1f4396d938dd5f4799aa8a3b746577592b59bd3fd012f55991c5e903779b93e3a180105711c743fab9d27c9e
7
+ data.tar.gz: e52c5b8b332751da42088cf79a11926338f812fbc7e44b2109bbf9acb1cb0c453217aff22d9b27182c4ab7a8f81c827553eaaa14028c64504701d407719ef1e1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change log
2
2
 
3
+ ## 1.1.0
4
+
5
+ * Écriture de la table du paradigme de Field Augmenté, de travers.
6
+
3
7
  ## 1.0.3
4
8
 
5
9
  * Isolation du LIB_FOLDER
@@ -87,7 +87,7 @@ nodes:
87
87
  hname: 'DÉV. PART I'
88
88
  abs_start: 1/4
89
89
  abs_duration: 1/4
90
- items: ['premiere_action', 'premier_tiers', 'cle_de_voute']
90
+ items: ['action_1_part1', 'premier_tiers', 'cle_de_voute']
91
91
  action_1_part1:
92
92
  printed: false
93
93
  drawn: false # pas sur le PFA
@@ -128,7 +128,7 @@ nodes:
128
128
  hname: 'DÉV. PART II'
129
129
  abs_start: 1/2
130
130
  abs_duration: 1/4
131
- items: ['premiere_action_dev2', 'deuxieme_tiers', 'crise', 'pivot2']
131
+ items: ['action_1_part2', 'second_tiers', 'crise', 'pivot2']
132
132
  action_1_part2:
133
133
  printed: false
134
134
  drawn: false # pas sur le PFA
@@ -139,7 +139,7 @@ nodes:
139
139
  description: "Pendant de la première action du développement, après la clé de voûte."
140
140
  abs_start: 1/2 + 1/48 # p.e. 60 + 2,5 mn = 62,5 mn
141
141
  abs_duration: null
142
- deuxieme_tiers:
142
+ second_tiers:
143
143
  printed: true
144
144
  drawn: true # sur le PFA
145
145
  required: false
@@ -179,7 +179,7 @@ nodes:
179
179
  hname: 'DÉNOUEMENT'
180
180
  abs_start: 3/4
181
181
  abs_duration: 1/4
182
- items: ['premiere_action_den', 'climax', 'desinence']
182
+ items: ['action_1_denouement', 'climax', 'desinence']
183
183
  action_1_denouement:
184
184
  printed: false
185
185
  drawn: false # pas sur le PFA
@@ -80,6 +80,18 @@ class RelativePFA
80
80
  end
81
81
  end
82
82
 
83
+ def node(node_key)
84
+ data[node_key]
85
+ end
86
+
87
+ # --- Predicate Methods ---
88
+
89
+ # @return true si le paradigme définit le noeud de clé +node_key+
90
+ #
91
+ def node?(node_key)
92
+ data.key?(node_key.to_sym)
93
+ end
94
+
83
95
  # Test la pertinence de la définition de la clé +key+ et produit une
84
96
  # erreur éclairante en cas de problème.
85
97
  #
@@ -7,14 +7,30 @@ class DataTime
7
7
 
8
8
  attr_reader :pfa, :key
9
9
 
10
+ # @oaram pfa [PFA::RelativePFA]
11
+ #
12
+ # @param key [Symbol] La clé structurelle (:zero ou :end_time)
13
+ #
14
+ #
15
+ # @param value [String|Integer|Hash]
16
+ # Dans valeur de cette donnée temps. Ça peut être soit un temps,
17
+ # soit une table contenant le temps et la description.
18
+ #
10
19
  def initialize(pfa, key, value = nil)
11
20
  @pfa = pfa
12
21
  @key = key
13
- @raw_value = value
22
+ @ini_value = value
23
+ case value
24
+ when Hash
25
+ @horloge = value[:t]||value[:time]||value[:horloge]
26
+ @description = value[:d]||value[:description]
27
+ else
28
+ @horloge = value
29
+ end
14
30
  end
15
31
 
16
32
  def time
17
- @time ||= PFA::NTime.new(@raw_value, 0)
33
+ @time ||= PFA::NTime.new(@horloge, 0)
18
34
  end
19
35
  alias :start_at :time
20
36
 
@@ -10,8 +10,6 @@ class Node
10
10
 
11
11
  attr_reader :pfa, :key
12
12
 
13
- attr_reader :description
14
-
15
13
  def initialize(pfa, key, value = nil)
16
14
  @pfa = pfa
17
15
  @key = key
@@ -22,6 +20,12 @@ class Node
22
20
  pfa.img_builder.code_image_magick
23
21
  end
24
22
 
23
+ def description(ensure_output = false)
24
+ @description || begin
25
+ ensure_output ? "" : nil
26
+ end
27
+ end
28
+
25
29
  # --- MÉTHODES TEMPORELLES ---
26
30
 
27
31
  # -- Temps relatifs --
@@ -0,0 +1,112 @@
1
+ #
2
+ # Module qui gère l'écriture du tableau du PFA, décrivant tous les
3
+ # éléments du PFA (même ceux qui ne sont pas affichés dans le
4
+ # graphique)
5
+ #
6
+ # Tous les éléments affichés sont les éléments printed: true dans les
7
+ # données absolues du PFA
8
+ #
9
+ module PFA
10
+
11
+ class RelativePFA
12
+ def print_full_table_in_pdf(pdf, **options)
13
+ table_builder.build(pdf, **options)
14
+ end
15
+ def table_builder
16
+ @table_builder ||= TableBuilder.new(self)
17
+ end
18
+
19
+ class TableBuilder < AnyBuilder
20
+
21
+ # Méthode principale qui reçoit un Prawn::View et écrit dedans la
22
+ # table du PFA en respectant les +options+
23
+ #
24
+ # @param pdf [Prawn::View]
25
+ # @param options [Hash]
26
+ # :rotated Si true, on met la table de travers
27
+ # :font [Hash] La police à utiliser, contenant :name et :size
28
+ #
29
+ def build(pdf, **options)
30
+
31
+ # Penser à utiliser Prawn4book::PdfBook::NTable.safeize(str) pour
32
+ # escaper les mauvais caractères (sauf si inscription directe dans
33
+ # le livre)
34
+
35
+ table_width = pdf.bounds.height # car en travers
36
+ table_height = pdf.bounds.width # idem
37
+ quart_column = table_width / 4
38
+ data_table = {
39
+ width: table_width,
40
+ column_widths: [quart_column, quart_column, quart_column, quart_column],
41
+ cell_style: {
42
+ border_width: [0,1,0,1],
43
+ inline_format: true,
44
+ padding: [2, 5],
45
+ }
46
+ }
47
+
48
+ # -- Description des noeuds --
49
+ nodes = {expo:nil, dev_part1: nil, dev_part2: nil, denoue: nil}
50
+ {
51
+ exposition: :expo,
52
+ developpement_part1: :dev_part1,
53
+ developpement_part2: :dev_part2,
54
+ denouement: :denoue
55
+ }.each do |key_part, key_nodes|
56
+ nodes[key_nodes] = AbsolutePFA.data[:nodes][key_part][:items].collect do |node_key|
57
+ node_key = node_key.to_sym
58
+ # -- Si le paradigme définit ce noeud, on l'ajoute --
59
+ if pfa.node?(node_key)
60
+ node = pfa.send(node_key)
61
+ "<b>#{node.mark}</b> : #{node.description}"
62
+ end
63
+ end.compact.join(' | ')
64
+ end
65
+
66
+ data_lines = [
67
+ # -- Entête de table --
68
+ ["EXPOSITION", "DÉV. PARTIE 1", "DÉV. PARTIE 2", "DÉNOUEMENT"],
69
+ # -- 2e ligne --
70
+ [
71
+ pfa.exposition&.description(true),
72
+ pfa.developpement_part1&.description(true),
73
+ pfa.developpement_part2&.description(true),
74
+ pfa.denouement&.description(true)
75
+ ],
76
+ # -- 3e ligne --
77
+ [nodes[:expo], nodes[:dev_part1], nodes[:dev_part2], nodes[:denoue]]
78
+ ]
79
+
80
+ #
81
+ # Une fonte est-elle définie ?
82
+ #
83
+ options.key?(:font) || options.merge!(font: {name:'Arial', size:8})
84
+ options[:font][:name] ||= 'Arial'
85
+ options[:font][:size] ||= 8
86
+
87
+ pdf.update do
88
+ font(options[:font][:name], **{size: options[:font][:size]})
89
+ if options[:rotated]
90
+ #
91
+ # Il faut écrire la table de travers
92
+ #
93
+ rotate(90, :origin => [bounds.width,bounds.height/2]) do
94
+ # text "La table complète du PFA"
95
+ table(data_lines, data_table) do |tb|
96
+ tb.row(0).style(borders:[:top, :left, :right], border_width:1, align: :center)
97
+ tb.row(-1).style(borders:[:bottom, :left, :right], border_width:1, padding_bottom: 5)
98
+ end
99
+ end
100
+ else
101
+ #
102
+ # Tableau à l'endroit sur la page
103
+ #
104
+ # text "La table complète du PFA"
105
+ table(data_lines, data_table)
106
+ end
107
+ end #/pdf.update
108
+ end
109
+
110
+ end #/class TableBuilder
111
+ end #/class RelativePFA
112
+ end #/module PFA
data/lib/pfa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PFA
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/pfa.rb CHANGED
@@ -19,3 +19,4 @@ require 'pfa/absolute_pfa'
19
19
  require 'pfa/relative_pfa_node'
20
20
  require 'pfa/relative_pfa_datatime'
21
21
  require 'pfa/img_builder'
22
+ require 'pfa/table_builder'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pfa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PhilippePerret
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-09 00:00:00.000000000 Z
11
+ date: 2023-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yaml
@@ -114,6 +114,7 @@ files:
114
114
  - lib/pfa/relative_pfa.rb
115
115
  - lib/pfa/relative_pfa_datatime.rb
116
116
  - lib/pfa/relative_pfa_node.rb
117
+ - lib/pfa/table_builder.rb
117
118
  - lib/pfa/temporal_methods.rb
118
119
  - lib/pfa/version.rb
119
120
  - pfa.gemspec