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 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