Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some chores post release #54

Merged
merged 4 commits into from
Oct 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
### v2.0.1 2024-10-20 Nantes (France)

#### yocaml

- Fix Table of contents computation when the first index is lower than followers by [xvw](https://github.com/xvw)
- Remove `charset` of the computed `meta` (since it does not follow the form `name => content`) by [xvw](https://github.com/xvw)
- Move some modules (`Datetime` and `Toc`) at the Toplevel of `Yocaml` by [xvw](https://github.com/xvw)


### v2.0.0 2024-10-04 Nantes (France)

#### yocaml
Expand Down
6 changes: 1 addition & 5 deletions lib/core/archetype.ml
Original file line number Diff line number Diff line change
Expand Up @@ -342,11 +342,7 @@ module Page = struct
])
]

let meta_list p =
to_meta "charset" p#page_charset
@ to_meta "description" p#description
@ to_meta_kwd p#tags

let meta_list p = to_meta "description" p#description @ to_meta_kwd p#tags
let has_toc obj = obj#display_toc && Option.is_some obj#toc

let normalize_parameters obj =
Expand Down
7 changes: 5 additions & 2 deletions lib/core/markup.ml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module Toc = struct
type 'a element = { content : 'a; children : 'a t }
and 'a t = 'a element list

let from_list labels =
let rec from_list labels =
let rec aux depth acc = function
| [] -> (List.rev acc, [])
| (level, _) :: _ as labels when level < depth -> (List.rev acc, labels)
Expand All @@ -34,7 +34,10 @@ module Toc = struct
in
match labels with
| [] -> []
| (level, _) :: _ -> labels |> aux level [] |> fst
| (level, _) :: _ -> (
match labels |> aux level [] with
| labels, [] -> labels
| labels, xs -> labels @ from_list xs)

let to_labelled_list toc =
let rec aux current_index elements =
Expand Down
2 changes: 2 additions & 0 deletions lib/core/yocaml.ml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ module Slug = Slug
module Reader = Reader
module Make = Make
module Markup = Markup
module Toc = Markup.Toc
module Datetime = Archetype.Datetime

module Sexp = struct
include Sexp
Expand Down
2 changes: 2 additions & 0 deletions lib/core/yocaml.mli
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ module Metadata = Metadata
module Archetype = Archetype
module Cmd = Cmd
module Slug = Slug
module Toc = Markup.Toc
module Datetime = Archetype.Datetime

(** {1 Building tasks}

Expand Down
8 changes: 4 additions & 4 deletions plugins/yocaml_syndication/datetime.ml
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. *)

type t = Tz.t * Yocaml.Archetype.Datetime.t
type t = Tz.t * Yocaml.Datetime.t

let make ?(tz = Tz.Gmt) date = (tz, date)

let to_string (tz, dt) =
let tz = Tz.to_string tz in
Format.asprintf "%a" (Yocaml.Archetype.Datetime.pp_rfc822 ~tz ()) dt
Format.asprintf "%a" (Yocaml.Datetime.pp_rfc822 ~tz ()) dt

let to_string_rfc3339 (tz, dt) =
let tz = Tz.to_string_rfc3339 tz in
Format.asprintf "%a" (Yocaml.Archetype.Datetime.pp_rfc3339 ~tz ()) dt
Format.asprintf "%a" (Yocaml.Datetime.pp_rfc3339 ~tz ()) dt

let compare (_, a) (_, b) = Yocaml.Archetype.Datetime.compare a b
let compare (_, a) (_, b) = Yocaml.Datetime.compare a b
2 changes: 1 addition & 1 deletion plugins/yocaml_syndication/datetime.mli
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ val compare : t -> t -> int
Timezone (because we expect that every RSS/Atom elements are published on
the same Timezone). *)

val make : ?tz:Tz.t -> Yocaml.Archetype.Datetime.t -> t
val make : ?tz:Tz.t -> Yocaml.Datetime.t -> t
(** [make ?tz datetime] build a [datetime] associated with a Timezone. *)

