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
65pub 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
85pub 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}