// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.collide.client.code.autocomplete.css; import com.google.collide.client.code.autocomplete.AbstractTrie; import com.google.collide.client.code.autocomplete.AutocompleteProposal; import com.google.collide.json.client.JsoArray; import com.google.collide.json.shared.JsonArray; import com.google.collide.shared.util.JsonCollections; /** * Holder of all possible CSS attributes. */ public class CssTrie { private static final JsonArray<String> ELEMENTS = JsoArray.from("azimuth", "background", "background-attachment", "background-color", "background-image", "background-position", "background-repeat", "border", "border-bottom", "border-bottom-color", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-style", "border-top-width", "border-width", "bottom", "caption-side", "clear", "clip", "color", "content", "counter-increment", "counter-reset", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "elevation", "empty-cells", "float", "font", "font-family", "font-size", "font-style", "font-variant", "font-weight", "height", "left", "letter-spacing", "line-height", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "max-height", "max-width", "min-height", "min-width", "orphans", "outline", "outline-color", "outline-style", "outline-width", "overflow", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page-break-after", "page-break-before", "page-break-inside", "pause", "pause-after", "pause-before", "pitch", "pitch-range", "play-during", "position", "quotes", "richness", "right", "speak", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "table-layout", "text-align", "text-decoration", "text-indent", "text-transform", "top", "unicode-bidi", "vertical-align", "visibility", "voice-family", "volume", "white-space", "widows", "width", "word-spacing", "z-index"); public static AbstractTrie<AutocompleteProposal> createTrie() { AbstractTrie<AutocompleteProposal> result = new AbstractTrie<AutocompleteProposal>(); for (String name : ELEMENTS.asIterable()) { result.put(name, new AutocompleteProposal(name)); } return result; } /** * Finds all autocompletions and filters them based on a) the prefix that the * user has already typed, and b) the properties that are already present. * * @param prefix the prefix of the property that the user has already typed * @param completedProperties the properties that are already in the document * for the given property * @return an array of autocompletions, or an empty array if there are no * autocompletion proposals */ public static JsonArray<AutocompleteProposal> findAndFilterAutocompletions( AbstractTrie<AutocompleteProposal> trie, String prefix, JsonArray<String> completedProperties) { prefix = prefix.toLowerCase(); JsonArray<AutocompleteProposal> allProposals = trie.search(prefix); JsonArray<AutocompleteProposal> result = JsonCollections.createArray(); for (AutocompleteProposal proposal : allProposals.asIterable()) { if (!completedProperties.contains(proposal.getName())) { result.add(proposal); } } return result; } }