// 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!(""); println!("
{:#?}
", results); println!("
");
    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#"
"#, license ); } Annotation::End => { print!("
"); } } } println!("{}", line); } println!("
"); }