lgpl_docs/
lib.rs

1extern crate stripper_lib;
2
3use std::io;
4use std::path::Path;
5use stripper_lib::{
6    loop_over_files,
7    parse_cmts,
8    regenerate_comments,
9    strip_comments,
10};
11
12#[derive(Clone, Copy, Debug)]
13pub enum Library {
14    Atk,
15    Cairo,
16    Gdk,
17    Gdk4,
18    GdkPixbuf,
19    Gio,
20    Glib,
21    Graphene,
22    Gsk4,
23    Gtk,
24    Gtk4,
25    Pango,
26    PangoCairo,
27    SourceView,
28}
29
30fn docs(lib: Library) -> Option<&'static str> {
31    match lib {
32        Library::Glib => Some(include_str!("../glib/docs.md")),
33        Library::Gio => Some(include_str!("../gio/docs.md")),
34        Library::Cairo => Some(include_str!("../cairo/docs.md")),
35        Library::Gdk => Some(include_str!("../gdk/docs.md")),
36        Library::Gdk4 => Some(include_str!("../gdk4/docs.md")),
37        Library::GdkPixbuf => Some(include_str!("../gdk-pixbuf/docs.md")),
38        Library::Graphene => Some(include_str!("../graphene/docs.md")),
39        Library::Gsk4 => Some(include_str!("../gsk4/docs.md")),
40        Library::Gtk => Some(include_str!("../gtk/docs.md")),
41        Library::Gtk4 => Some(include_str!("../gtk4/docs.md")),
42        _ => None,
43    }
44}
45
46fn vendor_docs(lib: Library) -> Option<&'static str> {
47    match lib {
48        Library::Atk => Some(include_str!("../atk/vendor.md")),
49        Library::Glib => Some(include_str!("../glib/vendor.md")),
50        Library::Gio => Some(include_str!("../gio/vendor.md")),
51        Library::Pango => Some(include_str!("../pango/vendor.md")),
52        Library::Gdk => Some(include_str!("../gdk/vendor.md")),
53        Library::Gdk4 => Some(include_str!("../gdk4/vendor.md")),
54        Library::GdkPixbuf => Some(include_str!("../gdk-pixbuf/vendor.md")),
55        Library::Graphene => Some(include_str!("../graphene/vendor.md")),
56        Library::Gsk4 => Some(include_str!("../gsk4/vendor.md")),
57        Library::Gtk => Some(include_str!("../gtk/vendor.md")),
58        Library::Gtk4 => Some(include_str!("../gtk4/vendor.md")),
59        Library::SourceView => Some(include_str!("../sourceview/vendor.md")),
60        Library::PangoCairo => Some(include_str!("../pangocairo/vendor.md")),
61        _ => None,
62    }
63}
64
65/// Embeds the docs.
66///
67/// `path` is the root directory to process.
68///
69/// `ignores` is the list of files to skip (relative to `path`).
70pub fn embed<P: AsRef<Path>>(library: Library, path: P, ignores: &[&str]) {
71    if let Some(docs) = docs(library) {
72        do_embed(docs, path.as_ref(), ignores);
73    }
74    if let Some(docs) = vendor_docs(library) {
75        do_embed(docs, path.as_ref(), ignores);
76    }
77}
78
79fn do_embed(docs: &str, path: &Path, ignores: &[&str]) {
80    let mut infos = parse_cmts(docs.lines(), true);
81    loop_over_files(path, &mut |w, s| regenerate_comments(w, s, &mut infos, true, true),
82        &ignores, false);
83}
84
85/// Remove any doc comments.
86///
87/// `path` is the root directory to process.
88///
89/// `ignores` is the list of files to skip (relative to `path`).
90pub fn purge<P: AsRef<Path>>(path: P, ignores: &[&str]) {
91    loop_over_files(path.as_ref(), &mut |w, s| strip_comments(w, s, &mut io::sink(), true),
92        &ignores, false);
93}