val to_string : t -> string
Expand Down
94 changes: 94 additions & 0 deletions test/yocaml-expect/toc_test.ml
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,100 @@ let%expect_test "generate toc - from xvw.lol articles - 2" =
5-Pour conclure
|}]

let%expect_test "generate toc - from xvw.lol articles - 3" =
print_toc_str ~check_label:false
@@ from_markdown_title
[
"### Mise en contexte"
; "#### Simple, mais pas sur tous les aspects"
; "#### Découverte des règles via Internet"
; "## Le Tetra Master"
; "### Les cartes dans l'histoire"
; "### La collecte des cartes"
; "#### Une brève note sur l'aléatoire"
; "### Les règles selon le manuel"
; "#### Défier un adversaire"
; "#### Règles basiques"
; "##### Gagner une carte"
; "##### Récompenses et pénalités"
; "#### Nombre limite de cartes et menu"
; "#### Conclusion de la lecture du manuel"
; "### Règles détaillées"
; "#### Initiation d'une partie"
; "#### Plateau de jeu"
; "#### Prise de cartes simple"
; "#### Bataille"
; "##### Batailles multiples"
; "##### Anatomie d'une carte"
; "##### Lire les statistiques d'une carte"
; "##### Interprétation des statistiques hexadécimales"
; "##### Déroulé de la bataille, toujours plus d'aléas"
; "##### Calcul des probabilités de victoire en duel"
; "##### Les combos"
; "#### Pré-conclusion sur les règles"
; "### Expérience et évolution des cartes"
; "#### Evolution de l'attaque et des défenses"
; "#### Evolution du type de cartes"
; "#### Liste des cartes"
; "### Le niveau de collectionneur"
; "#### Les différents niveaux"
; "#### Sur la distinction des cartes"
; "#### Les points attribués par cartes"
; "##### Note sur les permutations de motifs"
; "#### La cerise sur le gateau"
; "## Pour conclure, enfin"
; "### Qu'en tirer"
; "### La suite"
; "### Remerciements"
; "### L'ultime mot de la fin"
];
[%expect
{|
TOC:
1-Mise en contexte
1.1-Simple, mais pas sur tous les aspects
1.2-Découverte des règles via Internet
2-Le Tetra Master
2.1-Les cartes dans l'histoire
2.2-La collecte des cartes
2.2.1-Une brève note sur l'aléatoire
2.3-Les règles selon le manuel
2.3.1-Défier un adversaire
2.3.2-Règles basiques
2.3.2.1-Gagner une carte
2.3.2.2-Récompenses et pénalités
2.3.3-Nombre limite de cartes et menu
2.3.4-Conclusion de la lecture du manuel
2.4-Règles détaillées
2.4.1-Initiation d'une partie
2.4.2-Plateau de jeu
2.4.3-Prise de cartes simple
2.4.4-Bataille
2.4.4.1-Batailles multiples
2.4.4.2-Anatomie d'une carte
2.4.4.3-Lire les statistiques d'une carte
2.4.4.4-Interprétation des statistiques hexadécimales
2.4.4.5-Déroulé de la bataille, toujours plus d'aléas
2.4.4.6-Calcul des probabilités de victoire en duel
2.4.4.7-Les combos
2.4.5-Pré-conclusion sur les règles
2.5-Expérience et évolution des cartes
2.5.1-Evolution de l'attaque et des défenses
2.5.2-Evolution du type de cartes
2.5.3-Liste des cartes
2.6-Le niveau de collectionneur
2.6.1-Les différents niveaux
2.6.2-Sur la distinction des cartes
2.6.3-Les points attribués par cartes
2.6.3.1-Note sur les permutations de motifs
2.6.4-La cerise sur le gateau
3-Pour conclure, enfin
3.1-Qu'en tirer
3.2-La suite
3.3-Remerciements
3.4-L'ultime mot de la fin
|}]

let%expect_test "from toc to html" =
print_html [];
[%expect {| <div class='hidden'></div> |}]
Expand Down
Loading