gitee.com/lonely0422/gometalinter.git@v3.0.1-0.20190307123442-32416ab75314+incompatible/_linters/src/github.com/nbutton23/zxcvbn-go/adjacency/adjcmartix.go (about)

     1  package adjacency
     2  
     3  import (
     4  	"encoding/json"
     5  	"log"
     6  	//	"fmt"
     7  	"github.com/nbutton23/zxcvbn-go/data"
     8  )
     9  
    10  type AdjacencyGraph struct {
    11  	Graph         map[string][]string
    12  	averageDegree float64
    13  	Name          string
    14  }
    15  
    16  var AdjacencyGph = make(map[string]AdjacencyGraph)
    17  
    18  func init() {
    19  	AdjacencyGph["qwerty"] = BuildQwerty()
    20  	AdjacencyGph["dvorak"] = BuildDvorak()
    21  	AdjacencyGph["keypad"] = BuildKeypad()
    22  	AdjacencyGph["macKeypad"] = BuildMacKeypad()
    23  	AdjacencyGph["l33t"] = BuildLeet()
    24  }
    25  
    26  func BuildQwerty() AdjacencyGraph {
    27  	data, err := zxcvbn_data.Asset("data/Qwerty.json")
    28  	if err != nil {
    29  		panic("Can't find asset")
    30  	}
    31  	return GetAdjancencyGraphFromFile(data, "qwerty")
    32  }
    33  func BuildDvorak() AdjacencyGraph {
    34  	data, err := zxcvbn_data.Asset("data/Dvorak.json")
    35  	if err != nil {
    36  		panic("Can't find asset")
    37  	}
    38  	return GetAdjancencyGraphFromFile(data, "dvorak")
    39  }
    40  func BuildKeypad() AdjacencyGraph {
    41  	data, err := zxcvbn_data.Asset("data/Keypad.json")
    42  	if err != nil {
    43  		panic("Can't find asset")
    44  	}
    45  	return GetAdjancencyGraphFromFile(data, "keypad")
    46  }
    47  func BuildMacKeypad() AdjacencyGraph {
    48  	data, err := zxcvbn_data.Asset("data/MacKeypad.json")
    49  	if err != nil {
    50  		panic("Can't find asset")
    51  	}
    52  	return GetAdjancencyGraphFromFile(data, "mac_keypad")
    53  }
    54  func BuildLeet() AdjacencyGraph {
    55  	data, err := zxcvbn_data.Asset("data/L33t.json")
    56  	if err != nil {
    57  		panic("Can't find asset")
    58  	}
    59  	return GetAdjancencyGraphFromFile(data, "keypad")
    60  }
    61  
    62  func GetAdjancencyGraphFromFile(data []byte, name string) AdjacencyGraph {
    63  
    64  	var graph AdjacencyGraph
    65  	err := json.Unmarshal(data, &graph)
    66  	if err != nil {
    67  		log.Fatal(err)
    68  	}
    69  	graph.Name = name
    70  	return graph
    71  }
    72  
    73  //on qwerty, 'g' has degree 6, being adjacent to 'ftyhbv'. '\' has degree 1.
    74  //this calculates the average over all keys.
    75  //TODO double check that i ported this correctly scoring.coffee ln 5
    76  func (adjGrp AdjacencyGraph) CalculateAvgDegree() float64 {
    77  	if adjGrp.averageDegree != float64(0) {
    78  		return adjGrp.averageDegree
    79  	}
    80  	var avg float64
    81  	var count float64
    82  	for _, value := range adjGrp.Graph {
    83  
    84  		for _, char := range value {
    85  			if char != "" || char != " " {
    86  				avg += float64(len(char))
    87  				count++
    88  			}
    89  		}
    90  
    91  	}
    92  
    93  	adjGrp.averageDegree = avg / count
    94  
    95  	return adjGrp.averageDegree
    96  }