lithium3

Check-in [00a97167e5]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:lithium-markdown: add a "spoiler" span element, marked by double '%'
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 00a97167e592ac0ea5806672b28ff7d72d8c4870
User & Date: nat 2019-03-03 19:37:00
Context
2019-03-04
19:59
lithium-spoiler_filters: new filter to rot13-scramble spoiler spans check-in: 2f20876918 user: nat tags: trunk
2019-03-03
19:37
lithium-markdown: add a "spoiler" span element, marked by double '%' check-in: 00a97167e5 user: nat tags: trunk
2017-07-02
20:05
lithium-comment_cookie_smaz: improve dictionary check-in: 3a87f98cd6 user: nat tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/lithium-markdown.adb.

25
26
27
28
29
30
31





32
33
34
35
36
37
38
39
40
41
42
43
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
   package Sx renames Natools.S_Expressions;

   type Buffer_Access is access Sx.Atom_Buffers.Atom_Buffer;

   type Buffer_Copy is new Markup.Element_Callback with record
      Source, Destination : not null Buffer_Access;
   end record;






   procedure Append
     (To : in out Buffer_Access;
      Text : in String);

   function Export (Buffer : Sx.Atom_Buffers.Atom_Buffer)
     return Sx.Atom_Refs.Immutable_Reference;

   overriding procedure Open (Element : in out Buffer_Copy);
   overriding procedure Append
     (Element : in out Buffer_Copy; Text : in String)
     is null;
   overriding procedure Close (Element : in out Buffer_Copy) is null;

   package Renderers is new Markup.Renderers.Html (Buffer_Access);







   ------------------------------
   -- Local Helper Subprograms --
   ------------------------------

   procedure Append
     (To : in out Buffer_Access;
      Text : in String)
   is
      pragma Unmodified (To);
   begin
      To.Append (Sx.To_Atom (Text));
   end Append;















   function Export (Buffer : Sx.Atom_Buffers.Atom_Buffer)
     return Sx.Atom_Refs.Immutable_Reference
   is
      use type Sx.Offset;

      Accessor : constant Sx.Atom_Refs.Accessor := Buffer.Raw_Query;







>
>
>
>
>

















>
>
>
>
>













>
>
>
>
>
>
>
>
>
>
>
>
>







25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
   package Sx renames Natools.S_Expressions;

   type Buffer_Access is access Sx.Atom_Buffers.Atom_Buffer;

   type Buffer_Copy is new Markup.Element_Callback with record
      Source, Destination : not null Buffer_Access;
   end record;

   type Spoiler_Span is new Markup.Element_Callback with record
      Buffer : Buffer_Access;
   end record;


   procedure Append
     (To : in out Buffer_Access;
      Text : in String);

   function Export (Buffer : Sx.Atom_Buffers.Atom_Buffer)
     return Sx.Atom_Refs.Immutable_Reference;

   overriding procedure Open (Element : in out Buffer_Copy);
   overriding procedure Append
     (Element : in out Buffer_Copy; Text : in String)
     is null;
   overriding procedure Close (Element : in out Buffer_Copy) is null;

   package Renderers is new Markup.Renderers.Html (Buffer_Access);


   overriding procedure Open (Element : in out Spoiler_Span);
   overriding procedure Append
     (Element : in out Spoiler_Span; Text : in String);
   overriding procedure Close (Element : in out Spoiler_Span);

   ------------------------------
   -- Local Helper Subprograms --
   ------------------------------

   procedure Append
     (To : in out Buffer_Access;
      Text : in String)
   is
      pragma Unmodified (To);
   begin
      To.Append (Sx.To_Atom (Text));
   end Append;


   overriding procedure Append
     (Element : in out Spoiler_Span; Text : in String) is
   begin
      Element.Buffer.Append (Sx.To_Atom (Text));
   end Append;


   overriding procedure Close (Element : in out Spoiler_Span) is
   begin
      Element.Buffer.Append (Sx.To_Atom ("</span>"));
   end Close;


   function Export (Buffer : Sx.Atom_Buffers.Atom_Buffer)
     return Sx.Atom_Refs.Immutable_Reference
   is
      use type Sx.Offset;

      Accessor : constant Sx.Atom_Refs.Accessor := Buffer.Raw_Query;
77
78
79
80
81
82
83





84
85
86
87
88
89
90


   overriding procedure Open (Element : in out Buffer_Copy) is
   begin
      Element.Destination.Soft_Reset;
      Element.Destination.Append (Element.Source.Data);
   end Open;








   -----------------
   -- Worker Tasks --
   -----------------








>
>
>
>
>







100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118


   overriding procedure Open (Element : in out Buffer_Copy) is
   begin
      Element.Destination.Soft_Reset;
      Element.Destination.Append (Element.Source.Data);
   end Open;

   overriding procedure Open (Element : in out Spoiler_Span) is
   begin
      Element.Buffer.Append (Sx.To_Atom ("<span class=""spoiler"">"));
   end Open;



   -----------------
   -- Worker Tasks --
   -----------------

148
149
150
151
152
153
154

155
156
157
158
159
160
161
      Parser.Pseudoprotocol_Class (Renderer.Span);
      Parser.Pseudoprotocol_Id (Renderer.Anchor);
      Parser.Pseudoprotocol_Raw (Renderer.Raw_Html_Span);

      Parser.Emphasis (Renderer.Inserted, 2, "+");
      Parser.Emphasis (Renderer.Deleted, 2, "-");
      Parser.Emphasis (Renderer.Span, 1, "|");


      loop
         Buffer.Soft_Reset;
         Parsed.Soft_Reset;
         Summary_Buf.Soft_Reset;
         Parser.Reset;








>







176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
      Parser.Pseudoprotocol_Class (Renderer.Span);
      Parser.Pseudoprotocol_Id (Renderer.Anchor);
      Parser.Pseudoprotocol_Raw (Renderer.Raw_Html_Span);

      Parser.Emphasis (Renderer.Inserted, 2, "+");
      Parser.Emphasis (Renderer.Deleted, 2, "-");
      Parser.Emphasis (Renderer.Span, 1, "|");
      Parser.Emphasis (Spoiler_Span'(Buffer => Parsed), 2, "%");

      loop
         Buffer.Soft_Reset;
         Parsed.Soft_Reset;
         Summary_Buf.Soft_Reset;
         Parser.Reset;

260
261
262
263
264
265
266

267
268
269
270
271
272
273
         Renderer.Table_Data_Cell);
      Parser.Discount_Fenced_Code_Block (Renderer.Code_Block);

      Parser.Link (Renderer.Anchor);

      Parser.Emphasis (Renderer.Inserted, 2, "+");
      Parser.Emphasis (Renderer.Deleted, 2, "-");


      loop
         Buffer.Soft_Reset;
         Parsed.Soft_Reset;
         Parser.Reset;

         select







>







289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
         Renderer.Table_Data_Cell);
      Parser.Discount_Fenced_Code_Block (Renderer.Code_Block);

      Parser.Link (Renderer.Anchor);

      Parser.Emphasis (Renderer.Inserted, 2, "+");
      Parser.Emphasis (Renderer.Deleted, 2, "-");
      Parser.Emphasis (Spoiler_Span'(Buffer => Parsed), 2, "%");

      loop
         Buffer.Soft_Reset;
         Parsed.Soft_Reset;
         Parser.Reset;

         select