pfa 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|