/*
GNU GENERAL LICENSE
Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
verion 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General License for more details.
You should have received a copy of the GNU General Public
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it
*/
package org.lobobrowser.html;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.lobobrowser.html.builder.AnchorBuilder;
import org.lobobrowser.html.builder.AppletBuilder;
import org.lobobrowser.html.builder.AudioBuilder;
import org.lobobrowser.html.builder.BaseBuilder;
import org.lobobrowser.html.builder.BaseFontBuilder;
import org.lobobrowser.html.builder.BigBuilder;
import org.lobobrowser.html.builder.BlockquoteBuilder;
import org.lobobrowser.html.builder.BodyBuilder;
import org.lobobrowser.html.builder.BrBuilder;
import org.lobobrowser.html.builder.ButtonBuilder;
import org.lobobrowser.html.builder.CanvasBuilder;
import org.lobobrowser.html.builder.CaptionBuilder;
import org.lobobrowser.html.builder.CenterBuilder;
import org.lobobrowser.html.builder.CodeBuilder;
import org.lobobrowser.html.builder.CommandBuilder;
import org.lobobrowser.html.builder.DetailsBuilder;
import org.lobobrowser.html.builder.DivBulder;
import org.lobobrowser.html.builder.EmBuilder;
import org.lobobrowser.html.builder.FontBuilder;
import org.lobobrowser.html.builder.FormBuilder;
import org.lobobrowser.html.builder.FrameBuilder;
import org.lobobrowser.html.builder.FramesetBuilder;
import org.lobobrowser.html.builder.HeadBuilder;
import org.lobobrowser.html.builder.HeadingBuilder;
import org.lobobrowser.html.builder.HrBuilder;
import org.lobobrowser.html.builder.HtmlBuilder;
import org.lobobrowser.html.builder.HtmlObjectBuilder;
import org.lobobrowser.html.builder.IFrameBuilder;
import org.lobobrowser.html.builder.ImgBuilder;
import org.lobobrowser.html.builder.InputBuilder;
import org.lobobrowser.html.builder.KeygenBuilder;
import org.lobobrowser.html.builder.LabelBuilder;
import org.lobobrowser.html.builder.LiBuilder;
import org.lobobrowser.html.builder.LinkBuilder;
import org.lobobrowser.html.builder.MarqueeBuilder;
import org.lobobrowser.html.builder.MeterBuilder;
import org.lobobrowser.html.builder.NavBuilder;
import org.lobobrowser.html.builder.OlBuilder;
import org.lobobrowser.html.builder.OptionBuilder;
import org.lobobrowser.html.builder.OutputBuilder;
import org.lobobrowser.html.builder.PBuilder;
import org.lobobrowser.html.builder.PreBuilder;
import org.lobobrowser.html.builder.ProgressBuilder;
import org.lobobrowser.html.builder.ScriptBuilder;
import org.lobobrowser.html.builder.SectionBuilder;
import org.lobobrowser.html.builder.SelectBuilder;
import org.lobobrowser.html.builder.SmallBuilder;
import org.lobobrowser.html.builder.SpanBuilder;
import org.lobobrowser.html.builder.StrikeBuilder;
import org.lobobrowser.html.builder.StrongBuilder;
import org.lobobrowser.html.builder.StyleBuilder;
import org.lobobrowser.html.builder.SubBuilder;
import org.lobobrowser.html.builder.SupBuilder;
import org.lobobrowser.html.builder.TableBuilder;
import org.lobobrowser.html.builder.TdBuilder;
import org.lobobrowser.html.builder.TextareaBuilder;
import org.lobobrowser.html.builder.ThBuilder;
import org.lobobrowser.html.builder.TimeBuilder;
import org.lobobrowser.html.builder.TitleBuilder;
import org.lobobrowser.html.builder.TrBuilder;
import org.lobobrowser.html.builder.TtBuilder;
import org.lobobrowser.html.builder.UlBuilder;
import org.lobobrowser.html.builder.UnderlineBuilder;
import org.lobobrowser.html.builder.VideoBuilder;
import org.lobobrowser.html.buildersvg.SVGBuilder;
import org.lobobrowser.html.buildersvg.SVGCircleBuilder;
import org.lobobrowser.html.buildersvg.SVGDefsBuilder;
import org.lobobrowser.html.buildersvg.SVGEllipseBuilder;
import org.lobobrowser.html.buildersvg.SVGGBuilder;
import org.lobobrowser.html.buildersvg.SVGLineBuilder;
import org.lobobrowser.html.buildersvg.SVGPathBuilder;
import org.lobobrowser.html.buildersvg.SVGPolygonBuilder;
import org.lobobrowser.html.buildersvg.SVGPolylineBuilder;
import org.lobobrowser.html.buildersvg.SVGRectBuilder;
import org.lobobrowser.html.buildersvg.SVGSymbolBuilder;
import org.lobobrowser.html.buildersvg.SVGTextBuilder;
import org.lobobrowser.html.buildersvg.SVGUseBuilder;
import org.lobobrowser.html.info.ElementInfo;
/**
* The Class HtmlMapping.
*/
public class HtmlMapping implements HtmlProperties {
/**
* Mapping tag.
*
* @return the map
*/
public static Map<String, ElementInfo> mappingTag() {
Map<String, ElementInfo> elementInfos = new HashMap<String, ElementInfo>();
ElementInfo optionalEndElement = new ElementInfo(true, ElementInfo.END_ELEMENT_OPTIONAL);
ElementInfo forbiddenEndElement = new ElementInfo(false, ElementInfo.END_ELEMENT_FORBIDDEN);
ElementInfo onlyTextDE = new ElementInfo(false, ElementInfo.END_ELEMENT_REQUIRED, true);
ElementInfo onlyText = new ElementInfo(false, ElementInfo.END_ELEMENT_REQUIRED, false);
Set<String> tableCellStopElements = new HashSet<String>();
tableCellStopElements.add(TH);
tableCellStopElements.add(TD);
tableCellStopElements.add(TR);
ElementInfo tableCellElement = new ElementInfo(true, ElementInfo.END_ELEMENT_OPTIONAL, tableCellStopElements);
Set<String> headStopElements = new HashSet<String>();
headStopElements.add(BODY);
headStopElements.add(DIV);
headStopElements.add(SPAN);
headStopElements.add(TABLE);
ElementInfo headElement = new ElementInfo(true, ElementInfo.END_ELEMENT_OPTIONAL, headStopElements);
Set<String> optionStopElements = new HashSet<String>();
optionStopElements.add(OPTION);
optionStopElements.add(SELECT);
ElementInfo optionElement = new ElementInfo(true, ElementInfo.END_ELEMENT_OPTIONAL, optionStopElements);
Set<String> paragraphStopElements = new HashSet<String>();
paragraphStopElements.add(P);
paragraphStopElements.add(DIV);
paragraphStopElements.add(TABLE);
paragraphStopElements.add(PRE);
paragraphStopElements.add(UL);
paragraphStopElements.add(OL);
paragraphStopElements.add(NAV);
paragraphStopElements.add(SECTION);
paragraphStopElements.add(HEADER);
paragraphStopElements.add(FOOTER);
paragraphStopElements.add(ARTICLE);
paragraphStopElements.add(CANVAS);
paragraphStopElements.add(SVG);
ElementInfo paragraphElement = new ElementInfo(true, ElementInfo.END_ELEMENT_OPTIONAL, paragraphStopElements);
elementInfos.put(NOSCRIPT, new ElementInfo(true, ElementInfo.END_ELEMENT_REQUIRED, null, true));
elementInfos.put(SCRIPT, onlyText);
elementInfos.put(STYLE, onlyText);
elementInfos.put(TEXTAREA, onlyTextDE);
elementInfos.put(IMG, forbiddenEndElement);
elementInfos.put(META, forbiddenEndElement);
elementInfos.put(LINK, forbiddenEndElement);
elementInfos.put(BASE, forbiddenEndElement);
elementInfos.put(INPUT, forbiddenEndElement);
elementInfos.put(BUTTON, forbiddenEndElement);
elementInfos.put(FRAME, forbiddenEndElement);
elementInfos.put(BR, forbiddenEndElement);
elementInfos.put(HR, forbiddenEndElement);
elementInfos.put(EMBED, forbiddenEndElement);
elementInfos.put(SPACER, forbiddenEndElement);
elementInfos.put(P, paragraphElement);
elementInfos.put(LI, optionalEndElement);
elementInfos.put(DT, optionalEndElement);
elementInfos.put(DD, optionalEndElement);
elementInfos.put(CAPTION, optionalEndElement);
elementInfos.put(THEAD, optionalEndElement);
elementInfos.put(TBODY, optionalEndElement);
elementInfos.put(TFOOT, optionalEndElement);
elementInfos.put(TR, optionalEndElement);
elementInfos.put(TH, tableCellElement);
elementInfos.put(TD, tableCellElement);
elementInfos.put(HEAD, headElement);
elementInfos.put(OPTION, optionElement);
elementInfos.put(A, optionalEndElement);
elementInfos.put(ANCHOR, optionalEndElement);
return elementInfos;
}
/**
* Mapping html.
*
* @return the map
*/
public static Map<String, Object> mappingHtml() {
Map<String, Object> builders = new HashMap<String, Object>();
DivBulder div = new DivBulder();
builders.put(DIV, div);
builders.put(DL, div);
builders.put(HEADER, div);
builders.put(FOOTER, div);
builders.put(ARTICLE, div);
builders.put(EMBED, div);
PBuilder p = new PBuilder();
builders.put(P, p);
builders.put(SECTION, p);
BlockquoteBuilder bq = new BlockquoteBuilder();
builders.put(BLOCKQUOTE, bq);
builders.put(DD, bq);
AnchorBuilder a = new AnchorBuilder();
builders.put(A, a);
builders.put(ANCHOR, a);
CodeBuilder code = new CodeBuilder();
builders.put(CODE, code);
builders.put(KBD, code);
builders.put(SAMP, code);
builders.put(SOURCE, code);
EmBuilder em = new EmBuilder();
builders.put(I, em);
builders.put(EM, em);
builders.put(CITE, em);
builders.put(DFN, em);
builders.put(VAR, em);
HeadingBuilder heading = new HeadingBuilder();
builders.put(H1, heading);
builders.put(H2, heading);
builders.put(H3, heading);
builders.put(H4, heading);
builders.put(H5, heading);
builders.put(H6, heading);
StrikeBuilder strike = new StrikeBuilder();
builders.put(STRIKE, strike);
builders.put(S, strike);
builders.put(DEL, strike);
builders.put(HTML, new HtmlBuilder());
builders.put(HEAD, new HeadBuilder());
builders.put(TITLE, new TitleBuilder());
builders.put(BASE, new BaseBuilder());
builders.put(BODY, new BodyBuilder());
builders.put(CENTER, new CenterBuilder());
builders.put(CAPTION, new CaptionBuilder());
builders.put(PRE, new PreBuilder());
builders.put(SPAN, new SpanBuilder());
builders.put(SCRIPT, new ScriptBuilder());
builders.put(IMG, new ImgBuilder());
builders.put(STYLE, new StyleBuilder());
builders.put(LINK, new LinkBuilder());
builders.put(TABLE, new TableBuilder());
builders.put(TD, new TdBuilder());
builders.put(TH, new ThBuilder());
builders.put(TR, new TrBuilder());
builders.put(THEAD, new SectionBuilder());
builders.put(TBODY, new SectionBuilder());
builders.put(TFOOT, new SectionBuilder());
builders.put(FORM, new FormBuilder());
builders.put(INPUT, new InputBuilder());
builders.put(BUTTON, new ButtonBuilder());
builders.put(TEXTAREA, new TextareaBuilder());
builders.put(SELECT, new SelectBuilder());
builders.put(OPTION, new OptionBuilder());
builders.put(FRAMESET, new FramesetBuilder());
builders.put(FRAME, new FrameBuilder());
builders.put(IFRAME, new IFrameBuilder());
builders.put(UL, new UlBuilder());
builders.put(OL, new OlBuilder());
builders.put(LI, new LiBuilder());
builders.put(HR, new HrBuilder());
builders.put(BR, new BrBuilder());
builders.put(OBJECT, new HtmlObjectBuilder());
builders.put(APPLET, new AppletBuilder());
builders.put(FONT, new FontBuilder());
builders.put(BASEFONT, new BaseFontBuilder());
builders.put(TT, new TtBuilder());
builders.put(SMALL, new SmallBuilder());
builders.put(BIG, new BigBuilder());
builders.put(B, new StrongBuilder());
builders.put(STRONG, new StrongBuilder());
builders.put(NAV, new NavBuilder());
builders.put(U, new UnderlineBuilder());
builders.put(INS, new UnderlineBuilder());
builders.put(SUP, new SupBuilder());
builders.put(SUB, new SubBuilder());
builders.put(CANVAS, new CanvasBuilder());
builders.put(AUDIO, new AudioBuilder());
builders.put(COMMAND, new CommandBuilder());
builders.put(DETAILS, new DetailsBuilder());
builders.put(KEYGEN, new KeygenBuilder());
builders.put(MARQUEE, new MarqueeBuilder());
builders.put(METER, new MeterBuilder());
builders.put(PROGRESS, new ProgressBuilder());
builders.put(OUTPUT, new OutputBuilder());
builders.put(TIME, new TimeBuilder());
builders.put(VIDEO, new VideoBuilder());
builders.put(LABEL, new LabelBuilder());
builders.put(SVG, new SVGBuilder());
builders.put(CIRCLE, new SVGCircleBuilder());
builders.put(RECT, new SVGRectBuilder());
builders.put(ELLIPSE, new SVGEllipseBuilder());
builders.put(LINE, new SVGLineBuilder());
builders.put(POLYGON, new SVGPolygonBuilder());
builders.put(POLYLINE, new SVGPolylineBuilder());
builders.put(PATH, new SVGPathBuilder());
builders.put(G, new SVGGBuilder());
builders.put(DEFS, new SVGDefsBuilder());
builders.put(USE, new SVGUseBuilder());
builders.put(SYMBOL, new SVGSymbolBuilder());
builders.put(TEXT, new SVGTextBuilder());
return builders;
}
}