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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/assets/fr/PFA_ABSOLUTE_DATA.yaml +4 -4
- data/lib/pfa/relative_pfa.rb +12 -0
- data/lib/pfa/relative_pfa_datatime.rb +18 -2
- data/lib/pfa/relative_pfa_node.rb +6 -2
- data/lib/pfa/table_builder.rb +112 -0
- data/lib/pfa/version.rb +1 -1
- data/lib/pfa.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 954bf4b6d68f905c832b829cb2b60576862cfca4181625120cbf9a05714c1af4
|
4
|
+
data.tar.gz: 3e39efe3488f45edd9641a7cb6f6c34d874b5e2e1082772e2b4dca93b71c82a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edaacba4bb1310875003dcb54a4b8cccd784e0ce1f4396d938dd5f4799aa8a3b746577592b59bd3fd012f55991c5e903779b93e3a180105711c743fab9d27c9e
|
7
|
+
data.tar.gz: e52c5b8b332751da42088cf79a11926338f812fbc7e44b2109bbf9acb1cb0c453217aff22d9b27182c4ab7a8f81c827553eaaa14028c64504701d407719ef1e1
|
data/CHANGELOG.md
CHANGED
@@ -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: ['
|
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: ['
|
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
|
-
|
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: ['
|
182
|
+
items: ['action_1_denouement', 'climax', 'desinence']
|
183
183
|
action_1_denouement:
|
184
184
|
printed: false
|
185
185
|
drawn: false # pas sur le PFA
|
data/lib/pfa/relative_pfa.rb
CHANGED
@@ -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
|
-
@
|
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(@
|
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
data/lib/pfa.rb
CHANGED
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
|
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-
|
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
|