blob: d466abb9fea5db090726e72b21dfcc1da903ce90 [file] [log] [blame]
// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
use askalono::*;
use std::collections::HashMap;
use std::fs::File;
use std::io::{stdin, Read};
enum Annotation {
Begin(String),
End,
}
fn main() {
let args: Vec<_> = std::env::args().collect();
if args.len() != 2 {
eprintln!("usage: annotate-text cache.bin.zstd < input.txt > output.html");
std::process::exit(1);
}
let cache = &args[1];
let store = Store::from_cache(File::open(cache).expect("couldn't read cache file"))
.expect("error parsing cache");
let mut buf = String::new();
stdin()
.read_to_string(&mut buf)
.expect("couldn't read stdin");
let strategy = ScanStrategy::new(&store)
.mode(ScanMode::TopDown)
.confidence_threshold(0.80);
let results = strategy
.scan(&TextData::new(&buf))
.expect("scan didn't complete successfully");
let mut annotations = HashMap::with_capacity(results.containing.len() * 2);
for result in &results.containing {
annotations.insert(
result.line_range.0,
Annotation::Begin(result.license.name.to_owned()),
);
annotations.insert(result.line_range.1, Annotation::End);
}
println!("<html><body>");
println!("<pre>{:#?}</pre>", results);
println!("<pre>");
for (i, line) in buf.lines().enumerate() {
if annotations.contains_key(&i) {
let a = annotations.get(&i).unwrap();
match a {
Annotation::Begin(license) => {
print!(
r#"<div style="background-color: rgba(50, 50, 255, 0.3)" title="{}">"#,
license
);
}
Annotation::End => {
print!("</div>");
}
}
}
println!("{}", line);
}
println!("</pre></body></html>");
}