├── .editorconfig ├── .gitattributes ├── .gitignore ├── Codecs ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── codec │ │ ├── image │ │ ├── ImageCodec.java │ │ ├── ImageData.java │ │ ├── ImageFrame.java │ │ ├── ImageProgressiveCallback.java │ │ └── PossibleImage.java │ │ ├── jpeg │ │ ├── JPEGCodec.java │ │ ├── JPEGReader.java │ │ ├── JPEGResult.java │ │ ├── JPEGState.java │ │ ├── chunk │ │ │ ├── dht │ │ │ │ ├── DHTChunkInfo.java │ │ │ │ └── DHTChunkParser.java │ │ │ ├── dqt │ │ │ │ ├── DQTChunkInfo.java │ │ │ │ └── DQTChunkParser.java │ │ │ ├── jfif │ │ │ │ ├── JFIFChunkInfo.java │ │ │ │ └── JFIFChunkParser.java │ │ │ ├── sof │ │ │ │ ├── SOFChunkInfo.java │ │ │ │ └── SOFChunkParser.java │ │ │ └── sos │ │ │ │ ├── SOSChunkInfo.java │ │ │ │ └── SOSChunkParser.java │ │ ├── exception │ │ │ ├── InvalidJPEGSignatureException.java │ │ │ └── MalformedJPEGException.java │ │ ├── scan │ │ │ ├── EntropyDecoder.java │ │ │ ├── ScanComponent.java │ │ │ ├── ScanComponentResult.java │ │ │ ├── ScanParameters.java │ │ │ ├── ScanParser.java │ │ │ ├── huffman │ │ │ │ └── HuffmanEntropyDecoder.java │ │ │ └── primitivecollection │ │ │ │ ├── BitStream.java │ │ │ │ ├── ByteArray.java │ │ │ │ └── IntArray.java │ │ ├── stage │ │ │ ├── DCTDecoder.java │ │ │ ├── ScanDecoder.java │ │ │ └── ZigZagDecoder.java │ │ └── util │ │ │ └── JPEGUtil.java │ │ └── png │ │ ├── PNGChunkInfo.java │ │ ├── PNGChunkInfoReader.java │ │ ├── PNGCodec.java │ │ ├── PNGReader.java │ │ ├── PNGResult.java │ │ ├── chunk │ │ ├── idat │ │ │ ├── IDATAdam7Deinterlacer.java │ │ │ ├── IDATChunkInfo.java │ │ │ ├── IDATChunkParser.java │ │ │ ├── IDATColorDecoder.java │ │ │ ├── IDATContext.java │ │ │ ├── IDATImageRasterDecoder.java │ │ │ ├── IDATUnfilter.java │ │ │ └── IDATUtil.java │ │ ├── ihdr │ │ │ ├── IHDRChunkInfo.java │ │ │ └── IHDRChunkParser.java │ │ └── plte │ │ │ ├── PLTEChunkInfo.java │ │ │ └── PLTEChunkParser.java │ │ └── exception │ │ ├── InvalidPNGSignatureException.java │ │ ├── MalformedPNGException.java │ │ └── UnsupportedPNGException.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── codec │ ├── jpeg │ └── JPEGReaderTest.java │ └── png │ ├── IDATAdam7DeinterlacerTest.java │ └── PNGReaderTest.java ├── EcmaSpiral ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── ecmaspiral │ │ └── parser │ │ ├── exception │ │ └── ParseException.java │ │ ├── tokenizer │ │ ├── Tokenizer.java │ │ └── imp │ │ │ ├── CommentTokenizer.java │ │ │ ├── IdentifierTokenizer.java │ │ │ ├── NewlineTokenizer.java │ │ │ ├── PunctuatorTokenizer.java │ │ │ ├── StringTokenizer.java │ │ │ ├── TokenizerImp.java │ │ │ ├── TokenizerStream.java │ │ │ └── WhitespaceTokenizer.java │ │ └── tokens │ │ ├── CommentToken.java │ │ ├── IdentifierToken.java │ │ ├── NewlineToken.java │ │ ├── PunctuatorToken.java │ │ ├── StringToken.java │ │ ├── Token.java │ │ └── WhitespaceToken.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── ecmaspiral │ └── parser │ └── tokenizer │ └── EcmaTokenizerTest.java ├── GetOpts ├── build.gradle └── src │ ├── main │ └── java │ │ └── everyos │ │ └── api │ │ └── getopts │ │ ├── Argument.java │ │ ├── ArgumentParser.java │ │ ├── ArgumentParserBuilder.java │ │ ├── ArgumentReader.java │ │ ├── ErrorHandler.java │ │ ├── Flag.java │ │ ├── FlagArgumentPair.java │ │ ├── FlagArgumentPairCollection.java │ │ ├── FlagBuilder.java │ │ ├── ParserFailedException.java │ │ └── imp │ │ ├── ArgumentImp.java │ │ ├── ArgumentParserBuilderImp.java │ │ ├── ArgumentParserImp.java │ │ ├── FlagArgumentPairCollectionImp.java │ │ ├── FlagArgumentPairImp.java │ │ └── FlagBuilderImp.java │ └── test │ └── java │ └── everyos │ └── api │ └── getopts │ ├── ArgumentParserTest.java │ └── TestUtils.java ├── LICENSE.txt ├── README.md ├── Spec ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── spec │ │ ├── css │ │ ├── QualifiedName.java │ │ ├── componentvalue │ │ │ ├── ComponentValue.java │ │ │ ├── FunctionValue.java │ │ │ └── SimpleBlock.java │ │ ├── parser │ │ │ ├── CSSParser.java │ │ │ ├── ParseFormatException.java │ │ │ ├── TokenLike.java │ │ │ ├── TokenStream.java │ │ │ ├── imp │ │ │ │ ├── CSSParserImp.java │ │ │ │ └── TokenStreamImp.java │ │ │ ├── property │ │ │ │ ├── PropertyValueParseResult.java │ │ │ │ ├── PropertyValueParser.java │ │ │ │ ├── PropertyValueParserUtil.java │ │ │ │ ├── background │ │ │ │ │ ├── BackgroundAttachmentValueParser.java │ │ │ │ │ ├── BackgroundImageValueParser.java │ │ │ │ │ ├── BackgroundPositionValueParser.java │ │ │ │ │ ├── BackgroundRepeatValueParser.java │ │ │ │ │ ├── BackgroundSizeValueParser.java │ │ │ │ │ └── BackgroundValueParser.java │ │ │ │ ├── border │ │ │ │ │ ├── color │ │ │ │ │ │ ├── BorderColorLonghandValueParser.java │ │ │ │ │ │ └── BorderColorShorthandValueParser.java │ │ │ │ │ ├── composite │ │ │ │ │ │ └── BorderCompositeValueParser.java │ │ │ │ │ ├── style │ │ │ │ │ │ └── BorderStyleLonghandValueParser.java │ │ │ │ │ └── width │ │ │ │ │ │ ├── BorderWidthLonghandValueParser.java │ │ │ │ │ │ ├── BorderWidthShorthandValueParser.java │ │ │ │ │ │ └── LineWidthValueParser.java │ │ │ │ ├── boxsizing │ │ │ │ │ └── BoxSizingValueParser.java │ │ │ │ ├── color │ │ │ │ │ ├── AbsoluteColorBaseValueParser.java │ │ │ │ │ ├── AbsoluteColorFunctionValueParser.java │ │ │ │ │ ├── ColorValueParser.java │ │ │ │ │ ├── HexColorValueParser.java │ │ │ │ │ ├── NamedColorValueParser.java │ │ │ │ │ ├── RGBColorValueImp.java │ │ │ │ │ ├── RGBColorValueParser.java │ │ │ │ │ └── TransparentColorValueParser.java │ │ │ │ ├── display │ │ │ │ │ ├── BoxDisplayValueParser.java │ │ │ │ │ ├── DisplayPropertyValueParser.java │ │ │ │ │ └── InnerOuterDisplayValueParser.java │ │ │ │ ├── flex │ │ │ │ │ ├── FlexBasisValueParser.java │ │ │ │ │ ├── FlexDirectionValueParser.java │ │ │ │ │ ├── FlexFactorValueParser.java │ │ │ │ │ ├── FlexFlowValueParser.java │ │ │ │ │ ├── FlexJustifyContentValueParser.java │ │ │ │ │ ├── FlexShorthandValueParser.java │ │ │ │ │ └── FlexWrapValueParser.java │ │ │ │ ├── floatbox │ │ │ │ │ ├── ClearValueParser.java │ │ │ │ │ └── FloatValueParser.java │ │ │ │ ├── flow │ │ │ │ │ └── LineHeightValueParser.java │ │ │ │ ├── imp │ │ │ │ │ └── PropertyValueParseResultImp.java │ │ │ │ ├── margin │ │ │ │ │ ├── MarginLonghandValueParser.java │ │ │ │ │ └── MarginShorthandValueParser.java │ │ │ │ ├── padding │ │ │ │ │ ├── PaddingLonghandValueParser.java │ │ │ │ │ └── PaddingShorthandValueParser.java │ │ │ │ ├── position │ │ │ │ │ ├── PositionOffsetValueParser.java │ │ │ │ │ └── PositionTypeValueParser.java │ │ │ │ ├── shared │ │ │ │ │ ├── EnumParser.java │ │ │ │ │ ├── ImageValueParser.java │ │ │ │ │ ├── ListParser.java │ │ │ │ │ ├── URLValueParser.java │ │ │ │ │ ├── anyorder │ │ │ │ │ │ └── AnyOrderParser.java │ │ │ │ │ ├── length │ │ │ │ │ │ └── LengthValueParser.java │ │ │ │ │ ├── lengthpercentage │ │ │ │ │ │ └── LengthPercentageValueParser.java │ │ │ │ │ ├── math │ │ │ │ │ │ └── MathValueParser.java │ │ │ │ │ └── percentage │ │ │ │ │ │ └── PercentageValueParser.java │ │ │ │ ├── sizing │ │ │ │ │ └── WidthHeightValueParser.java │ │ │ │ └── text │ │ │ │ │ ├── FontFamilyValueParser.java │ │ │ │ │ ├── FontShorthandValueParser.java │ │ │ │ │ ├── FontSizeValueParser.java │ │ │ │ │ ├── FontWeightValueParser.java │ │ │ │ │ ├── LetterSpacingValueParser.java │ │ │ │ │ ├── LineBreakValueParser.java │ │ │ │ │ └── TextAlignValueParser.java │ │ │ ├── selectors │ │ │ │ ├── ComplexSelectorParser.java │ │ │ │ ├── SelectorParser.java │ │ │ │ ├── SelectorSpecificityCalculator.java │ │ │ │ ├── combinator │ │ │ │ │ └── CombinatorParser.java │ │ │ │ ├── misc │ │ │ │ │ └── QualifiedNameParser.java │ │ │ │ └── selector │ │ │ │ │ ├── AttributeSelectorParser.java │ │ │ │ │ ├── ClassSelectorParser.java │ │ │ │ │ ├── IDSelectorParser.java │ │ │ │ │ ├── PsuedoSelectorParser.java │ │ │ │ │ └── TypeSelectorParser.java │ │ │ ├── tokenizer │ │ │ │ ├── CSSTokenizer.java │ │ │ │ └── imp │ │ │ │ │ ├── IdentTokenizer.java │ │ │ │ │ ├── NumberTokenizer.java │ │ │ │ │ ├── ReaderHandle.java │ │ │ │ │ ├── SharedTokenizer.java │ │ │ │ │ ├── StringTokenizer.java │ │ │ │ │ ├── TokenizerImp.java │ │ │ │ │ └── URLTokenizer.java │ │ │ ├── tokens │ │ │ │ ├── AtKeywordToken.java │ │ │ │ ├── BadStringToken.java │ │ │ │ ├── BadURLToken.java │ │ │ │ ├── CDCToken.java │ │ │ │ ├── CDOToken.java │ │ │ │ ├── ColonToken.java │ │ │ │ ├── CommaToken.java │ │ │ │ ├── DelimToken.java │ │ │ │ ├── DimensionToken.java │ │ │ │ ├── EOFToken.java │ │ │ │ ├── FunctionToken.java │ │ │ │ ├── HashToken.java │ │ │ │ ├── IdentToken.java │ │ │ │ ├── LCBracketToken.java │ │ │ │ ├── LParenToken.java │ │ │ │ ├── LSBracketToken.java │ │ │ │ ├── NumberToken.java │ │ │ │ ├── NumberTypeFlag.java │ │ │ │ ├── PercentageToken.java │ │ │ │ ├── RCBracketToken.java │ │ │ │ ├── RParenToken.java │ │ │ │ ├── RSBracketToken.java │ │ │ │ ├── SemicolonToken.java │ │ │ │ ├── StringToken.java │ │ │ │ ├── Token.java │ │ │ │ ├── URLToken.java │ │ │ │ └── WhitespaceToken.java │ │ │ └── util │ │ │ │ └── TokenUtils.java │ │ ├── property │ │ │ ├── CSSValue.java │ │ │ ├── Property.java │ │ │ ├── background │ │ │ │ ├── BackgroundAttachmentLayersValue.java │ │ │ │ ├── BackgroundAttachmentValue.java │ │ │ │ ├── BackgroundImageLayersValue.java │ │ │ │ ├── BackgroundPositionLayersValue.java │ │ │ │ ├── BackgroundPositionValue.java │ │ │ │ ├── BackgroundRepeatLayersValue.java │ │ │ │ ├── BackgroundRepeatValue.java │ │ │ │ ├── BackgroundSizeLayersValue.java │ │ │ │ ├── BackgroundSizeValue.java │ │ │ │ └── BackgroundValue.java │ │ │ ├── border │ │ │ │ ├── BorderCompositeValue.java │ │ │ │ ├── BorderStyleValue.java │ │ │ │ ├── MultiBorderColorValue.java │ │ │ │ └── MultiBorderWidthValue.java │ │ │ ├── boxsizing │ │ │ │ └── BoxSizingValue.java │ │ │ ├── color │ │ │ │ └── ColorValue.java │ │ │ ├── display │ │ │ │ ├── DisplayValue.java │ │ │ │ ├── InnerDisplayType.java │ │ │ │ └── OuterDisplayType.java │ │ │ ├── flexbox │ │ │ │ ├── FlexBasisValue.java │ │ │ │ ├── FlexDirectionValue.java │ │ │ │ ├── FlexFactorValue.java │ │ │ │ ├── FlexFlowValue.java │ │ │ │ ├── FlexJustifyContentValue.java │ │ │ │ ├── FlexValue.java │ │ │ │ └── FlexWrapValue.java │ │ │ ├── floatbox │ │ │ │ ├── ClearValue.java │ │ │ │ └── FloatValue.java │ │ │ ├── font │ │ │ │ └── FontValue.java │ │ │ ├── fontfamily │ │ │ │ ├── FontFamilyValue.java │ │ │ │ └── NamedFontFamilyEntry.java │ │ │ ├── fontweight │ │ │ │ └── FontWeightValue.java │ │ │ ├── margin │ │ │ │ └── MarginValue.java │ │ │ ├── padding │ │ │ │ └── PaddingValue.java │ │ │ ├── position │ │ │ │ └── PositionTypeValue.java │ │ │ ├── shared │ │ │ │ ├── NoneValue.java │ │ │ │ ├── URLValue.java │ │ │ │ ├── basic │ │ │ │ │ ├── AutoValue.java │ │ │ │ │ └── NumberValue.java │ │ │ │ ├── length │ │ │ │ │ ├── AbsoluteLengthValue.java │ │ │ │ │ ├── LengthValue.java │ │ │ │ │ └── RelativeLengthValue.java │ │ │ │ ├── math │ │ │ │ │ ├── MathValue.java │ │ │ │ │ ├── MaxMathValue.java │ │ │ │ │ ├── MinMathValue.java │ │ │ │ │ ├── NumberMathValue.java │ │ │ │ │ └── OperandMathValue.java │ │ │ │ └── percentage │ │ │ │ │ └── PercentageValue.java │ │ │ └── text │ │ │ │ ├── LineBreakValue.java │ │ │ │ └── TextAlignValue.java │ │ ├── rule │ │ │ ├── AtRule.java │ │ │ ├── CSSRule.java │ │ │ ├── CSSRuleList.java │ │ │ ├── Declaration.java │ │ │ ├── QualifiedRule.java │ │ │ └── imp │ │ │ │ └── CSSRuleListImp.java │ │ ├── selectors │ │ │ ├── ComplexSelector.java │ │ │ ├── ComplexSelectorPart.java │ │ │ ├── SelectorOrderingTag.java │ │ │ ├── SelectorSpecificity.java │ │ │ ├── combinator │ │ │ │ ├── ChildCombinator.java │ │ │ │ ├── Combinator.java │ │ │ │ ├── DescendantCombinator.java │ │ │ │ ├── NextSiblingCombinator.java │ │ │ │ └── SubsequentSiblingCombinator.java │ │ │ └── selector │ │ │ │ ├── AttributeSelector.java │ │ │ │ ├── IDSelector.java │ │ │ │ ├── SimpleSelector.java │ │ │ │ ├── TypeSelector.java │ │ │ │ └── psuedo │ │ │ │ ├── PsuedoSelector.java │ │ │ │ └── RootSelector.java │ │ ├── stylesheet │ │ │ ├── CSSStyleSheet.java │ │ │ ├── StyleSheet.java │ │ │ ├── StyleSheetList.java │ │ │ └── imp │ │ │ │ └── StyleSheetListImp.java │ │ └── util │ │ │ └── CSSRulesUtils.java │ │ ├── dom │ │ ├── exception │ │ │ ├── DOMException.java │ │ │ └── HierarchyRequestError.java │ │ └── node │ │ │ ├── CharacterData.java │ │ │ ├── Comment.java │ │ │ ├── Document.java │ │ │ ├── DocumentOrShadowRoot.java │ │ │ ├── DocumentType.java │ │ │ ├── Element.java │ │ │ ├── Node.java │ │ │ ├── Text.java │ │ │ ├── imp │ │ │ ├── CharacterDataImp.java │ │ │ ├── CommentImp.java │ │ │ ├── DocumentImp.java │ │ │ ├── DocumentTypeImp.java │ │ │ ├── ElementImp.java │ │ │ ├── NodeImp.java │ │ │ ├── TextImp.java │ │ │ └── util │ │ │ │ ├── DOMTextUtil.java │ │ │ │ ├── InsertUtil.java │ │ │ │ └── StringifyUtil.java │ │ │ └── support │ │ │ ├── NodeList.java │ │ │ └── imp │ │ │ └── NodeListImp.java │ │ ├── encoding │ │ └── Decoder.java │ │ ├── fetch │ │ ├── FetchBody.java │ │ ├── FetchConsumeBodyAction.java │ │ ├── FetchDecoder.java │ │ ├── FetchDecoderRegistry.java │ │ ├── FetchEngine.java │ │ ├── FetchHeaderList.java │ │ ├── FetchHeaderLogic.java │ │ ├── FetchParameters.java │ │ ├── FetchParams.java │ │ ├── FetchProtocolRegistry.java │ │ ├── FetchRequest.java │ │ ├── FetchResponse.java │ │ ├── builder │ │ │ ├── FetchParametersBuilder.java │ │ │ ├── FetchRequestBuilder.java │ │ │ ├── MutableFetchResponse.java │ │ │ └── imp │ │ │ │ ├── FetchParametersBuilderImp.java │ │ │ │ └── FetchRequestBuilderImp.java │ │ ├── connection │ │ │ ├── FetchConnection.java │ │ │ ├── FetchConnectionInfo.java │ │ │ ├── FetchConnectionPool.java │ │ │ ├── FetchHTTPConnection.java │ │ │ ├── FetchNetworkPartitionKey.java │ │ │ └── imp │ │ │ │ ├── HTTPFetchConnectionImp.java │ │ │ │ ├── HTTPFetchConnectionPool.java │ │ │ │ └── HTTPFetchHeaderListImp.java │ │ ├── decoder │ │ │ ├── DeflateDecoder.java │ │ │ └── GzipDecoder.java │ │ ├── imp │ │ │ ├── DataURLProcessor.java │ │ │ ├── EmptyFetchHeaderListImp.java │ │ │ ├── FetchBodyImp.java │ │ │ ├── FetchConnectionMethods.java │ │ │ ├── FetchDecoderRegistryImp.java │ │ │ ├── FetchEngineImp.java │ │ │ ├── FetchNetworkError.java │ │ │ ├── FetchResponseImp.java │ │ │ └── MapFetchHeaderList.java │ │ └── taskdestination │ │ │ └── TaskDestination.java │ │ ├── html │ │ ├── binding │ │ │ └── BindingHTMLTreeBuilder.java │ │ ├── logic │ │ │ └── ElementCreationLogic.java │ │ ├── node │ │ │ ├── HTMLBodyElement.java │ │ │ ├── HTMLDocument.java │ │ │ ├── HTMLDocumentOrShadowRoot.java │ │ │ ├── HTMLElement.java │ │ │ ├── HTMLHeadElement.java │ │ │ ├── HTMLHtmlElement.java │ │ │ ├── HTMLTitleElement.java │ │ │ └── imp │ │ │ │ ├── HTMLBodyElementImp.java │ │ │ │ ├── HTMLDocumentImp.java │ │ │ │ ├── HTMLElementImp.java │ │ │ │ ├── HTMLHeadElementImp.java │ │ │ │ ├── HTMLHtmlElementImp.java │ │ │ │ └── HTMLTitleElementImp.java │ │ └── parse │ │ │ ├── CharacterReferenceLookup.java │ │ │ ├── ElementCreationOptions.java │ │ │ ├── HTMLParser.java │ │ │ ├── HTMLTreeBuilder.java │ │ │ ├── ParseError.java │ │ │ └── ParserSettings.java │ │ ├── htmlbrowsers │ │ ├── Origin.java │ │ ├── ParallelContext.java │ │ ├── TupleOrigin.java │ │ └── tasks │ │ │ ├── EventLoop.java │ │ │ └── TaskQueue.java │ │ ├── http │ │ ├── HTTPFailResponse.java │ │ ├── HTTPHeaders.java │ │ ├── HTTPRedirectHandler.java │ │ ├── HTTPRequest.java │ │ ├── HTTPService.java │ │ ├── HTTPStatus.java │ │ ├── HTTPTransferEncoding.java │ │ ├── HTTPTransport.java │ │ ├── HTTPTransportFactory.java │ │ ├── HTTPVersion.java │ │ ├── HTTPVersionInstance.java │ │ ├── encoding │ │ │ ├── chunked │ │ │ │ ├── ChunkedEncoding.java │ │ │ │ └── ChunkedInputStream.java │ │ │ └── contentlength │ │ │ │ └── ContentLengthInputStream.java │ │ ├── imp │ │ │ ├── HTTPContext.java │ │ │ ├── HTTPHeadersImp.java │ │ │ └── HTTPServiceImp.java │ │ ├── response │ │ │ ├── HTTPRedirectResponse.java │ │ │ ├── HTTPResponse.java │ │ │ └── HTTPSuccessResponse.java │ │ ├── util │ │ │ └── ParseUtil.java │ │ └── version │ │ │ └── http11 │ │ │ ├── HTTP11Constants.java │ │ │ ├── HTTP11GetWriter.java │ │ │ ├── HTTP11ResponseData.java │ │ │ ├── HTTP11ResponseFieldLinesParser.java │ │ │ ├── HTTP11ResponseHeaderParser.java │ │ │ ├── HTTP11ResponseStatusLineParser.java │ │ │ └── HTTP11Version.java │ │ ├── infra │ │ ├── Namespace.java │ │ └── util │ │ │ ├── ASCIIUtil.java │ │ │ └── Base64Util.java │ │ ├── stream │ │ ├── ReadRequest.java │ │ ├── ReadableStream.java │ │ ├── ReadableStreamController.java │ │ ├── ReadableStreamDefaultController.java │ │ ├── ReadableStreamDefaultReader.java │ │ ├── ReadableStreamReader.java │ │ └── imp │ │ │ ├── ReadableStreamDefaultReaderImp.java │ │ │ └── ReadableStreamImp.java │ │ └── url │ │ ├── InvalidURLException.java │ │ ├── URL.java │ │ └── imp │ │ └── URLImp.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── spec │ ├── css │ └── parser │ │ ├── CSSParserTest.java │ │ ├── property │ │ ├── background │ │ │ ├── BackgroundPositionValueParserTest.java │ │ │ ├── BackgroundRepeatValueParserTest.java │ │ │ └── BackgroundSizeValueParserTest.java │ │ ├── border │ │ │ ├── BorderCompositeValueParserTest.java │ │ │ └── BorderStyleValueParserTest.java │ │ ├── color │ │ │ ├── HexColorValueParserTest.java │ │ │ ├── NamedColorValueParserTest.java │ │ │ └── RGBColorValueParserTest.java │ │ ├── flex │ │ │ └── FlexFlowValueParserTest.java │ │ ├── floatbox │ │ │ ├── ClearValueParserTest.java │ │ │ └── FloatValueParserTest.java │ │ ├── shared │ │ │ ├── URLValueParserTest.java │ │ │ ├── length │ │ │ │ └── LengthValueParserTest.java │ │ │ ├── math │ │ │ │ └── MathValueParserTest.java │ │ │ └── percentage │ │ │ │ └── PercentageValueParserTest.java │ │ └── text │ │ │ ├── FontFamilyValueParserTest.java │ │ │ ├── FontShorthandValueParserTest.java │ │ │ └── FontWeightValueParserTest.java │ │ ├── selectors │ │ ├── ComplexSelectorParserTest.java │ │ ├── combinator │ │ │ └── CombinatorParserTest.java │ │ └── selector │ │ │ ├── AttributeSelectorParserTest.java │ │ │ ├── ClassSelectorParserTest.java │ │ │ ├── IDSelectorParserTest.java │ │ │ ├── PsuedoSelectorParserTest.java │ │ │ └── TypeSelectorParserTest.java │ │ └── tokenizer │ │ └── CSSTokenizerTest.java │ ├── fetch │ ├── DataURLProcessorTest.java │ ├── FetchEngineTest.java │ └── test │ │ └── DummyTaskDestination.java │ └── infra │ └── Base64UtilTest.java ├── SpiderHTML ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── spiderhtml │ │ ├── SpiderHTMLParserImp.java │ │ ├── context │ │ ├── InsertionContext.java │ │ ├── ParsingContext.java │ │ ├── ParsingInitializer.java │ │ ├── ReaderHandle.java │ │ └── SharedContext.java │ │ ├── insertion │ │ ├── AfterAfterBodyInsertionMode.java │ │ ├── AfterBodyInsertionMode.java │ │ ├── AfterHeadInsertionMode.java │ │ ├── BeforeHTMLInsertionMode.java │ │ ├── BeforeHeadInsertionMode.java │ │ ├── InBodyInsertionMode.java │ │ ├── InCellInsertionMode.java │ │ ├── InHeadInsertionMode.java │ │ ├── InRowInsertionMode.java │ │ ├── InTableBodyInsertionMode.java │ │ ├── InTableInsertionMode.java │ │ ├── InitialInsertionMode.java │ │ ├── InsertionMode.java │ │ └── TextInsertionMode.java │ │ ├── misc │ │ ├── ElementStack.java │ │ ├── ElementUtil.java │ │ ├── EmitterLogic.java │ │ ├── InsertionLocation.java │ │ ├── InsertionLogic.java │ │ ├── InsertionModeLogic.java │ │ ├── StackLogic.java │ │ └── TokenizeLogic.java │ │ ├── performance │ │ ├── StringCache.java │ │ └── imp │ │ │ └── StringCacheImp.java │ │ ├── token │ │ ├── CharacterToken.java │ │ ├── CommentToken.java │ │ ├── DoctypeToken.java │ │ ├── EOFToken.java │ │ ├── EndTagToken.java │ │ ├── StartTagToken.java │ │ ├── TagToken.java │ │ └── Token.java │ │ └── tokenize │ │ ├── AfterAttributeNameState.java │ │ ├── AfterAttributeValueQuotedState.java │ │ ├── AmbiguousAmpersandState.java │ │ ├── AttributeNameState.java │ │ ├── AttributeValueDoubleQuotedState.java │ │ ├── AttributeValueSingleQuotedState.java │ │ ├── AttributeValueUnquotedState.java │ │ ├── BeforeAttributeNameState.java │ │ ├── BeforeAttributeValueState.java │ │ ├── BeforeDoctypeNameState.java │ │ ├── BogusCommentState.java │ │ ├── CharacterReferenceState.java │ │ ├── CommentEndBangState.java │ │ ├── CommentEndDashState.java │ │ ├── CommentEndState.java │ │ ├── CommentLessThanSignBangDashDashState.java │ │ ├── CommentLessThanSignBangDashState.java │ │ ├── CommentLessThanSignBangState.java │ │ ├── CommentLessThanSignState.java │ │ ├── CommentStartDashState.java │ │ ├── CommentStartState.java │ │ ├── CommentState.java │ │ ├── DataState.java │ │ ├── DecimalCharacterReferenceStartState.java │ │ ├── DecimalCharacterReferenceState.java │ │ ├── DoctypeNameState.java │ │ ├── DoctypeState.java │ │ ├── EndTagOpenState.java │ │ ├── HexadecimalCharacterReferenceStartState.java │ │ ├── HexadecimalCharacterReferenceState.java │ │ ├── MarkupDeclarationOpenState.java │ │ ├── NamedCharacterReferenceState.java │ │ ├── NumericCharacterReferenceEndState.java │ │ ├── NumericCharacterReferenceState.java │ │ ├── RCDataEndTagNameState.java │ │ ├── RCDataEndTagOpenState.java │ │ ├── RCDataLessThanSignState.java │ │ ├── RCDataState.java │ │ ├── RawTextEndTagNameState.java │ │ ├── RawTextEndTagOpenState.java │ │ ├── RawTextLessThanSignState.java │ │ ├── RawTextState.java │ │ ├── ScriptDataDoubleEscapeEndState.java │ │ ├── ScriptDataDoubleEscapeStartState.java │ │ ├── ScriptDataDoubleEscapedDashDashState.java │ │ ├── ScriptDataDoubleEscapedDashState.java │ │ ├── ScriptDataDoubleEscapedLessThanSignState.java │ │ ├── ScriptDataDoubleEscapedState.java │ │ ├── ScriptDataEndTagNameState.java │ │ ├── ScriptDataEndTagOpenState.java │ │ ├── ScriptDataEscapeStartDashDashState.java │ │ ├── ScriptDataEscapeStartDashState.java │ │ ├── ScriptDataEscapeStartState.java │ │ ├── ScriptDataEscapedDashDashState.java │ │ ├── ScriptDataEscapedDashState.java │ │ ├── ScriptDataEscapedLessThanSignState.java │ │ ├── ScriptDataEscapedState.java │ │ ├── ScriptDataLessThanSignState.java │ │ ├── ScriptDataState.java │ │ ├── SelfClosingStartTagState.java │ │ ├── TagNameState.java │ │ ├── TagOpenState.java │ │ └── TokenizeState.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── spiderhtml │ ├── HTMLParserTest.java │ └── test │ └── TestParserSettings.java ├── Thready ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── thready │ │ ├── color │ │ ├── Colors.java │ │ ├── RawColor.java │ │ ├── colors │ │ │ └── RGBA8Color.java │ │ ├── format │ │ │ ├── ColorFormat.java │ │ │ └── RGBA8ColorFormat.java │ │ └── imp │ │ │ └── InternalColorImp.java │ │ ├── dimensions │ │ ├── AbsoluteDimensions.java │ │ ├── AbsolutePosition.java │ │ ├── AbsoluteSize.java │ │ ├── Rectangle.java │ │ ├── RelativeDimension.java │ │ ├── RelativePosition.java │ │ ├── RelativeSize.java │ │ └── util │ │ │ ├── AbsoluteDimensionsMath.java │ │ │ ├── AbsoluteSizeMath.java │ │ │ └── RectangleUtil.java │ │ ├── drawing │ │ ├── core │ │ │ ├── Canvas2D.java │ │ │ ├── ChildCanvasSettings.java │ │ │ ├── Paint2D.java │ │ │ ├── ResourceLoader.java │ │ │ ├── builder │ │ │ │ ├── Paint2DBuilder.java │ │ │ │ └── imp │ │ │ │ │ └── Paint2DImp.java │ │ │ ├── image │ │ │ │ ├── EncodedBytesImageSource.java │ │ │ │ ├── Image.java │ │ │ │ ├── ImageSource.java │ │ │ │ └── RasterBytesImageSource.java │ │ │ └── text │ │ │ │ ├── CommonFontWeights.java │ │ │ │ ├── Font2D.java │ │ │ │ ├── FontDecoration.java │ │ │ │ ├── FontMetrics.java │ │ │ │ ├── FontSettings.java │ │ │ │ └── source │ │ │ │ ├── FontSource.java │ │ │ │ └── NamedFontSource.java │ │ └── skija │ │ │ ├── SkijaFont2D.java │ │ │ └── imp │ │ │ ├── SkijaCanvas2DImp.java │ │ │ ├── SkijaFont2DImp.java │ │ │ ├── SkijaFontMetricsImp.java │ │ │ ├── SkijaImage.java │ │ │ └── SkijaResourceLoaderImp.java │ │ ├── gui │ │ ├── directive │ │ │ ├── basics │ │ │ │ ├── ChildrenDirective.java │ │ │ │ ├── pool │ │ │ │ │ ├── BasicDirectivePool.java │ │ │ │ │ ├── DirectiveDeriver.java │ │ │ │ │ └── NestingDirectivePool.java │ │ │ │ └── style │ │ │ │ │ ├── OneOneStyleGenerator.java │ │ │ │ │ └── OneOneStyleGeneratorRoot.java │ │ │ └── core │ │ │ │ ├── Directive.java │ │ │ │ ├── pool │ │ │ │ ├── ComposedDirectivePool.java │ │ │ │ ├── DirectivePool.java │ │ │ │ └── DirectivePoolListener.java │ │ │ │ └── style │ │ │ │ ├── StyleGenerator.java │ │ │ │ └── StyleGeneratorRoot.java │ │ ├── event │ │ │ └── Event.java │ │ ├── graphical │ │ │ ├── animation │ │ │ │ ├── AnimationContext.java │ │ │ │ └── InvalidationScheduler.java │ │ │ ├── base │ │ │ │ ├── GUIContent.java │ │ │ │ ├── InvalidationLevel.java │ │ │ │ ├── imp │ │ │ │ │ ├── AnimationContextImp.java │ │ │ │ │ ├── GUIContentImp.java │ │ │ │ │ ├── RootUI.java │ │ │ │ │ ├── message │ │ │ │ │ │ ├── ContentMessageHandler.java │ │ │ │ │ │ ├── FocusManagerImp.java │ │ │ │ │ │ └── MessageConverter.java │ │ │ │ │ └── stage │ │ │ │ │ │ ├── composite │ │ │ │ │ │ ├── CompositeLayerImp.java │ │ │ │ │ │ ├── ContentCompositor.java │ │ │ │ │ │ ├── GlobalCompositeContextImp.java │ │ │ │ │ │ └── LayerPaintEntry.java │ │ │ │ │ │ ├── paint │ │ │ │ │ │ ├── ContentPainter.java │ │ │ │ │ │ └── PaintContextImp.java │ │ │ │ │ │ └── render │ │ │ │ │ │ └── RenderCacheImp.java │ │ │ │ └── layout │ │ │ │ │ └── StaticTreeTracker.java │ │ │ ├── cache │ │ │ │ ├── MappingCache.java │ │ │ │ └── imp │ │ │ │ │ ├── CacheNode.java │ │ │ │ │ └── MappingCacheImp.java │ │ │ ├── directive │ │ │ │ ├── BackgroundColorDirective.java │ │ │ │ ├── ExternalMouseListenerDirective.java │ │ │ │ ├── FontDirective.java │ │ │ │ ├── ForegroundColorDirective.java │ │ │ │ ├── GraphicalDirective.java │ │ │ │ ├── MouseListenerDirective.java │ │ │ │ ├── PositionDirective.java │ │ │ │ └── SizeDirective.java │ │ │ ├── event │ │ │ │ └── MouseEvent.java │ │ │ ├── layout │ │ │ │ ├── base │ │ │ │ │ └── flowing │ │ │ │ │ │ ├── FlowingLayoutManager.java │ │ │ │ │ │ └── imp │ │ │ │ │ │ └── RenderCursorTracker.java │ │ │ │ └── core │ │ │ │ │ ├── ChildLayoutResult.java │ │ │ │ │ ├── LayoutRenderContext.java │ │ │ │ │ ├── LayoutResult.java │ │ │ │ │ ├── SolidLayoutManager.java │ │ │ │ │ └── TreeTracker.java │ │ │ ├── lookandfeel │ │ │ │ ├── base │ │ │ │ │ ├── GenericComponentUI.java │ │ │ │ │ └── stage │ │ │ │ │ │ ├── box │ │ │ │ │ │ ├── BasicAnonymousFluidBox.java │ │ │ │ │ │ ├── FluidBoxChildrenTracker.java │ │ │ │ │ │ ├── GenericBox.java │ │ │ │ │ │ └── SolidBoxChildrenTracker.java │ │ │ │ │ │ └── context │ │ │ │ │ │ └── GenericContext.java │ │ │ │ ├── core │ │ │ │ │ ├── ComponentUI.java │ │ │ │ │ ├── ComponentUIFactory.java │ │ │ │ │ ├── LookAndFeel.java │ │ │ │ │ ├── LookAndFeelBuilder.java │ │ │ │ │ ├── UIDisplay.java │ │ │ │ │ ├── UIPipeline.java │ │ │ │ │ ├── imp │ │ │ │ │ │ ├── LookAndFeelBuilderImp.java │ │ │ │ │ │ └── LookAndFeelImp.java │ │ │ │ │ └── stage │ │ │ │ │ │ ├── box │ │ │ │ │ │ ├── Box.java │ │ │ │ │ │ ├── BoxChildrenTracker.java │ │ │ │ │ │ ├── BoxContext.java │ │ │ │ │ │ ├── ChildrenBox.java │ │ │ │ │ │ ├── CloneBox.java │ │ │ │ │ │ ├── ReplacedInfo.java │ │ │ │ │ │ └── WrapperBox.java │ │ │ │ │ │ ├── composite │ │ │ │ │ │ ├── CompositeLayer.java │ │ │ │ │ │ ├── CompositeParameters.java │ │ │ │ │ │ ├── GlobalCompositeContext.java │ │ │ │ │ │ └── LocalCompositeContext.java │ │ │ │ │ │ ├── context │ │ │ │ │ │ ├── Context.java │ │ │ │ │ │ ├── GlobalContextContext.java │ │ │ │ │ │ └── LocalContextContext.java │ │ │ │ │ │ ├── paint │ │ │ │ │ │ ├── GlobalPaintContext.java │ │ │ │ │ │ └── LocalPaintContext.java │ │ │ │ │ │ ├── render │ │ │ │ │ │ ├── GlobalRenderContext.java │ │ │ │ │ │ ├── LocalRenderContext.java │ │ │ │ │ │ ├── RenderCache.java │ │ │ │ │ │ └── unit │ │ │ │ │ │ │ ├── ContextSwitch.java │ │ │ │ │ │ │ └── RenderedUnit.java │ │ │ │ │ │ └── style │ │ │ │ │ │ └── StyleContext.java │ │ │ │ └── simplelaf │ │ │ │ │ ├── SimpleLookAndFeel.java │ │ │ │ │ ├── display │ │ │ │ │ └── wrapper │ │ │ │ │ │ ├── SimpleWrapperBox.java │ │ │ │ │ │ ├── SimpleWrapperCompositor.java │ │ │ │ │ │ ├── SimpleWrapperContext.java │ │ │ │ │ │ ├── SimpleWrapperDisplay.java │ │ │ │ │ │ ├── SimpleWrapperPainter.java │ │ │ │ │ │ └── SimpleWrapperUnit.java │ │ │ │ │ ├── ui │ │ │ │ │ ├── container │ │ │ │ │ │ ├── ContainerBox.java │ │ │ │ │ │ ├── ContainerChildEntry.java │ │ │ │ │ │ ├── ContainerChildrenBoxGenerator.java │ │ │ │ │ │ ├── ContainerCompositor.java │ │ │ │ │ │ ├── ContainerContext.java │ │ │ │ │ │ ├── ContainerDisplay.java │ │ │ │ │ │ ├── ContainerMessageHandler.java │ │ │ │ │ │ ├── ContainerPainter.java │ │ │ │ │ │ ├── ContainerRenderedUnit.java │ │ │ │ │ │ ├── ContainerRenderer.java │ │ │ │ │ │ ├── ContainerUI.java │ │ │ │ │ │ ├── fluid │ │ │ │ │ │ │ ├── ContainerFluidRenderer.java │ │ │ │ │ │ │ ├── FluidLines.java │ │ │ │ │ │ │ └── HorizontalFluidLines.java │ │ │ │ │ │ └── solid │ │ │ │ │ │ │ └── ContainerSolidRenderer.java │ │ │ │ │ └── text │ │ │ │ │ │ ├── TextBox.java │ │ │ │ │ │ ├── TextContext.java │ │ │ │ │ │ ├── TextDisplay.java │ │ │ │ │ │ ├── TextPainter.java │ │ │ │ │ │ ├── TextRenderer.java │ │ │ │ │ │ ├── TextUI.java │ │ │ │ │ │ └── TextUnit.java │ │ │ │ │ └── util │ │ │ │ │ ├── SimpleBoxGenerator.java │ │ │ │ │ ├── SimpleDefaults.java │ │ │ │ │ ├── SimpleDirectiveUtil.java │ │ │ │ │ └── SimpleInvalidationUtil.java │ │ │ ├── message │ │ │ │ ├── basics │ │ │ │ │ ├── DefaultGraphicalMessageHandler.java │ │ │ │ │ └── sub │ │ │ │ │ │ └── MouseMessageHandler.java │ │ │ │ ├── keyboard │ │ │ │ │ ├── CharMessage.java │ │ │ │ │ ├── KeyMessage.java │ │ │ │ │ └── KeyboardMessage.java │ │ │ │ └── mouse │ │ │ │ │ ├── MouseMessage.java │ │ │ │ │ ├── MouseMessageResponse.java │ │ │ │ │ └── ScrollMessage.java │ │ │ ├── view │ │ │ │ └── textfield │ │ │ │ │ ├── TextFieldContext.java │ │ │ │ │ ├── TextFieldCursorState.java │ │ │ │ │ ├── TextFieldKeyboardMessageHandler.java │ │ │ │ │ ├── TextFieldMessageHandler.java │ │ │ │ │ ├── TextFieldMouseMessageHandler.java │ │ │ │ │ └── TextFieldPainter.java │ │ │ └── viewmodel │ │ │ │ └── textfield │ │ │ │ ├── TextFieldViewModel.java │ │ │ │ └── TextFieldViewModelListener.java │ │ ├── message │ │ │ ├── FocusChangeMessage.java │ │ │ ├── FocusManager.java │ │ │ ├── Message.java │ │ │ ├── MessageContext.java │ │ │ ├── MessageHandler.java │ │ │ ├── MessageResponse.java │ │ │ └── NoopMessageHandler.java │ │ └── tree │ │ │ ├── basics │ │ │ ├── ContainerComponent.java │ │ │ ├── TextComponent.java │ │ │ └── imp │ │ │ │ ├── BaseComponent.java │ │ │ │ ├── ContainerComponentImp.java │ │ │ │ └── TextComponentImp.java │ │ │ └── core │ │ │ ├── Component.java │ │ │ └── UINode.java │ │ ├── model │ │ └── textfield │ │ │ ├── TextFieldModel.java │ │ │ ├── TextFieldModelListener.java │ │ │ └── imp │ │ │ └── DefaultTextFieldModel.java │ │ ├── performance │ │ └── LazyMap.java │ │ └── windowing │ │ ├── core │ │ ├── DesktopWindow.java │ │ ├── GraphicsSystem.java │ │ ├── Screen.java │ │ ├── ScreenContent.java │ │ ├── Window.java │ │ └── event │ │ │ ├── ScreenEvent.java │ │ │ ├── keyboard │ │ │ ├── CharScreenEvent.java │ │ │ ├── KeyScreenEvent.java │ │ │ └── KeyboardConstants.java │ │ │ └── mouse │ │ │ ├── MouseConstants.java │ │ │ ├── MouseListener.java │ │ │ ├── MouseScreenEvent.java │ │ │ └── ScrollScreenEvent.java │ │ └── skija │ │ ├── SkijaGraphicsSystem.java │ │ ├── SkijaRootCanvas2D.java │ │ ├── SkijaScreen.java │ │ ├── SkijaWindow.java │ │ ├── SkijaWindowingThread.java │ │ └── imp │ │ ├── SkijaCanvasSettings.java │ │ ├── SkijaDefaultPaint2D.java │ │ ├── SkijaEventListeners.java │ │ ├── SkijaGraphicsSystemImp.java │ │ ├── SkijaInvalidationScheduler.java │ │ ├── SkijaKeyboardEventListeners.java │ │ ├── SkijaMouseEventListeners.java │ │ ├── SkijaRootCanvas2DImp.java │ │ ├── SkijaScreenImp.java │ │ ├── SkijaWindowImp.java │ │ └── SkijaWindowingThreadImp.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── thready │ └── model │ └── textfield │ └── TextFieldModelTest.java ├── ThreadyWeb ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── threadyweb │ │ ├── context │ │ ├── WebComponentContext.java │ │ └── image │ │ │ ├── ImageEngine.java │ │ │ ├── ImageRequest.java │ │ │ └── ImageState.java │ │ ├── graphical │ │ ├── directive │ │ │ ├── BoxSizingDirective.java │ │ │ ├── ClearDirective.java │ │ │ ├── FloatDirective.java │ │ │ ├── InnerDisplayDirective.java │ │ │ ├── OuterDisplayDirective.java │ │ │ ├── PaddingDirective.java │ │ │ ├── WhiteSpaceCollapseDirective.java │ │ │ ├── border │ │ │ │ ├── BorderColorDirective.java │ │ │ │ └── BorderWidthDirective.java │ │ │ ├── derived │ │ │ │ ├── DerivedFontDirective.java │ │ │ │ └── FontDeriver.java │ │ │ ├── layout │ │ │ │ ├── common │ │ │ │ │ ├── MarginDirective.java │ │ │ │ │ ├── position │ │ │ │ │ │ ├── PositionOffsetDirective.java │ │ │ │ │ │ └── PositionTypeDirective.java │ │ │ │ │ └── size │ │ │ │ │ │ ├── HeightDirective.java │ │ │ │ │ │ ├── MaxHeightDirective.java │ │ │ │ │ │ ├── MaxWidthDirective.java │ │ │ │ │ │ ├── MinHeightDirective.java │ │ │ │ │ │ ├── MinWidthDirective.java │ │ │ │ │ │ ├── SizeCalculationDirective.java │ │ │ │ │ │ └── WidthDirective.java │ │ │ │ ├── flexbox │ │ │ │ │ ├── FlexBasisDirective.java │ │ │ │ │ ├── FlexDirectionDirective.java │ │ │ │ │ ├── FlexGrowDirective.java │ │ │ │ │ ├── FlexJustifyContentDirective.java │ │ │ │ │ ├── FlexShrinkDirective.java │ │ │ │ │ └── FlexWrapDirective.java │ │ │ │ └── flow │ │ │ │ │ └── LineHeightDirective.java │ │ │ └── text │ │ │ │ ├── FontFamilyDirective.java │ │ │ │ ├── FontSizeDirective.java │ │ │ │ ├── FontWeightDirective.java │ │ │ │ ├── LetterSpacingDirective.java │ │ │ │ ├── LineBreakDirective.java │ │ │ │ └── TextAlignDirective.java │ │ ├── layout │ │ │ ├── adjusted │ │ │ │ ├── AdjustedDisplay.java │ │ │ │ ├── AdjustedLayout.java │ │ │ │ ├── AdjustedUnit.java │ │ │ │ └── position │ │ │ │ │ ├── PositionOffsetCalculations.java │ │ │ │ │ └── PositionOffsetUtil.java │ │ │ ├── flexbox │ │ │ │ ├── FlexContentJustification.java │ │ │ │ ├── FlexCrossSizeDetermination.java │ │ │ │ ├── FlexDimension.java │ │ │ │ ├── FlexInnerDisplayLayout.java │ │ │ │ ├── FlexItemRenderer.java │ │ │ │ ├── FlexLine.java │ │ │ │ ├── FlexMainSizeDetermination.java │ │ │ │ ├── FlexUtils.java │ │ │ │ ├── Flexer.java │ │ │ │ └── item │ │ │ │ │ ├── FlexItem.java │ │ │ │ │ └── FlexItemSizePreferences.java │ │ │ ├── flow │ │ │ │ ├── FlowConfig.java │ │ │ │ ├── FlowInnerDisplayLayout.java │ │ │ │ ├── FlowRenderContext.java │ │ │ │ ├── FlowRootContextSwitch.java │ │ │ │ ├── context │ │ │ │ │ ├── block │ │ │ │ │ │ ├── FlowBlockAnonRenderer.java │ │ │ │ │ │ ├── FlowBlockBlockRenderer.java │ │ │ │ │ │ ├── FlowBlockChildRenderResult.java │ │ │ │ │ │ ├── FlowBlockLayout.java │ │ │ │ │ │ ├── FlowBlockMarginCalculations.java │ │ │ │ │ │ ├── FlowBlockPositionTracker.java │ │ │ │ │ │ ├── FlowBlockPrerenderSizingInfo.java │ │ │ │ │ │ ├── FlowBlockRenderContext.java │ │ │ │ │ │ ├── FlowBlockSizeCalculations.java │ │ │ │ │ │ ├── FlowBlockUnitRenderer.java │ │ │ │ │ │ ├── FlowBlockUnitRenderingContext.java │ │ │ │ │ │ └── floatbox │ │ │ │ │ │ │ ├── FlowBlockFloatProcessor.java │ │ │ │ │ │ │ └── FlowBlockFloatRenderer.java │ │ │ │ │ └── inline │ │ │ │ │ │ ├── FlowInlineLayout.java │ │ │ │ │ │ ├── InlineTextRenderer.java │ │ │ │ │ │ ├── LineBox.java │ │ │ │ │ │ ├── LineContainer.java │ │ │ │ │ │ ├── LineCursorTracker.java │ │ │ │ │ │ ├── LineDimension.java │ │ │ │ │ │ ├── LineDimensionConverter.java │ │ │ │ │ │ ├── LineEntry.java │ │ │ │ │ │ ├── LinePositioner.java │ │ │ │ │ │ ├── LineRenderer.java │ │ │ │ │ │ ├── LineSectionBuilder.java │ │ │ │ │ │ ├── LineSplitter.java │ │ │ │ │ │ ├── SelfManagedRenderer.java │ │ │ │ │ │ ├── TextSplitter.java │ │ │ │ │ │ └── WhitespaceHandler.java │ │ │ │ ├── floatbox │ │ │ │ │ ├── FloatContext.java │ │ │ │ │ ├── FloatTracker.java │ │ │ │ │ └── imp │ │ │ │ │ │ ├── FloatContextImp.java │ │ │ │ │ │ ├── FloatTrackerImp.java │ │ │ │ │ │ └── OffsetFloatTrackerImp.java │ │ │ │ └── util │ │ │ │ │ └── FlowUtils.java │ │ │ └── util │ │ │ │ ├── BoxOffsetDimensions.java │ │ │ │ ├── LayoutBorderWidthCalculations.java │ │ │ │ ├── LayoutMarginCalculations.java │ │ │ │ ├── LayoutPaddingCalculations.java │ │ │ │ └── LayoutSizeUtils.java │ │ ├── lookandfeel │ │ │ └── weblaf │ │ │ │ ├── WebLookAndFeel.java │ │ │ │ ├── display │ │ │ │ └── scroll │ │ │ │ │ ├── HorizontalScrollbarDimensionTranslator.java │ │ │ │ │ ├── ScrollBox.java │ │ │ │ │ ├── ScrollCompositor.java │ │ │ │ │ ├── ScrollContext.java │ │ │ │ │ ├── ScrollDisplay.java │ │ │ │ │ ├── ScrollPainter.java │ │ │ │ │ ├── ScrollRenderer.java │ │ │ │ │ ├── ScrollState.java │ │ │ │ │ ├── ScrollUnit.java │ │ │ │ │ ├── ScrollUtils.java │ │ │ │ │ ├── ScrollbarDimensionTranslator.java │ │ │ │ │ ├── ScrollbarMessageHandler.java │ │ │ │ │ ├── ScrollbarStyles.java │ │ │ │ │ └── VerticalScrollbarDimensionTranslator.java │ │ │ │ ├── stage │ │ │ │ ├── box │ │ │ │ │ └── InlineBoxChildrenTracker.java │ │ │ │ ├── paint │ │ │ │ │ ├── BackgroundPainter.java │ │ │ │ │ └── BorderPainter.java │ │ │ │ └── render │ │ │ │ │ └── unit │ │ │ │ │ ├── BuildableRenderedUnit.java │ │ │ │ │ ├── StyledUnitContext.java │ │ │ │ │ ├── StyledUnitGenerator.java │ │ │ │ │ └── imp │ │ │ │ │ └── BuildableRenderedUnitImp.java │ │ │ │ ├── ui │ │ │ │ ├── br │ │ │ │ │ ├── BreakBox.java │ │ │ │ │ ├── BreakDisplay.java │ │ │ │ │ └── BreakUnit.java │ │ │ │ ├── document │ │ │ │ │ ├── DocumentBox.java │ │ │ │ │ ├── DocumentBoxGenerator.java │ │ │ │ │ ├── DocumentContext.java │ │ │ │ │ └── DocumentDisplay.java │ │ │ │ ├── element │ │ │ │ │ ├── ElementBlockBox.java │ │ │ │ │ ├── ElementBox.java │ │ │ │ │ ├── ElementBoxGenerator.java │ │ │ │ │ ├── ElementCompositor.java │ │ │ │ │ ├── ElementContext.java │ │ │ │ │ ├── ElementDisplay.java │ │ │ │ │ ├── ElementInlineBox.java │ │ │ │ │ ├── ElementPainter.java │ │ │ │ │ ├── ElementUnit.java │ │ │ │ │ ├── inline │ │ │ │ │ │ ├── ElementInlineDisplay.java │ │ │ │ │ │ └── ElementInlinePainter.java │ │ │ │ │ └── styled │ │ │ │ │ │ ├── StyledUnit.java │ │ │ │ │ │ ├── StyledUnitCompositor.java │ │ │ │ │ │ ├── StyledUnitDisplay.java │ │ │ │ │ │ └── StyledUnitPainter.java │ │ │ │ ├── image │ │ │ │ │ ├── ImageBox.java │ │ │ │ │ ├── ImageContext.java │ │ │ │ │ ├── ImageDisplay.java │ │ │ │ │ ├── ImageUnit.java │ │ │ │ │ ├── alt │ │ │ │ │ │ ├── ImageAltPainter.java │ │ │ │ │ │ ├── ImageAltRenderer.java │ │ │ │ │ │ └── ImageAltUnit.java │ │ │ │ │ └── loaded │ │ │ │ │ │ ├── LoadedImagePainter.java │ │ │ │ │ │ ├── LoadedImageRenderer.java │ │ │ │ │ │ └── LoadedImageUnit.java │ │ │ │ └── text │ │ │ │ │ ├── TextBox.java │ │ │ │ │ ├── TextDisplay.java │ │ │ │ │ ├── TextPainter.java │ │ │ │ │ ├── TextRenderer.java │ │ │ │ │ └── TextUnit.java │ │ │ │ └── util │ │ │ │ ├── WebBoxGeneratorUtil.java │ │ │ │ ├── WebComponentFactory.java │ │ │ │ ├── WebDefaults.java │ │ │ │ ├── WebFontUtil.java │ │ │ │ └── directive │ │ │ │ ├── WebDirectiveUtil.java │ │ │ │ └── WebTextDirectiveUtil.java │ │ └── value │ │ │ ├── ClearDirection.java │ │ │ ├── FloatDirection.java │ │ │ ├── InnerDisplay.java │ │ │ ├── OuterDisplay.java │ │ │ ├── PositionType.java │ │ │ ├── SizeCalculation.java │ │ │ ├── WhiteSpaceCollapse.java │ │ │ └── math │ │ │ └── MathCalculation.java │ │ └── tree │ │ ├── BreakComponent.java │ │ ├── DocumentComponent.java │ │ ├── ElementComponent.java │ │ ├── TextComponent.java │ │ ├── WebComponent.java │ │ ├── image │ │ ├── ImageComponent.java │ │ └── ImageStatus.java │ │ └── imp │ │ ├── BaseWebComponent.java │ │ ├── BreakComponentImp.java │ │ ├── DocumentComponentImp.java │ │ ├── ElementComponentImp.java │ │ ├── ImageWebComponent.java │ │ └── TextComponentImp.java │ └── test │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── threadyweb │ └── graphical │ ├── layout │ ├── flexbox │ │ └── FlexInnerDisplayLayoutTest.java │ └── flow │ │ ├── FlowTestUtils.java │ │ ├── context │ │ ├── block │ │ │ └── FlowBlockRendererTest.java │ │ └── inline │ │ │ ├── FlowInlineRendererTest.java │ │ │ └── WhitespaceHandlerTest.java │ │ └── floatbox │ │ ├── FloatLayoutTest.java │ │ └── FloatTrackerTest.java │ └── loookandfeel │ ├── test │ ├── TestComponentUI.java │ ├── TestFontMetrics.java │ ├── TestStubBlockBox.java │ ├── TestStubChildrenBox.java │ ├── TestStubContentBox.java │ ├── TestStubInlineBox.java │ └── TestStubSizeDependentBox.java │ └── weblaf │ └── stage │ └── box │ └── InlineBoxChildrenTrackerTest.java ├── Webicity ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── github │ └── webicitybrowser │ └── webicity │ ├── core │ ├── AssetLoader.java │ ├── RenderingEngine.java │ ├── component │ │ └── FrameComponent.java │ ├── image │ │ ├── ImageCodecRegistry.java │ │ └── imp │ │ │ └── ImageLoaderRegistryImp.java │ ├── imp │ │ └── RendererHandleImp.java │ ├── net │ │ ├── Connection.java │ │ ├── Protocol.java │ │ ├── ProtocolConnectionResponse.java │ │ ├── ProtocolContext.java │ │ ├── ProtocolRedirectHandler.java │ │ ├── ProtocolRegistry.java │ │ ├── ProtocolResponse.java │ │ └── imp │ │ │ └── ProtocolRegistryImp.java │ ├── renderer │ │ ├── ExceptionRendererCrashReason.java │ │ ├── GenericRendererCrashReason.java │ │ ├── RendererBackend.java │ │ ├── RendererBackendFactory.java │ │ ├── RendererBackendRegistry.java │ │ ├── RendererContext.java │ │ ├── RendererCrashException.java │ │ ├── RendererCrashReason.java │ │ ├── RendererFrontend.java │ │ ├── RendererHandle.java │ │ └── imp │ │ │ ├── FetchProtocolRegistryImp.java │ │ │ ├── ParallelContextImp.java │ │ │ ├── RendererBackendRegistryImp.java │ │ │ ├── RendererContextImp.java │ │ │ └── RenderingEngineImp.java │ └── ui │ │ ├── Frame.java │ │ ├── FrameEventListener.java │ │ └── imp │ │ └── FrameImp.java │ ├── event │ ├── EventDispatcher.java │ ├── EventListener.java │ └── imp │ │ └── EventDispatcherImp.java │ ├── protocol │ ├── AboutProtocol.java │ ├── FileProtocol.java │ └── HTTPProtocol.java │ └── renderer │ ├── backend │ └── html │ │ ├── ActionsRegistry.java │ │ ├── HTMLRendererBackend.java │ │ ├── HTMLRendererBackendParserSettings.java │ │ ├── HTMLRendererContext.java │ │ ├── TagActions.java │ │ ├── cssom │ │ ├── CSSOMMappedRuleList.java │ │ ├── CSSOMNode.java │ │ ├── CSSOMParticipantTraverser.java │ │ ├── CSSOMTraverseContext.java │ │ ├── CSSOMTraverseContextGenerator.java │ │ ├── CSSOMTree.java │ │ ├── CSSOMTreeGenerator.java │ │ └── imp │ │ │ ├── CSSOMMappedRuleListImp.java │ │ │ ├── CSSOMNodeImp.java │ │ │ ├── CSSOMParticipantTracker.java │ │ │ ├── CSSOMTraverseContextGeneratorImp.java │ │ │ ├── CSSOMTreeGeneratorImp.java │ │ │ ├── CSSOMTreeImp.java │ │ │ ├── CSSOMVariableResolver.java │ │ │ ├── CombinatorMatchUtil.java │ │ │ └── SelectorMatchUtil.java │ │ ├── stylesheetactions │ │ ├── LinkAction.java │ │ ├── NoLinkAction.java │ │ └── StylesheetAction.java │ │ ├── tags │ │ ├── LinkTagHandler.java │ │ ├── StyleTagHandler.java │ │ └── TagAction.java │ │ └── tasks │ │ ├── EventLoopImp.java │ │ ├── EventScheduler.java │ │ ├── EventSchedulerImp.java │ │ ├── TaskQueueImp.java │ │ ├── TaskQueueTaskDestination.java │ │ ├── TaskRunner.java │ │ └── runners │ │ └── NetworkTaskRunner.java │ └── frontend │ └── thready │ ├── core │ └── ThreadyRendererFrontend.java │ └── html │ ├── ThreadyHTMLRendererFrontend.java │ ├── component │ ├── WebComponentContextImp.java │ └── image │ │ ├── ImageEngineImp.java │ │ └── ImageStateImp.java │ └── style │ ├── cssbinding │ ├── CSSOMDeclarationParser.java │ ├── CSSOMDeclarationParserImp.java │ ├── CSSOMNamedDeclarationParser.java │ └── decparser │ │ ├── CSSOMColorDeclarationParser.java │ │ ├── CSSOMDisplayDeclarationParser.java │ │ ├── background │ │ ├── CSSOMBackgroundBindings.java │ │ ├── CSSOMBackgroundColorDeclarationParser.java │ │ └── CSSOMBackgroundDeclarationParser.java │ │ ├── border │ │ ├── CSSOMBorderBindings.java │ │ ├── CSSOMComponentCompositeParser.java │ │ ├── CSSOMLonghandBorderColorParser.java │ │ ├── CSSOMLonghandBorderWidthParser.java │ │ ├── CSSOMShorthandBorderColorParser.java │ │ ├── CSSOMShorthandBorderWidthParser.java │ │ └── CSSOMWholeCompositeParser.java │ │ ├── componentparser │ │ ├── ColorParser.java │ │ ├── MathParser.java │ │ └── SizeParser.java │ │ ├── floatbox │ │ ├── CSSOMClearDeclarationParser.java │ │ └── CSSOMFloatDeclarationParser.java │ │ ├── layout │ │ ├── flexbox │ │ │ ├── CSSOMFlexBasisParser.java │ │ │ ├── CSSOMFlexBindings.java │ │ │ ├── CSSOMFlexDeclarationParser.java │ │ │ ├── CSSOMFlexDirectionDeclarationParser.java │ │ │ ├── CSSOMFlexFactorDeclarationParser.java │ │ │ ├── CSSOMFlexFlowDeclarationParser.java │ │ │ ├── CSSOMFlexJustifyContentDeclarationParser.java │ │ │ └── CSSOMFlexWrapDeclarationParser.java │ │ └── flow │ │ │ ├── CSSOMFlowBindings.java │ │ │ └── CSSOMLineHeightDeclarationParser.java │ │ ├── margin │ │ ├── CSSOMLonghandMarginDeclarationParser.java │ │ ├── CSSOMMarginBindings.java │ │ └── CSSOMShorthandMarginDeclarationParser.java │ │ ├── padding │ │ ├── CSSOMLonghandPaddingDeclarationParser.java │ │ ├── CSSOMPaddingBindings.java │ │ └── CSSOMShorthandPaddingDeclarationParser.java │ │ ├── position │ │ ├── CSSOMPositionBindings.java │ │ ├── CSSOMPositionOffsetDeclarationParser.java │ │ └── CSSOMPositionTypeDeclarationParser.java │ │ ├── size │ │ ├── CSSOMBoxSizingDeclarationParser.java │ │ ├── CSSOMDimensionDeclarationParser.java │ │ └── CSSOMSizeBindings.java │ │ └── text │ │ ├── CSSOMFontFamilyDeclarationParser.java │ │ ├── CSSOMFontShorthandDeclarationParser.java │ │ ├── CSSOMFontSizeDeclarationParser.java │ │ ├── CSSOMFontWeightDeclarationParser.java │ │ ├── CSSOMLetterSpacingDeclarationParser.java │ │ ├── CSSOMLineBreakDeclarationParser.java │ │ ├── CSSOMTextAlignDeclarationParser.java │ │ └── CSSOMTextBindings.java │ └── generator │ ├── DocumentDirectivePool.java │ ├── DocumentParticipantTraverser.java │ ├── DocumentStyleGenerator.java │ ├── DocumentStyleGeneratorRoot.java │ └── DocumentStyleSheetSet.java ├── WebicityBrowser ├── build.gradle └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── webicitybrowser │ │ └── webicitybrowser │ │ ├── BrowserInstance.java │ │ ├── Main.java │ │ ├── WebicityArguments.java │ │ ├── component │ │ ├── CircularButtonComponent.java │ │ ├── MenuButtonComponent.java │ │ └── URLBarComponent.java │ │ ├── engine │ │ ├── RenderingEngineCreator.java │ │ ├── file │ │ │ └── FileUnicodeLookup.java │ │ ├── net │ │ │ ├── SocketChannelHTTPTransportFactory.java │ │ │ └── stream │ │ │ │ ├── ByteChannelInputStream.java │ │ │ │ └── ByteChannelOutputStream.java │ │ └── protocol │ │ │ └── WebicityProtocol.java │ │ ├── gui │ │ ├── Styling.java │ │ ├── behavior │ │ │ ├── ActionButtonBehavior.java │ │ │ ├── ComponentDragBehavior.java │ │ │ └── WindowDragBehavior.java │ │ ├── binding │ │ │ ├── TabGUI.java │ │ │ ├── URLBarGUI.java │ │ │ ├── WindowGUI.java │ │ │ ├── WindowSetGUI.java │ │ │ └── component │ │ │ │ └── tab │ │ │ │ ├── ContentTabComponent.java │ │ │ │ ├── TabComponent.java │ │ │ │ ├── TabDisplayComponent.java │ │ │ │ ├── TabPickerComponent.java │ │ │ │ └── TabSystemConfiguration.java │ │ ├── colors │ │ │ ├── ColorPalette.java │ │ │ ├── NormalColors.java │ │ │ ├── OctoberColors.java │ │ │ └── PrivateColors.java │ │ ├── ui │ │ │ ├── WebicityLookAndFeel.java │ │ │ ├── button │ │ │ │ ├── CircularButtonDisplay.java │ │ │ │ ├── CircularButtonPainter.java │ │ │ │ └── CircularButtonUnit.java │ │ │ ├── frame │ │ │ │ ├── FrameCompositor.java │ │ │ │ ├── FrameContext.java │ │ │ │ ├── FrameDisplay.java │ │ │ │ ├── FrameMessageHandler.java │ │ │ │ ├── FrameMouseEvent.java │ │ │ │ ├── FramePainter.java │ │ │ │ ├── FrameRenderer.java │ │ │ │ ├── FrameRendererChangeHandler.java │ │ │ │ └── FrameUnit.java │ │ │ ├── menu │ │ │ │ ├── MenuButtonDisplay.java │ │ │ │ ├── MenuButtonPainter.java │ │ │ │ ├── MenuButtonRenderer.java │ │ │ │ └── MenuButtonUnit.java │ │ │ ├── tab │ │ │ │ ├── TabButtonState.java │ │ │ │ ├── TabDisplay.java │ │ │ │ ├── TabMessageHandler.java │ │ │ │ ├── TabPainter.java │ │ │ │ ├── TabRenderer.java │ │ │ │ ├── TabStringUtils.java │ │ │ │ └── TabUnit.java │ │ │ └── urlbar │ │ │ │ ├── URLBarContext.java │ │ │ │ ├── URLBarContextGenerator.java │ │ │ │ ├── URLBarDisplay.java │ │ │ │ ├── URLBarMessageHandler.java │ │ │ │ ├── URLBarPainter.java │ │ │ │ └── URLBarUnit.java │ │ ├── util │ │ │ └── ImageUtil.java │ │ └── window │ │ │ ├── DesktopGUIWindow.java │ │ │ └── GUIWindow.java │ │ ├── imp │ │ ├── BrowserInstanceImp.java │ │ ├── URLArgumentReader.java │ │ └── WebicityArgumentsImp.java │ │ ├── loader │ │ ├── ResourceAssetLoader.java │ │ ├── StaticAssetLoader.java │ │ └── TypedAssetLoader.java │ │ ├── startup │ │ └── WebicityArgumentReader.java │ │ └── ui │ │ ├── Tab.java │ │ ├── Window.java │ │ ├── WindowSet.java │ │ ├── event │ │ ├── TabMutationEventListener.java │ │ ├── WindowMutationEventListener.java │ │ └── WindowSetMutationEventListener.java │ │ └── imp │ │ ├── TabImp.java │ │ ├── WindowImp.java │ │ └── WindowSetImp.java │ └── resources │ ├── icons │ ├── backward.png │ ├── forward.png │ ├── maximize.png │ ├── microphone.png │ ├── minimize.png │ ├── newtab.png │ ├── reload.png │ ├── restore.png │ └── stop.png │ ├── pages │ └── welcome.html │ ├── renderer │ └── html │ │ ├── charrefs.json │ │ └── ua.css │ ├── stylesheets │ └── style.css │ └── webicity.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── licenses └── WHATWG.txt └── settings.gradle /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 4 7 | 8 | [*.java] 9 | indent_style = tab 10 | 11 | [*.gradle] 12 | indent_style = tab -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # 2 | # https://help.github.com/articles/dealing-with-line-endings/ 3 | # 4 | # These are explicitly windows files and should use crlf 5 | *.bat text eol=crlf 6 | 7 | -------------------------------------------------------------------------------- /Codecs/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/image/ImageCodec.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.image; 2 | 3 | public interface ImageCodec { 4 | 5 | String[] getTypes(); 6 | 7 | PossibleImage loadImage(byte[] data, ImageProgressiveCallback callback); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/image/ImageData.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.image; 2 | 3 | public interface ImageData { 4 | 5 | ImageFrame[] frames(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/image/ImageFrame.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.image; 2 | 3 | public interface ImageFrame { 4 | 5 | int width(); 6 | 7 | int height(); 8 | 9 | byte[] bitmap(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/image/ImageProgressiveCallback.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.image; 2 | 3 | public interface ImageProgressiveCallback { 4 | 5 | void onProgressiveResult(ImageData imageData); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/image/PossibleImage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.image; 2 | 3 | import java.util.Optional; 4 | 5 | public record PossibleImage(Optional imageData, Optional exception) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/JPEGResult.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg; 2 | 3 | public record JPEGResult(int width, int height, byte[] pixels) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/chunk/dht/DHTChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.chunk.dht; 2 | 3 | import com.github.webicitybrowser.codec.jpeg.chunk.dht.DHTChunkParser.DHTBinaryTree; 4 | 5 | public record DHTChunkInfo(DHTBinaryTree[] dcHuffmanTables, DHTBinaryTree[] acHuffmanTables) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/chunk/dqt/DQTChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.chunk.dqt; 2 | 3 | public record DQTChunkInfo(int[][] tables) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/chunk/jfif/JFIFChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.chunk.jfif; 2 | 3 | public class JFIFChunkInfo { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/chunk/sof/SOFChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.chunk.sof; 2 | 3 | public record SOFChunkInfo(int width, int height, SOFComponentInfo[] components) { 4 | 5 | public static record SOFComponentInfo( 6 | int componentId, int horizontalSamplingFactor, int verticalSamplingFactor, int quantizationTableSelector 7 | ) {} 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/chunk/sos/SOSChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.chunk.sos; 2 | 3 | public record SOSChunkInfo(SOSComponentInfo[] components) { 4 | 5 | public static record SOSComponentInfo(int componentId, int dcCodingTableSelector, int acCodingTableSelector) {} 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/exception/InvalidJPEGSignatureException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.exception; 2 | 3 | public class InvalidJPEGSignatureException extends MalformedJPEGException { 4 | 5 | public InvalidJPEGSignatureException() { 6 | super("Invalid JPEG signature"); 7 | } 8 | 9 | public InvalidJPEGSignatureException(String string) { 10 | super("Invalid JPEG signature: " + string); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/exception/MalformedJPEGException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.exception; 2 | 3 | public class MalformedJPEGException extends Exception { 4 | 5 | public MalformedJPEGException(String message) { 6 | super(message); 7 | } 8 | 9 | public MalformedJPEGException() { 10 | super("Attempted to decode malformed JPEG datastream!"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/scan/ScanComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.scan; 2 | 3 | public record ScanComponent(int componentId, EntropyDecoder entropyDecoder, int quantizationTableId, int hSample, int vSample) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/scan/ScanComponentResult.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.scan; 2 | 3 | public record ScanComponentResult(ScanComponent component, int[] data) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/jpeg/scan/ScanParameters.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.jpeg.scan; 2 | 3 | import java.io.PushbackInputStream; 4 | 5 | public record ScanParameters(PushbackInputStream dataStream, ScanComponent[] scanComponents) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/PNGChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png; 2 | 3 | public record PNGChunkInfo(byte[] type, byte[] data) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/PNGResult.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png; 2 | 3 | public record PNGResult(int width, int height, byte[] pixels) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/chunk/idat/IDATChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.chunk.idat; 2 | 3 | public record IDATChunkInfo(byte[] imageRaster) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/chunk/idat/IDATContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.chunk.idat; 2 | 3 | import com.github.webicitybrowser.codec.png.chunk.ihdr.IHDRChunkInfo; 4 | import com.github.webicitybrowser.codec.png.chunk.plte.PLTEChunkInfo; 5 | 6 | public record IDATContext(IHDRChunkInfo ihdrChunkInfo, PLTEChunkInfo plteChunkInfo) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/chunk/idat/IDATImageRasterDecoder.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.chunk.idat; 2 | 3 | import com.github.webicitybrowser.codec.png.exception.UnsupportedPNGException; 4 | 5 | public interface IDATImageRasterDecoder { 6 | 7 | byte[] decode(byte[] unfilteredData, int width, int height) throws UnsupportedPNGException; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/chunk/ihdr/IHDRChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.chunk.ihdr; 2 | 3 | public record IHDRChunkInfo( 4 | int width, int height, byte bitDepth, byte colorType, 5 | byte compressionMethod, byte filterMethod, byte interlaceMethod 6 | ) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/chunk/plte/PLTEChunkInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.chunk.plte; 2 | 3 | public record PLTEChunkInfo(byte[][] palette) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/exception/InvalidPNGSignatureException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.exception; 2 | 3 | public class InvalidPNGSignatureException extends MalformedPNGException { 4 | 5 | public InvalidPNGSignatureException() { 6 | super("Invalid PNG signature"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/exception/MalformedPNGException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.exception; 2 | 3 | public class MalformedPNGException extends Exception { 4 | 5 | public MalformedPNGException(String message) { 6 | super(message); 7 | } 8 | 9 | public MalformedPNGException() { 10 | super("Attempted to decode malformed PNG datastream!"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Codecs/src/main/java/com/github/webicitybrowser/codec/png/exception/UnsupportedPNGException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.codec.png.exception; 2 | 3 | public class UnsupportedPNGException extends MalformedPNGException { 4 | 5 | public UnsupportedPNGException() { 6 | super("This PNG file uses unsupported features!"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /EcmaSpiral/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/exception/ParseException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.exception; 2 | 3 | import com.github.webicitybrowser.ecmaspiral.parser.tokens.Token.TokenMeta; 4 | 5 | public class ParseException extends Exception { 6 | 7 | private final TokenMeta locationInfo; 8 | 9 | public ParseException(String message, TokenMeta locationInfo) { 10 | super(message); 11 | this.locationInfo = locationInfo; 12 | } 13 | 14 | public TokenMeta getLocationInfo() { 15 | return locationInfo; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokenizer/Tokenizer.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokenizer; 2 | 3 | import java.io.IOException; 4 | import java.io.Reader; 5 | import java.util.List; 6 | 7 | import com.github.webicitybrowser.ecmaspiral.parser.exception.ParseException; 8 | import com.github.webicitybrowser.ecmaspiral.parser.tokens.Token; 9 | 10 | public interface Tokenizer { 11 | 12 | List tokenize(Reader inputReader) throws IOException, ParseException; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/CommentToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record CommentToken(String text, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/IdentifierToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record IdentifierToken(String name, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/NewlineToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record NewlineToken(String text, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/PunctuatorToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record PunctuatorToken(String punctuator, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/StringToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record StringToken(String value, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/Token.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public interface Token { 4 | 5 | TokenMeta meta(); 6 | 7 | record TokenMeta(int line, int column) {} 8 | 9 | } 10 | -------------------------------------------------------------------------------- /EcmaSpiral/src/main/java/com/github/webicitybrowser/ecmaspiral/parser/tokens/WhitespaceToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.ecmaspiral.parser.tokens; 2 | 3 | public record WhitespaceToken(String whitespace, TokenMeta meta) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /GetOpts/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } -------------------------------------------------------------------------------- /GetOpts/src/main/java/everyos/api/getopts/ErrorHandler.java: -------------------------------------------------------------------------------- 1 | package everyos.api.getopts; 2 | 3 | /** 4 | * Represents a procedure to be executed if the conversion of an argument to an object fails. 5 | */ 6 | public interface ErrorHandler { 7 | 8 | /** 9 | * Handle the failure of the conversion of an argument to an object. 10 | * @param message The reason the conversion failed. 11 | * @throws ParserFailedException An exception that may be thrown depending on the error handling style. 12 | */ 13 | void error(String message) throws ParserFailedException; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /GetOpts/src/main/java/everyos/api/getopts/FlagArgumentPair.java: -------------------------------------------------------------------------------- 1 | package everyos.api.getopts; 2 | 3 | /** 4 | * Indicates which arguments where parsed for a flag. 5 | */ 6 | public interface FlagArgumentPair { 7 | 8 | /** 9 | * Returns the flag that the arguments in this pair represent. 10 | * @return The flag that the arguments in this pair represent. 11 | */ 12 | Flag getFlag(); 13 | 14 | /** 15 | * Returns the arguments that were parsed for the flag given. 16 | * @return The arguments that were parsed for the flag given. 17 | */ 18 | Argument[] getArguments(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /GetOpts/src/main/java/everyos/api/getopts/FlagArgumentPairCollection.java: -------------------------------------------------------------------------------- 1 | package everyos.api.getopts; 2 | 3 | import java.util.function.Function; 4 | 5 | public interface FlagArgumentPairCollection { 6 | 7 | FlagArgumentPair[] get(int id); 8 | 9 | FlagArgumentPair[] filter(Function filter); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /GetOpts/src/main/java/everyos/api/getopts/ParserFailedException.java: -------------------------------------------------------------------------------- 1 | package everyos.api.getopts; 2 | 3 | /** 4 | * An exception thrown if any of the arguments passed to the argument parser are invalid. 5 | */ 6 | public class ParserFailedException extends Exception { 7 | 8 | private static final long serialVersionUID = -5966715242190479926L; 9 | 10 | public ParserFailedException() { 11 | super("The parser failed to parse because the input was invalid."); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Spec/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/QualifiedName.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css; 2 | 3 | public record QualifiedName(String namespace, String name) { 4 | 5 | public static final String NO_NAMESPACE = ""; 6 | public static final String ANY_NAMESPACE = "*"; 7 | public static final String DEFAULT_NAMESPACE = "**"; 8 | 9 | public static final String ANY_NAME = "*"; 10 | 11 | public static QualifiedName create(String namespace, String name) { 12 | return new QualifiedName(namespace.toLowerCase(), name.toLowerCase()); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/componentvalue/ComponentValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.componentvalue; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.tokens.Token; 4 | 5 | public interface ComponentValue extends Token { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/componentvalue/FunctionValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.componentvalue; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 4 | 5 | public record FunctionValue(String name, TokenLike[] value) implements ComponentValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/componentvalue/SimpleBlock.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.componentvalue; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 6 | import com.github.webicitybrowser.spec.css.parser.tokens.Token; 7 | 8 | public record SimpleBlock(Token type, List value) implements ComponentValue { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/CSSParser.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.imp.CSSParserImp; 4 | import com.github.webicitybrowser.spec.css.parser.tokens.Token; 5 | import com.github.webicitybrowser.spec.css.rule.CSSRule; 6 | 7 | public interface CSSParser { 8 | 9 | // TODO: Other entry points 10 | 11 | CSSRule[] parseAListOfRules(Token[] tokens); 12 | 13 | CSSRule[] parseAListOfDeclarations(TokenLike[] tokens); 14 | 15 | public static CSSParser create() { 16 | return new CSSParserImp(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/ParseFormatException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser; 2 | 3 | public class ParseFormatException extends Exception { 4 | 5 | private static final long serialVersionUID = 5091292412333339606L; 6 | 7 | private final int tokenPosition; 8 | 9 | public ParseFormatException(String message, int tokenPosition) { 10 | super(message); 11 | this.tokenPosition = tokenPosition; 12 | } 13 | 14 | public int getTokenPosition() { 15 | return tokenPosition; 16 | }; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/TokenLike.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser; 2 | 3 | public interface TokenLike { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/TokenStream.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.imp.TokenStreamImp; 4 | 5 | public interface TokenStream { 6 | 7 | TokenLike read(); 8 | 9 | TokenLike peek(); 10 | 11 | void unread(); 12 | 13 | int position(); 14 | 15 | boolean isEmpty(); 16 | 17 | static TokenStream create(TokenLike[] tokens) { 18 | return new TokenStreamImp(tokens); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/property/PropertyValueParseResult.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.property; 2 | 3 | import java.util.Optional; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public interface PropertyValueParseResult { 8 | 9 | Optional getResult(); 10 | 11 | int getLength(); 12 | 13 | PropertyValueParseResult as(Class cls); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/property/PropertyValueParser.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.property; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 4 | import com.github.webicitybrowser.spec.css.property.CSSValue; 5 | 6 | public interface PropertyValueParser { 7 | 8 | PropertyValueParseResult parse(TokenLike[] tokens, int offset, int length); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/selectors/SelectorParser.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.selectors; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.ParseFormatException; 4 | import com.github.webicitybrowser.spec.css.parser.TokenStream; 5 | import com.github.webicitybrowser.spec.css.selectors.ComplexSelectorPart; 6 | 7 | public interface SelectorParser { 8 | 9 | ComplexSelectorPart parse(TokenStream stream) throws ParseFormatException; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokenizer/CSSTokenizer.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokenizer; 2 | 3 | import java.io.IOException; 4 | import java.io.Reader; 5 | 6 | import com.github.webicitybrowser.spec.css.parser.tokenizer.imp.TokenizerImp; 7 | import com.github.webicitybrowser.spec.css.parser.tokens.Token; 8 | 9 | public interface CSSTokenizer { 10 | 11 | Token[] tokenize(Reader input) throws IOException; 12 | 13 | public static CSSTokenizer create() { 14 | return new TokenizerImp(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/AtKeywordToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record AtKeywordToken(String value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/BadStringToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record BadStringToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/BadURLToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record BadURLToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/CDCToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record CDCToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/CDOToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record CDOToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/ColonToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record ColonToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/CommaToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record CommaToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/DelimToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record DelimToken(int value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/DimensionToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record DimensionToken(Number value, NumberTypeFlag typeFlag, String unit) implements Token { 4 | 5 | public DimensionToken(Number value, String unit) { 6 | this( 7 | value, 8 | value instanceof Integer ? NumberTypeFlag.INTEGER : NumberTypeFlag.NUMBER, 9 | unit); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/EOFToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record EOFToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/FunctionToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record FunctionToken(String value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/HashToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record HashToken(String value, HashTypeFlag typeFlag) implements Token { 4 | 5 | public static enum HashTypeFlag { 6 | ID, UNRESTRICTED 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/IdentToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record IdentToken(String value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/LCBracketToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record LCBracketToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/LParenToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record LParenToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/LSBracketToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record LSBracketToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/NumberToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record NumberToken(Number value, NumberTypeFlag typeFlag) implements Token { 4 | 5 | public NumberToken(Number value) { 6 | this( 7 | value, 8 | value instanceof Integer ? NumberTypeFlag.INTEGER : NumberTypeFlag.NUMBER); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/NumberTypeFlag.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public enum NumberTypeFlag { 4 | INTEGER, NUMBER 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/PercentageToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record PercentageToken(Number value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/RCBracketToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record RCBracketToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/RParenToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record RParenToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/RSBracketToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record RSBracketToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/SemicolonToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record SemicolonToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/StringToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record StringToken(String value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/Token.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 4 | 5 | public interface Token extends TokenLike { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/URLToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record URLToken(String value) implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/parser/tokens/WhitespaceToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.parser.tokens; 2 | 3 | public record WhitespaceToken() implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/CSSValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property; 2 | 3 | public interface CSSValue { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/Property.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property; 2 | 3 | public interface Property { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundAttachmentLayersValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record BackgroundAttachmentLayersValue(List attachments) implements CSSValue { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundAttachmentValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum BackgroundAttachmentValue implements CSSValue { 6 | SCROLL, FIXED, LOCAL 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundImageLayersValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record BackgroundImageLayersValue(List images) implements CSSValue { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundPositionLayersValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record BackgroundPositionLayersValue(List positions) implements CSSValue { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundPositionValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record BackgroundPositionValue(BackgroundAxisPosition horizontalPosition, BackgroundAxisPosition verticalPosition) implements CSSValue { 6 | 7 | public static record BackgroundAxisPosition(BackgroundAxisReference reference, CSSValue offset) implements CSSValue {} 8 | 9 | public static enum BackgroundAxisReference implements CSSValue { 10 | LEFT, RIGHT, CENTER, TOP, BOTTOM 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundRepeatLayersValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record BackgroundRepeatLayersValue(List repeats) implements CSSValue { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundRepeatValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record BackgroundRepeatValue(RepeatStyle repeatX, RepeatStyle repeatY) implements CSSValue { 6 | 7 | public static enum RepeatStyle { 8 | REPEAT, SPACE, ROUND, NO_REPEAT 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundSizeLayersValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record BackgroundSizeLayersValue(List sizes) implements CSSValue { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundSizeValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public interface BackgroundSizeValue extends CSSValue { 6 | 7 | public static record RelativeBackgroundSizeValue(CSSValue sizeX, CSSValue sizeY) implements BackgroundSizeValue {} 8 | 9 | public static record CoverBackgroundSizeValue() implements BackgroundSizeValue {} 10 | 11 | public static record ContainBackgroundSizeValue() implements BackgroundSizeValue {} 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/background/BackgroundValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.background; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | import com.github.webicitybrowser.spec.css.property.color.ColorValue; 7 | 8 | public record BackgroundValue(List layer) implements CSSValue { 9 | 10 | public static record BackgroundLayer(ColorValue color) {} 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/border/BorderCompositeValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.border; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | import com.github.webicitybrowser.spec.css.property.color.ColorValue; 5 | 6 | public record BorderCompositeValue(CSSValue width, BorderStyleValue style, ColorValue color) implements CSSValue { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/border/BorderStyleValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.border; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum BorderStyleValue implements CSSValue { 6 | NONE, HIDDEN, DOTTED, DASHED, SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET; 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/border/MultiBorderColorValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.border; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | import com.github.webicitybrowser.spec.css.property.color.ColorValue; 5 | 6 | public record MultiBorderColorValue(ColorValue left, ColorValue right, ColorValue top, ColorValue bottom) implements CSSValue { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/border/MultiBorderWidthValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.border; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record MultiBorderWidthValue(CSSValue left, CSSValue right, CSSValue top, CSSValue bottom) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/boxsizing/BoxSizingValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.boxsizing; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum BoxSizingValue implements CSSValue { 6 | 7 | CONTENT_BOX, BORDER_BOX; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/color/ColorValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.color; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public interface ColorValue extends CSSValue { 6 | 7 | int red(); 8 | 9 | int green(); 10 | 11 | int blue(); 12 | 13 | int alpha(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/display/DisplayValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.display; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record DisplayValue(OuterDisplayType outerDisplayType, InnerDisplayType innerDisplayType) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/display/InnerDisplayType.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.display; 2 | 3 | public enum InnerDisplayType { 4 | FLOW, FLOW_ROOT, FLEX 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/display/OuterDisplayType.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.display; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum OuterDisplayType implements CSSValue { 6 | BLOCK, INLINE, NONE, CONTENTS 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexBasisValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record FlexBasisValue(CSSValue size, boolean isAuto) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexDirectionValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum FlexDirectionValue implements CSSValue { 6 | ROW, ROW_REVERSE, COLUMN, COLUMN_REVERSE; 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexFactorValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record FlexFactorValue(float value) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexFlowValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record FlexFlowValue(FlexDirectionValue flexDirection, FlexWrapValue flexWrap) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexJustifyContentValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum FlexJustifyContentValue implements CSSValue { 6 | CENTER, FLEX_END, FLEX_START, SPACE_AROUND, SPACE_BETWEEN; 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record FlexValue(FlexFactorValue growFactor, FlexFactorValue shrinkFactor, FlexBasisValue basis) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/flexbox/FlexWrapValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.flexbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum FlexWrapValue implements CSSValue { 6 | NOWRAP, WRAP, WRAP_REVERSE; 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/floatbox/ClearValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.floatbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum ClearValue implements CSSValue { 6 | NONE, LEFT, RIGHT, BOTH 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/floatbox/FloatValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.floatbox; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum FloatValue implements CSSValue { 6 | LEFT, RIGHT, NONE 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/font/FontValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.font; 2 | 3 | import java.util.Optional; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | import com.github.webicitybrowser.spec.css.property.fontfamily.FontFamilyValue; 7 | 8 | public record FontValue(FontFamilyValue fontFamilies, Optional fontSize, Optional lineHeight) implements CSSValue { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/fontfamily/FontFamilyValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.fontfamily; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record FontFamilyValue(FontFamilyEntry[] entries) implements CSSValue { 6 | 7 | public interface FontFamilyEntry {} 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/fontfamily/NamedFontFamilyEntry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.fontfamily; 2 | 3 | import com.github.webicitybrowser.spec.css.property.fontfamily.FontFamilyValue.FontFamilyEntry; 4 | 5 | public record NamedFontFamilyEntry(String name) implements FontFamilyEntry { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/fontweight/FontWeightValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.fontweight; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public interface FontWeightValue extends CSSValue { 6 | 7 | int getWeight(int parentWeight); 8 | 9 | } -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/margin/MarginValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.margin; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record MarginValue(CSSValue left, CSSValue right, CSSValue top, CSSValue bottom) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/padding/PaddingValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.padding; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record PaddingValue(CSSValue left, CSSValue right, CSSValue top, CSSValue bottom) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/position/PositionTypeValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.position; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum PositionTypeValue implements CSSValue { 6 | STATIC, RELATIVE, ABSOLUTE, STICKY, FIXED 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/NoneValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record NoneValue() implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/URLValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record URLValue(String url) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/basic/AutoValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.basic; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record AutoValue() implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/basic/NumberValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.basic; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record NumberValue(Number value) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/length/AbsoluteLengthValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.length; 2 | 3 | public record AbsoluteLengthValue(float value, AbsoluteLengthUnit unit) implements LengthValue { 4 | 5 | public static enum AbsoluteLengthUnit { 6 | CM, MM, Q, IN, PC, PT, PX 7 | } 8 | 9 | public static AbsoluteLengthValue of(Number value, AbsoluteLengthUnit unit) { 10 | return new AbsoluteLengthValue(value.floatValue(), unit); 11 | } 12 | 13 | public static AbsoluteLengthValue of(Number value, String unit) { 14 | return of(value, AbsoluteLengthUnit.valueOf(unit.toUpperCase())); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/length/LengthValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.length; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public interface LengthValue extends CSSValue { 6 | 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/math/MathValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.math; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public interface MathValue extends CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/math/MaxMathValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.math; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record MaxMathValue(List values) implements MathValue { 8 | 9 | @Override 10 | public String toString() { 11 | StringBuilder valueStr = new StringBuilder(); 12 | for (int i = 0; i < values.size(); i++) { 13 | if (i != 0) { 14 | valueStr.append(", "); 15 | } 16 | valueStr.append(values.get(i)); 17 | } 18 | return "max(" + valueStr + ")"; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/math/MinMathValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.math; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.property.CSSValue; 6 | 7 | public record MinMathValue(List values) implements MathValue { 8 | 9 | @Override 10 | public String toString() { 11 | return "min(" + values + ")"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/math/NumberMathValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.math; 2 | 3 | public record NumberMathValue(Number value) implements MathValue { 4 | 5 | @Override 6 | public String toString() { 7 | return value.toString(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/math/OperandMathValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.math; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record OperandMathValue(Operand operand, CSSValue leftSide, CSSValue rightSide) implements MathValue { 6 | 7 | @Override 8 | public String toString() { 9 | return "(" + leftSide + " " + operand + " " + rightSide + ")"; 10 | } 11 | 12 | public static enum Operand { 13 | PLUS, MINUS, MULTIPLY, DIVIDE 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/shared/percentage/PercentageValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.shared.percentage; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public record PercentageValue(float value) implements CSSValue { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/text/LineBreakValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.text; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum LineBreakValue implements CSSValue { 6 | AUTO, LOOSE, NORMAL, STRICT, ANYWHERE 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/property/text/TextAlignValue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.property.text; 2 | 3 | import com.github.webicitybrowser.spec.css.property.CSSValue; 4 | 5 | public enum TextAlignValue implements CSSValue { 6 | START, END, LEFT, RIGHT, CENTER, JUSTIFY, MATCH_PARENT, JUSTIFY_ALL 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/AtRule.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.componentvalue.SimpleBlock; 6 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 7 | 8 | public record AtRule(String name, List prelude, SimpleBlock value) implements CSSRule { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/CSSRule.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule; 2 | 3 | public interface CSSRule { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/CSSRuleList.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule; 2 | 3 | import com.github.webicitybrowser.spec.css.rule.imp.CSSRuleListImp; 4 | 5 | public interface CSSRuleList { 6 | 7 | CSSRule getItem(int index); 8 | 9 | // TODO: Must support values greater than MAX_INT 10 | int getLength(); 11 | 12 | static CSSRuleList create(CSSRule[] rules) { 13 | return new CSSRuleListImp(rules); 14 | } 15 | 16 | static CSSRuleList createEmpty() { 17 | return new CSSRuleListImp(new CSSRule[0]); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/Declaration.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule; 2 | 3 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 4 | 5 | public record Declaration(String name, TokenLike[] value, boolean isImportant) implements CSSRule { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/QualifiedRule.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.css.componentvalue.SimpleBlock; 6 | import com.github.webicitybrowser.spec.css.parser.TokenLike; 7 | 8 | public record QualifiedRule(List prelude, SimpleBlock value) implements CSSRule { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/rule/imp/CSSRuleListImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.rule.imp; 2 | 3 | import com.github.webicitybrowser.spec.css.rule.CSSRule; 4 | import com.github.webicitybrowser.spec.css.rule.CSSRuleList; 5 | 6 | public class CSSRuleListImp implements CSSRuleList { 7 | 8 | private final CSSRule[] rules; 9 | 10 | public CSSRuleListImp(CSSRule[] rules) { 11 | this.rules = rules; 12 | } 13 | 14 | @Override 15 | public CSSRule getItem(int index) { 16 | return rules[index]; 17 | } 18 | 19 | @Override 20 | public int getLength() { 21 | return rules.length; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/ComplexSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors; 2 | 3 | public record ComplexSelector(ComplexSelectorPart[] parts, SelectorSpecificity specificity) implements ComplexSelectorPart { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/ComplexSelectorPart.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors; 2 | 3 | public interface ComplexSelectorPart { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/SelectorOrderingTag.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors; 2 | 3 | import com.github.webicitybrowser.spec.css.selectors.SelectorSpecificity.Source; 4 | 5 | // TODO: How will imported resources be handled? 6 | public record SelectorOrderingTag(Source source, int documentOrder) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/combinator/ChildCombinator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.combinator; 2 | 3 | public record ChildCombinator() implements Combinator { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/combinator/Combinator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.combinator; 2 | 3 | import com.github.webicitybrowser.spec.css.selectors.ComplexSelectorPart; 4 | 5 | public interface Combinator extends ComplexSelectorPart { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/combinator/DescendantCombinator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.combinator; 2 | 3 | public record DescendantCombinator() implements Combinator { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/combinator/NextSiblingCombinator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.combinator; 2 | 3 | public record NextSiblingCombinator() implements Combinator { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/combinator/SubsequentSiblingCombinator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.combinator; 2 | 3 | public record SubsequentSiblingCombinator() implements Combinator { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/AttributeSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector; 2 | 3 | import com.github.webicitybrowser.spec.css.QualifiedName; 4 | 5 | public record AttributeSelector(QualifiedName attributeName, AttributeSelectorOperation operation, String comparisonValue) implements SimpleSelector { 6 | 7 | public static enum AttributeSelectorOperation { 8 | PRESENT, EQUALS, ONE_OF, HAS_SUBCODE, BEGINS_WITH, ENDS_WITH, CONTAINS 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/IDSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector; 2 | 3 | public record IDSelector(String id) implements SimpleSelector { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/SimpleSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector; 2 | 3 | import com.github.webicitybrowser.spec.css.selectors.ComplexSelectorPart; 4 | 5 | public interface SimpleSelector extends ComplexSelectorPart { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/TypeSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector; 2 | 3 | import com.github.webicitybrowser.spec.css.QualifiedName; 4 | 5 | public record TypeSelector(QualifiedName qualifiedName) implements SimpleSelector { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/psuedo/PsuedoSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector.psuedo; 2 | 3 | import com.github.webicitybrowser.spec.css.selectors.selector.SimpleSelector; 4 | 5 | public interface PsuedoSelector extends SimpleSelector { 6 | 7 | String getType(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/selectors/selector/psuedo/RootSelector.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.selectors.selector.psuedo; 2 | 3 | public interface RootSelector extends PsuedoSelector { 4 | 5 | @Override 6 | default String getType() { 7 | return "root"; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/stylesheet/CSSStyleSheet.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.stylesheet; 2 | 3 | import com.github.webicitybrowser.spec.css.rule.CSSRuleList; 4 | 5 | public interface CSSStyleSheet extends StyleSheet { 6 | 7 | CSSRuleList getCSSRules(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/stylesheet/StyleSheet.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.stylesheet; 2 | 3 | public interface StyleSheet { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/css/stylesheet/StyleSheetList.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.css.stylesheet; 2 | 3 | import com.github.webicitybrowser.spec.css.stylesheet.imp.StyleSheetListImp; 4 | 5 | public interface StyleSheetList { 6 | 7 | CSSStyleSheet getItem(int index); 8 | 9 | int getLength(); 10 | 11 | // TODO: Not a spec method 12 | void add(CSSStyleSheet styleSheet); 13 | 14 | void addUpdateListener(Runnable listener); 15 | 16 | static StyleSheetList create() { 17 | return new StyleSheetListImp(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/exception/DOMException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.exception; 2 | 3 | public class DOMException extends RuntimeException { 4 | 5 | private static final long serialVersionUID = -7650823537438317961L; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/exception/HierarchyRequestError.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.exception; 2 | 3 | public class HierarchyRequestError extends DOMException { 4 | 5 | private static final long serialVersionUID = 8206713709117353701L; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/CharacterData.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | public interface CharacterData extends Node { 4 | 5 | void appendData(String string); 6 | 7 | String getData(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/Comment.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | public interface Comment extends CharacterData { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/Document.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.imp.DocumentImp; 4 | 5 | public interface Document extends Node, DocumentOrShadowRoot { 6 | 7 | public static Document create() { 8 | return new DocumentImp(); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/DocumentOrShadowRoot.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | public interface DocumentOrShadowRoot { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/DocumentType.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | public interface DocumentType extends Node { 4 | 5 | String getName(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/Element.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | public interface Element extends Node { 4 | 5 | String getLocalName(); 6 | 7 | String getNamespace(); 8 | 9 | String[] getAttributeNames(); 10 | 11 | void setAttribute(String name, String value); 12 | 13 | String getAttribute(String name); 14 | 15 | boolean hasAttribute(String name); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/Node.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.support.NodeList; 4 | 5 | public interface Node { 6 | 7 | Node getOwnerDocument(); 8 | 9 | Node getParentNode(); 10 | 11 | NodeList getChildNodes(); 12 | 13 | Node getPreviousSibling(); 14 | 15 | Node getLastChild(); 16 | 17 | // 18 | 19 | void insertBefore(Node rawBefore, Node rawChild); 20 | 21 | void appendChild(Node node); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/Text.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node; 2 | 3 | // TODO: Extend CharacterData 4 | public interface Text extends CharacterData { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/imp/CommentImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Comment; 4 | import com.github.webicitybrowser.spec.dom.node.Document; 5 | 6 | public class CommentImp extends CharacterDataImp implements Comment { 7 | 8 | public CommentImp(Document nodeDocument, String data) { 9 | super(nodeDocument, data); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/imp/TextImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.dom.node.Text; 5 | 6 | public class TextImp extends CharacterDataImp implements Text { 7 | 8 | public TextImp(Document document) { 9 | super(document, ""); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/imp/util/InsertUtil.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node.imp.util; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.spec.dom.node.Node; 6 | 7 | public final class InsertUtil { 8 | 9 | private InsertUtil() {} 10 | 11 | public static void insertBefore(List childNodes, Node node, Node child) { 12 | if (node == null) { 13 | childNodes.add(child); 14 | } else { 15 | int pos = childNodes.indexOf(node); 16 | assert pos != -1; 17 | childNodes.add(pos, child); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/dom/node/support/NodeList.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.dom.node.support; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Node; 4 | 5 | public interface NodeList extends Iterable { 6 | 7 | Node get(int index); 8 | 9 | Node[] toArray(); 10 | 11 | int getLength(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchConsumeBodyAction.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | public interface FetchConsumeBodyAction { 4 | 5 | void execute(FetchResponse response, boolean success, byte[] body); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchDecoder.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | public interface FetchDecoder { 4 | 5 | byte[] translate(byte[] data); 6 | 7 | default void close() {} 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchEngine.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | public interface FetchEngine { 4 | 5 | void fetch(FetchParameters parameters); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchParameters.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | import java.util.function.Consumer; 4 | 5 | import com.github.webicitybrowser.spec.fetch.taskdestination.TaskDestination; 6 | 7 | public record FetchParameters( 8 | FetchRequest request, Consumer processResponseAction, 9 | FetchConsumeBodyAction consumeBodyAction, TaskDestination taskDestination 10 | ) { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchParams.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | import java.util.function.Consumer; 4 | 5 | import com.github.webicitybrowser.spec.fetch.taskdestination.TaskDestination; 6 | 7 | public record FetchParams( 8 | FetchRequest request, Consumer processResponseAction, 9 | FetchConsumeBodyAction consumeBodyAction, TaskDestination taskDestination 10 | ) { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/FetchProtocolRegistry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.util.Optional; 6 | 7 | import com.github.webicitybrowser.spec.url.URL; 8 | 9 | public interface FetchProtocolRegistry { 10 | 11 | Optional openConnection(URL url) throws IOException; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/builder/FetchRequestBuilder.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.builder; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchRequest; 4 | import com.github.webicitybrowser.spec.fetch.builder.imp.FetchRequestBuilderImp; 5 | import com.github.webicitybrowser.spec.url.URL; 6 | 7 | public interface FetchRequestBuilder { 8 | 9 | void setMethod(String method); 10 | 11 | void setUrl(URL url); 12 | 13 | FetchRequest build(); 14 | 15 | static FetchRequestBuilder create() { 16 | return new FetchRequestBuilderImp(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/builder/MutableFetchResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.builder; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchResponse; 4 | 5 | public interface MutableFetchResponse extends FetchResponse { 6 | 7 | 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/connection/FetchConnection.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.connection; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchRequest; 4 | import com.github.webicitybrowser.spec.fetch.FetchResponse; 5 | 6 | public interface FetchConnection { 7 | 8 | FetchConnectionInfo info(); 9 | 10 | FetchResponse send(FetchRequest request); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/connection/FetchConnectionInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.connection; 2 | 3 | import com.github.webicitybrowser.spec.htmlbrowsers.Origin; 4 | 5 | public record FetchConnectionInfo(FetchNetworkPartitionKey networkPartitionKey, Origin origin, boolean isSecure) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/connection/FetchConnectionPool.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.connection; 2 | 3 | public interface FetchConnectionPool extends AutoCloseable { 4 | 5 | FetchConnection createNewConnection(FetchConnectionInfo info); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/connection/FetchHTTPConnection.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.connection; 2 | 3 | public interface FetchHTTPConnection { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/connection/FetchNetworkPartitionKey.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.connection; 2 | 3 | public interface FetchNetworkPartitionKey { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/imp/EmptyFetchHeaderListImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.imp; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchHeaderList; 4 | 5 | public class EmptyFetchHeaderListImp implements FetchHeaderList { 6 | 7 | @Override 8 | public String getHeaderValue(String headerName) { 9 | return null; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/imp/FetchBodyImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.imp; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchBody; 4 | import com.github.webicitybrowser.spec.stream.ReadableStream; 5 | 6 | public class FetchBodyImp implements FetchBody { 7 | 8 | private ReadableStream stream; 9 | private Object source; 10 | 11 | public FetchBodyImp(ReadableStream stream, Object source) { 12 | this.stream = stream; 13 | this.source = source; 14 | } 15 | 16 | public ReadableStream stream() { 17 | return stream; 18 | } 19 | 20 | public Object source() { 21 | return source; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/fetch/taskdestination/TaskDestination.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.taskdestination; 2 | 3 | 4 | public interface TaskDestination { 5 | 6 | void enqueue(Runnable task); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLBodyElement.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | public interface HTMLBodyElement extends HTMLElement { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLDocument.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.html.node.imp.HTMLDocumentImp; 5 | 6 | public interface HTMLDocument extends Document, HTMLDocumentOrShadowRoot { 7 | 8 | String getTitle(); 9 | 10 | public static HTMLDocument create() { 11 | return new HTMLDocumentImp(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLDocumentOrShadowRoot.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | import com.github.webicitybrowser.spec.css.stylesheet.StyleSheetList; 4 | import com.github.webicitybrowser.spec.dom.node.DocumentOrShadowRoot; 5 | 6 | public interface HTMLDocumentOrShadowRoot extends DocumentOrShadowRoot { 7 | 8 | StyleSheetList getStyleSheets(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLElement.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Element; 4 | 5 | public interface HTMLElement extends Element { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLHeadElement.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | public interface HTMLHeadElement extends HTMLElement { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLHtmlElement.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | public interface HTMLHtmlElement extends HTMLElement { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/HTMLTitleElement.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node; 2 | 3 | public interface HTMLTitleElement extends HTMLElement { 4 | 5 | String getText(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/imp/HTMLBodyElementImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.html.node.HTMLBodyElement; 5 | 6 | public class HTMLBodyElementImp extends HTMLElementImp implements HTMLBodyElement { 7 | 8 | public HTMLBodyElementImp(Document nodeDocument) { 9 | super(nodeDocument, "body"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/imp/HTMLElementImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.dom.node.imp.ElementImp; 5 | import com.github.webicitybrowser.spec.html.node.HTMLElement; 6 | import com.github.webicitybrowser.spec.infra.Namespace; 7 | 8 | public class HTMLElementImp extends ElementImp implements HTMLElement { 9 | 10 | public HTMLElementImp(Document nodeDocument, String localTag) { 11 | super(nodeDocument, Namespace.HTML_NAMESPACE, localTag); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/imp/HTMLHeadElementImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.html.node.HTMLHeadElement; 5 | 6 | public class HTMLHeadElementImp extends HTMLElementImp implements HTMLHeadElement { 7 | 8 | public HTMLHeadElementImp(Document nodeDocument) { 9 | super(nodeDocument, "head"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/imp/HTMLHtmlElementImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.html.node.HTMLHtmlElement; 5 | 6 | public class HTMLHtmlElementImp extends HTMLElementImp implements HTMLHtmlElement { 7 | 8 | public HTMLHtmlElementImp(Document nodeDocument) { 9 | super(nodeDocument, "html"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/node/imp/HTMLTitleElementImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.node.imp; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Document; 4 | import com.github.webicitybrowser.spec.dom.node.imp.util.DOMTextUtil; 5 | import com.github.webicitybrowser.spec.html.node.HTMLTitleElement; 6 | 7 | public class HTMLTitleElementImp extends HTMLElementImp implements HTMLTitleElement { 8 | 9 | public HTMLTitleElementImp(Document nodeDocument) { 10 | super(nodeDocument, "title"); 11 | } 12 | 13 | @Override 14 | public String getText() { 15 | return DOMTextUtil.getChildTextContent(this); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/parse/CharacterReferenceLookup.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.parse; 2 | 3 | public interface CharacterReferenceLookup { 4 | 5 | String[] getEntityNames(); 6 | 7 | int[] getCodePointsForNamedEntity(String reference); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/parse/ElementCreationOptions.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.parse; 2 | 3 | import java.util.Map; 4 | 5 | import com.github.webicitybrowser.spec.dom.node.Node; 6 | 7 | public record ElementCreationOptions( 8 | String tagName, Map attributes, 9 | String namespace, Node intendedParent 10 | ) { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/parse/HTMLParser.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.parse; 2 | 3 | import java.io.IOException; 4 | 5 | public interface HTMLParser { 6 | 7 | void next(byte[] byteBuffer) throws IOException; 8 | 9 | void done() throws IOException; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/html/parse/ParserSettings.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.html.parse; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Node; 4 | 5 | public interface ParserSettings { 6 | 7 | void onNodePopped(Node node); 8 | 9 | CharacterReferenceLookup getUnicodeLookup(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/htmlbrowsers/Origin.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.htmlbrowsers; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public interface Origin { 6 | 7 | static Origin of(URL url) { 8 | return new TupleOrigin(url.getScheme(), url.getHost(), url.getPort(), null); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/htmlbrowsers/ParallelContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.htmlbrowsers; 2 | 3 | public interface ParallelContext { 4 | 5 | void inParallel(Runnable runnable); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/htmlbrowsers/TupleOrigin.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.htmlbrowsers; 2 | 3 | public record TupleOrigin(String scheme, String host, int port, String domain) implements Origin { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/htmlbrowsers/tasks/EventLoop.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.htmlbrowsers.tasks; 2 | 3 | public interface EventLoop { 4 | 5 | public static final int NETWORK_TASK_QUEUE = 0; 6 | 7 | public static final int TYPES_OF_TASK_QUEUES = 1; 8 | 9 | TaskQueue getTaskQueue(int id); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/htmlbrowsers/tasks/TaskQueue.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.htmlbrowsers.tasks; 2 | 3 | import java.util.Optional; 4 | 5 | public interface TaskQueue { 6 | 7 | void enqueue(Runnable task); 8 | 9 | Optional poll(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPFailResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import com.github.webicitybrowser.spec.http.response.HTTPResponse; 4 | 5 | public interface HTTPFailResponse extends HTTPResponse { 6 | 7 | String getReason(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPHeaders.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import com.github.webicitybrowser.spec.http.HTTPHeaders.HeaderEntry; 4 | import com.github.webicitybrowser.spec.http.imp.HTTPHeadersImp; 5 | 6 | public interface HTTPHeaders extends Iterable { 7 | 8 | boolean has(String headerName); 9 | 10 | String get(String headerName); 11 | 12 | String set(String headerName, String headerValue); 13 | 14 | public static record HeaderEntry(String headerName, String headerValue) {}; 15 | 16 | public static HTTPHeaders create() { 17 | return new HTTPHeadersImp(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPRedirectHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public interface HTTPRedirectHandler { 6 | 7 | boolean onRedirectRequest(URL redirectURL); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPRequest.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public record HTTPRequest(URL url, String method, HTTPRedirectHandler redirectHandler) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPStatus.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | public record HTTPStatus(int statusCode, String statusMessage) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPTransferEncoding.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import java.io.InputStream; 4 | 5 | public interface HTTPTransferEncoding { 6 | 7 | String getName(); 8 | 9 | InputStream decode(InputStream inputStream); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPTransport.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import java.io.InputStream; 4 | import java.io.OutputStream; 5 | 6 | public record HTTPTransport(InputStream inputStream, OutputStream outputStream) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPTransportFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import java.io.IOException; 4 | 5 | import com.github.webicitybrowser.spec.url.URL; 6 | 7 | public interface HTTPTransportFactory { 8 | 9 | HTTPTransport createTransport(URL url) throws IOException; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPVersion.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | import java.io.IOException; 4 | 5 | import com.github.webicitybrowser.spec.http.imp.HTTPContext; 6 | import com.github.webicitybrowser.spec.http.response.HTTPResponse; 7 | import com.github.webicitybrowser.spec.url.URL; 8 | 9 | public interface HTTPVersion { 10 | 11 | String getName(); 12 | 13 | HTTPResponse get(URL url, HTTPContext httpContext) throws IOException; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/HTTPVersionInstance.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http; 2 | 3 | public interface HTTPVersionInstance { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/encoding/chunked/ChunkedEncoding.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.encoding.chunked; 2 | 3 | import java.io.InputStream; 4 | 5 | import com.github.webicitybrowser.spec.http.HTTPTransferEncoding; 6 | 7 | public class ChunkedEncoding implements HTTPTransferEncoding { 8 | 9 | @Override 10 | public String getName() { 11 | return "chunked"; 12 | } 13 | 14 | @Override 15 | public InputStream decode(InputStream inputStream) { 16 | return new ChunkedInputStream(inputStream); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/imp/HTTPContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.imp; 2 | 3 | import java.util.Map; 4 | 5 | import com.github.webicitybrowser.spec.http.HTTPTransferEncoding; 6 | import com.github.webicitybrowser.spec.http.HTTPTransport; 7 | 8 | public record HTTPContext(String userAgent, HTTPTransport transport, Map transferEncodings) { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/response/HTTPRedirectResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.response; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public interface HTTPRedirectResponse extends HTTPResponse { 6 | 7 | URL getRedirectURL(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/response/HTTPResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.response; 2 | 3 | public interface HTTPResponse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/response/HTTPSuccessResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.response; 2 | 3 | import java.io.InputStream; 4 | 5 | import com.github.webicitybrowser.spec.http.HTTPHeaders; 6 | import com.github.webicitybrowser.spec.url.URL; 7 | 8 | public interface HTTPSuccessResponse extends HTTPResponse { 9 | 10 | URL getURL(); 11 | 12 | InputStream getInputStream(); 13 | 14 | HTTPHeaders getHeaders(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/version/http11/HTTP11Constants.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.version.http11; 2 | 3 | public final class HTTP11Constants { 4 | 5 | public static final String HTTP11_NAME = "HTTP/1.1"; 6 | 7 | private HTTP11Constants() {} 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/http/version/http11/HTTP11ResponseData.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.http.version.http11; 2 | 3 | import com.github.webicitybrowser.spec.http.HTTPHeaders; 4 | import com.github.webicitybrowser.spec.http.HTTPStatus; 5 | 6 | public record HTTP11ResponseData(HTTPStatus status, HTTPHeaders headers) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/infra/Namespace.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.infra; 2 | 3 | public final class Namespace { 4 | 5 | public static final String HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; 6 | public static final String MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML"; 7 | public static final String SVG_NAMESPACE = "http://www.w3.org/2000/svg"; 8 | 9 | private Namespace() {} 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadRequest.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public record ReadRequest(Consumer chunkSteps, Runnable closeSteps, Consumer errorSteps, boolean readAll) { 6 | 7 | public ReadRequest(Consumer chunkSteps, Runnable closeSteps, Consumer errorSteps) { 8 | this(chunkSteps, closeSteps, errorSteps, false); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadableStream.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | import com.github.webicitybrowser.spec.stream.imp.ReadableStreamImp; 4 | 5 | public interface ReadableStream { 6 | 7 | // Extra methods 8 | void enqueue(Object chunk); 9 | 10 | void close(); 11 | 12 | ReadableStreamController controller(); 13 | 14 | void setReader(ReadableStreamReader reader); 15 | 16 | boolean isLocked(); 17 | 18 | State getState(); 19 | 20 | static ReadableStream create() { 21 | return new ReadableStreamImp(); 22 | } 23 | 24 | static enum State { 25 | READABLE, CLOSED, ERRORED 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadableStreamController.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | public interface ReadableStreamController { 4 | 5 | void performPullSteps(ReadRequest request); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadableStreamDefaultController.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | public interface ReadableStreamDefaultController extends ReadableStreamController { 4 | 5 | // Extra methods 6 | void enqueue(Object chunk); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadableStreamDefaultReader.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | import java.util.function.Consumer; 4 | 5 | import com.github.webicitybrowser.spec.stream.imp.ReadableStreamDefaultReaderImp; 6 | 7 | public interface ReadableStreamDefaultReader extends ReadableStreamReader { 8 | 9 | // Extra methods 10 | void read(ReadRequest request); 11 | 12 | void readAllBytes(Consumer consumer, Consumer errorConsumer); 13 | 14 | static ReadableStreamDefaultReader acquire(ReadableStream stream) { 15 | return new ReadableStreamDefaultReaderImp(stream); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/stream/ReadableStreamReader.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.stream; 2 | 3 | public interface ReadableStreamReader { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Spec/src/main/java/com/github/webicitybrowser/spec/url/InvalidURLException.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.url; 2 | 3 | public class InvalidURLException extends Exception { 4 | 5 | private static final long serialVersionUID = -8490384123790666892L; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Spec/src/test/java/com/github/webicitybrowser/spec/fetch/test/DummyTaskDestination.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spec.fetch.test; 2 | 3 | import com.github.webicitybrowser.spec.fetch.taskdestination.TaskDestination; 4 | 5 | public class DummyTaskDestination implements TaskDestination { 6 | 7 | @Override 8 | public void enqueue(Runnable task) { 9 | task.run(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /SpiderHTML/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } 4 | 5 | dependencies { 6 | implementation project(':Spec') 7 | } -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/insertion/InsertionMode.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.insertion; 2 | 3 | import com.github.webicitybrowser.spiderhtml.context.InsertionContext; 4 | import com.github.webicitybrowser.spiderhtml.context.SharedContext; 5 | import com.github.webicitybrowser.spiderhtml.token.Token; 6 | 7 | public interface InsertionMode { 8 | 9 | void emit(SharedContext context, InsertionContext insertionContext, Token token); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/misc/InsertionLocation.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.misc; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Node; 4 | 5 | public record InsertionLocation(Node parent, Node before) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/performance/StringCache.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.performance; 2 | 3 | import com.github.webicitybrowser.spiderhtml.performance.imp.StringCacheImp; 4 | 5 | public interface StringCache { 6 | 7 | String get(String str); 8 | 9 | static StringCache create() { 10 | return new StringCacheImp(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/performance/imp/StringCacheImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.performance.imp; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import com.github.webicitybrowser.spiderhtml.performance.StringCache; 7 | 8 | public class StringCacheImp implements StringCache { 9 | 10 | private Map cache = new HashMap<>(); 11 | 12 | @Override 13 | public String get(String str) { 14 | if (str.length() > 6) { 15 | return str; 16 | } 17 | 18 | cache.putIfAbsent(str, str); 19 | return cache.get(str); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/CharacterToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public class CharacterToken implements Token { 4 | 5 | private int character; 6 | 7 | public CharacterToken(int ch) { 8 | this.character = ch; 9 | } 10 | 11 | public int getCharacter() { 12 | return this.character; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/CommentToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public class CommentToken implements Token { 4 | 5 | private final StringBuilder dataBuilder; 6 | 7 | public CommentToken(String data) { 8 | this.dataBuilder = new StringBuilder(data); 9 | } 10 | 11 | public void appendToData(int ch) { 12 | dataBuilder.appendCodePoint(ch); 13 | } 14 | 15 | public String getData() { 16 | return dataBuilder.toString(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/DoctypeToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public class DoctypeToken implements Token { 4 | 5 | private final StringBuilder nameBuilder = new StringBuilder(4); 6 | 7 | public void appendToName(int ch) { 8 | nameBuilder.appendCodePoint(ch); 9 | } 10 | 11 | public String getName() { 12 | return nameBuilder.toString(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/EOFToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public class EOFToken implements Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/EndTagToken.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public class EndTagToken extends TagToken { 4 | 5 | public EndTagToken(String name) { 6 | super(name); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/token/Token.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.token; 2 | 3 | public interface Token { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SpiderHTML/src/main/java/com/github/webicitybrowser/spiderhtml/tokenize/TokenizeState.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.spiderhtml.tokenize; 2 | 3 | import java.io.IOException; 4 | 5 | import com.github.webicitybrowser.spiderhtml.context.ParsingContext; 6 | import com.github.webicitybrowser.spiderhtml.context.SharedContext; 7 | 8 | public interface TokenizeState { 9 | 10 | void process(SharedContext context, ParsingContext parsingContext, int ch) throws IOException; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/color/RawColor.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.color; 2 | 3 | /** 4 | * Represents a color in an implementation-dependent format. 5 | * Should not be directly instantiated outside of Thready. 6 | */ 7 | public interface RawColor { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/color/format/ColorFormat.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.color.format; 2 | 3 | import com.github.webicitybrowser.thready.color.RawColor; 4 | 5 | /** 6 | * A color format is a representation of a color 7 | * in a specific scheme, independent of Thready's built-in 8 | * representation. 9 | */ 10 | public interface ColorFormat { 11 | 12 | /** 13 | * Convert this color to Thready's implementation-specific representation. 14 | * @return The resultant representation. 15 | */ 16 | RawColor toRawColor(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/AbsoluteDimensions.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | public interface AbsoluteDimensions { 4 | 5 | float xComponent(); 6 | 7 | float yComponent(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/AbsolutePosition.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | /** 4 | * Represents a (x,y) position that is either not relative 5 | * to another object or is already resolved to absolute values. 6 | */ 7 | public record AbsolutePosition(float x, float y) implements AbsoluteDimensions { 8 | 9 | public static final AbsolutePosition ZERO_POSITION = new AbsolutePosition(0, 0); 10 | 11 | @Override 12 | public float xComponent() { 13 | return x; 14 | } 15 | 16 | @Override 17 | public float yComponent() { 18 | return y; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/AbsoluteSize.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | /** 4 | * Represents a (w,h) size that is either not relative 5 | * to another object or is already resolved to absolute values. 6 | */ 7 | public record AbsoluteSize(float width, float height) { 8 | 9 | public static final AbsoluteSize ZERO_SIZE = new AbsoluteSize(0, 0); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/Rectangle.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | /** 4 | * Represents a rectangle with it's top-left point at 5 | * the given position and it's size being the given size. 6 | */ 7 | public record Rectangle(AbsolutePosition position, AbsoluteSize size) { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/RelativePosition.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | public record RelativePosition(RelativeDimension x, RelativeDimension y) { 4 | 5 | public RelativePosition(float rx, float ax, float ry, float ay) { 6 | this(new RelativeDimension(rx, ax), new RelativeDimension(ry, ay)); 7 | } 8 | 9 | public AbsolutePosition resolveAbsolutePosition(AbsoluteSize parentSize) { 10 | return new AbsolutePosition( 11 | x.resolveAbsoluteDimensions(parentSize.width()), 12 | y.resolveAbsoluteDimensions(parentSize.height())); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/dimensions/RelativeSize.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.dimensions; 2 | 3 | public record RelativeSize(RelativeDimension width, RelativeDimension height) { 4 | 5 | public RelativeSize(float rw, float aw, float rh, float ah) { 6 | this(new RelativeDimension(rw, aw), new RelativeDimension(rh, ah)); 7 | } 8 | 9 | public AbsoluteSize resolveAbsoluteSize(AbsoluteSize parentSize) { 10 | return new AbsoluteSize( 11 | width.resolveAbsoluteDimensions(parentSize.width()), 12 | height.resolveAbsoluteDimensions(parentSize.height())); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/ChildCanvasSettings.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core; 2 | 3 | public record ChildCanvasSettings(boolean preservePosition) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/image/EncodedBytesImageSource.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.image; 2 | 3 | public record EncodedBytesImageSource(byte[] bytes) implements ImageSource { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/image/Image.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.image; 2 | 3 | public interface Image { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/image/ImageSource.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.image; 2 | 3 | public interface ImageSource { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/image/RasterBytesImageSource.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.image; 2 | 3 | public record RasterBytesImageSource(int width, int height, byte[] raster) implements ImageSource { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/text/CommonFontWeights.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.text; 2 | 3 | /** 4 | * Constant class with common font weights. 5 | */ 6 | public final class CommonFontWeights { 7 | 8 | /** 9 | * The most commonly expected font weight. 10 | */ 11 | public static int NORMAL = 400; 12 | 13 | private CommonFontWeights() {} 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/text/Font2D.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.text; 2 | 3 | /** 4 | * A loaded font that is able to be used to draw text. 5 | */ 6 | public interface Font2D { 7 | 8 | /** 9 | * Returns info about the sizing and statistics of this font. 10 | * @return The metrics of this font. 11 | */ 12 | FontMetrics getMetrics(); 13 | 14 | /** 15 | * Get the font settings that this font was loaded with. 16 | * @return The font settings. 17 | */ 18 | FontSettings getSettings(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/text/FontDecoration.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.text; 2 | 3 | public enum FontDecoration { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/core/text/source/FontSource.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.core.text.source; 2 | 3 | public interface FontSource { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/skija/SkijaFont2D.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.skija; 2 | 3 | import com.github.webicitybrowser.thready.drawing.core.text.Font2D; 4 | 5 | import io.github.humbleui.skija.Font; 6 | 7 | public interface SkijaFont2D extends Font2D { 8 | 9 | Font getEffectiveFont(int codePoint); 10 | 11 | Font[] getRawFonts(); 12 | 13 | short getCharacterGlyph(int codePoint); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/drawing/skija/imp/SkijaImage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.drawing.skija.imp; 2 | 3 | import com.github.webicitybrowser.thready.drawing.core.image.Image; 4 | 5 | public class SkijaImage implements Image { 6 | 7 | private final io.github.humbleui.skija.Image rawImage; 8 | 9 | public SkijaImage(io.github.humbleui.skija.Image rawImage) { 10 | this.rawImage = rawImage; 11 | } 12 | 13 | public io.github.humbleui.skija.Image getRawImage() { 14 | return this.rawImage; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/directive/core/Directive.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.directive.core; 2 | 3 | /** 4 | * A directive allows styling of a component. 5 | */ 6 | public interface Directive { 7 | 8 | /** 9 | * Get the type of this directive. 10 | * @return The type of this directive. 11 | */ 12 | Class getPrimaryType(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/directive/core/pool/ComposedDirectivePool.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.directive.core.pool; 2 | 3 | public interface ComposedDirectivePool extends DirectivePool { 4 | 5 | void addDirectivePool(T pool); 6 | 7 | void removeDirectivePool(T pool); 8 | 9 | // Includes self 10 | T[] getCurrentDirectivePools(); 11 | 12 | void release(); 13 | 14 | // Note: A composed directive pool's own set of directives typically 15 | // take priority over those of any other pools added to it, 16 | // with few exceptions 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/directive/core/pool/DirectivePoolListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.directive.core.pool; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface DirectivePoolListener { 6 | 7 | void onDirective(Directive directive); 8 | 9 | void onMassChange(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/directive/core/style/StyleGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.directive.core.style; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.ComponentUI; 5 | 6 | public interface StyleGenerator { 7 | 8 | StyleGenerator[] createChildStyleGenerators(ComponentUI[] children); 9 | 10 | DirectivePool getStyleDirectives(); 11 | 12 | // TODO: Special styles 13 | // TODO: Listener for invalidation 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/directive/core/style/StyleGeneratorRoot.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.directive.core.style; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.ComponentUI; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.style.StyleContext; 5 | 6 | public interface StyleGeneratorRoot { 7 | 8 | StyleGenerator generateChildStyleGenerator(ComponentUI componentUI, StyleContext styleContext); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/event/Event.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.event; 2 | 3 | public interface Event { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/animation/AnimationContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.animation; 2 | 3 | public interface AnimationContext { 4 | 5 | long getDeltaMillis(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/base/InvalidationLevel.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.base; 2 | 3 | /** 4 | * Represents stages of the rendering pipeline the must be reprocessed. 5 | */ 6 | public enum InvalidationLevel { 7 | 8 | NONE, PAINT_LAYERS, PAINT, COMPOSITE, RENDER, BOX, STYLE 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/base/imp/stage/composite/LayerPaintEntry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.base.imp.stage.composite; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.composite.LocalCompositeContext; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.RenderedUnit; 5 | 6 | public record LayerPaintEntry(RenderedUnit paintableUnit, LocalCompositeContext compositeContext) { 7 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/base/imp/stage/paint/PaintContextImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.base.imp.stage.paint; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.animation.InvalidationScheduler; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint.GlobalPaintContext; 5 | 6 | public record PaintContextImp(InvalidationScheduler invalidationScheduler) implements GlobalPaintContext { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/base/layout/StaticTreeTracker.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.base.layout; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.thready.gui.graphical.layout.core.TreeTracker; 6 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box; 7 | 8 | public record StaticTreeTracker(Box parentBox, List children) implements TreeTracker { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/cache/MappingCache.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.cache; 2 | 3 | import java.util.List; 4 | import java.util.function.Function; 5 | 6 | public interface MappingCache { 7 | 8 | void recompute(List children, Function mappingGenerator); 9 | 10 | List getComputedMappings(); 11 | 12 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/cache/imp/CacheNode.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.cache.imp; 2 | 3 | public class CacheNode { 4 | 5 | private final T value; 6 | 7 | private CacheNode next; 8 | 9 | public CacheNode(T value) { 10 | this.value = value; 11 | } 12 | 13 | public T getValue() { 14 | return this.value; 15 | } 16 | 17 | public void setNext(CacheNode next) { 18 | this.next = next; 19 | } 20 | 21 | public CacheNode getNext() { 22 | return this.next; 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/directive/GraphicalDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.directive; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.thready.gui.graphical.base.InvalidationLevel; 5 | 6 | public interface GraphicalDirective extends Directive { 7 | 8 | InvalidationLevel getInvalidationLevel(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/layout/core/SolidLayoutManager.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.layout.core; 2 | 3 | public interface SolidLayoutManager { 4 | 5 | LayoutResult render(LayoutRenderContext layoutManagerContext); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/layout/core/TreeTracker.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.layout.core; 2 | 3 | import java.util.List; 4 | 5 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box; 6 | 7 | public interface TreeTracker { 8 | 9 | Box parentBox(); 10 | 11 | List children(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/ComponentUI.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.base.InvalidationLevel; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public interface ComponentUI { 7 | 8 | Component getComponent(); 9 | 10 | void invalidate(InvalidationLevel level); 11 | 12 | InvalidationLevel invalidationLevel(); 13 | 14 | void validateUpTo(InvalidationLevel render); 15 | 16 | UIDisplay getRootDisplay(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/ComponentUIFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 4 | 5 | public interface ComponentUIFactory { 6 | 7 | ComponentUI create(Component component, ComponentUI parent); 8 | 9 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/LookAndFeel.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 4 | 5 | public interface LookAndFeel { 6 | 7 | ComponentUI createUIFor(Component component, ComponentUI parent); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/LookAndFeelBuilder.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.imp.LookAndFeelBuilderImp; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public interface LookAndFeelBuilder { 7 | 8 | void registerComponentUI(Class componentClass, ComponentUIFactory provider); 9 | 10 | LookAndFeel build(); 11 | 12 | public static LookAndFeelBuilder create() { 13 | return new LookAndFeelBuilderImp(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/box/BoxChildrenTracker.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box; 2 | 3 | import java.util.List; 4 | 5 | public interface BoxChildrenTracker { 6 | 7 | void addChild(Box child); 8 | 9 | List getChildren(); 10 | 11 | List getAdjustedBoxTree(); 12 | 13 | default void addAllChildren(List children) { 14 | for (Box child: children) { 15 | addChild(child); 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/box/BoxContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box; 2 | 3 | public record BoxContext() {} 4 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/box/ChildrenBox.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box; 2 | 3 | import java.util.List; 4 | 5 | public interface ChildrenBox extends Box { 6 | 7 | BoxChildrenTracker getChildrenTracker(); 8 | 9 | @Override 10 | default List getAdjustedBoxTree() { 11 | return getChildrenTracker().getAdjustedBoxTree(); 12 | }; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/box/CloneBox.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box; 2 | 3 | public interface CloneBox extends ChildrenBox { 4 | 5 | CloneBox cloneEmpty(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/box/ReplacedInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box; 2 | 3 | public interface ReplacedInfo { 4 | 5 | float intrinsicWidth(); 6 | 7 | float intrinsicHeight(); 8 | 9 | float intrinsicRatio(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/composite/CompositeParameters.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.composite; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import com.github.webicitybrowser.thready.dimensions.AbsolutePosition; 6 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.composite.CompositeLayer.CompositeReference; 7 | 8 | public record CompositeParameters(CompositeReference reference, Supplier translate) { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/composite/GlobalCompositeContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.composite; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.Rectangle; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.RenderedUnit; 5 | 6 | public interface GlobalCompositeContext { 7 | 8 | void enterChildContext(Rectangle bounds, CompositeParameters parameters); 9 | 10 | void exitChildContext(); 11 | 12 | void addPaintUnit(RenderedUnit paintableUnit, LocalCompositeContext localCompositeContext); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/composite/LocalCompositeContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.composite; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.Rectangle; 4 | 5 | public record LocalCompositeContext(Rectangle documentRect) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/context/GlobalContextContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.context; 2 | 3 | import com.github.webicitybrowser.thready.drawing.core.ResourceLoader; 4 | import com.github.webicitybrowser.thready.drawing.core.text.FontMetrics; 5 | 6 | public interface GlobalContextContext { 7 | 8 | ResourceLoader resourceLoader(); 9 | 10 | FontMetrics rootFontMetrics(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/context/LocalContextContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.context; 2 | 3 | import java.util.Optional; 4 | 5 | import com.github.webicitybrowser.thready.gui.directive.core.style.StyleGenerator; 6 | 7 | public record LocalContextContext(StyleGenerator styleGenerator, Optional prevContext) { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/paint/GlobalPaintContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.animation.InvalidationScheduler; 4 | 5 | public interface GlobalPaintContext { 6 | 7 | InvalidationScheduler invalidationScheduler(); 8 | 9 | static GlobalPaintContext create(InvalidationScheduler invalidationScheduler) { 10 | return () -> invalidationScheduler; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/paint/LocalPaintContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.Rectangle; 4 | import com.github.webicitybrowser.thready.drawing.core.Canvas2D; 5 | 6 | public record LocalPaintContext(Canvas2D canvas, Rectangle documentRect) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/render/GlobalRenderContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteSize; 4 | import com.github.webicitybrowser.thready.drawing.core.ResourceLoader; 5 | import com.github.webicitybrowser.thready.drawing.core.text.FontMetrics; 6 | 7 | public record GlobalRenderContext(AbsoluteSize viewportSize, ResourceLoader resourceLoader, FontMetrics rootFontMetrics, RenderCache renderCache) { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/render/unit/ContextSwitch.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit; 2 | 3 | public interface ContextSwitch { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/render/unit/RenderedUnit.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteSize; 4 | import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool; 5 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.UIDisplay; 6 | 7 | public interface RenderedUnit { 8 | 9 | UIDisplay display(); 10 | 11 | AbsoluteSize fitSize(); 12 | 13 | DirectivePool styleDirectives(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/core/stage/style/StyleContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.style; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteSize; 4 | import com.github.webicitybrowser.thready.drawing.core.ResourceLoader; 5 | import com.github.webicitybrowser.thready.drawing.core.text.FontMetrics; 6 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.LookAndFeel; 7 | 8 | public record StyleContext(AbsoluteSize viewportSize, ResourceLoader resourceLoader, FontMetrics rootFontMetrics, LookAndFeel lookAndFeel) { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/simplelaf/ui/container/ContainerChildEntry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.simplelaf.ui.container; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.ComponentUI; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.context.Context; 5 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 6 | 7 | public record ContainerChildEntry(ComponentUI componentUI, Context context) { 8 | 9 | public Component component() { 10 | return componentUI.getComponent(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/simplelaf/ui/container/ContainerPainter.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.simplelaf.ui.container; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint.GlobalPaintContext; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint.LocalPaintContext; 5 | 6 | public final class ContainerPainter { 7 | 8 | private ContainerPainter() {} 9 | 10 | public static void paint(ContainerRenderedUnit unit, GlobalPaintContext globalPaintContext, LocalPaintContext localPaintContext) {} 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/simplelaf/ui/container/fluid/FluidLines.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.simplelaf.ui.container.fluid; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutResult; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box; 5 | 6 | public interface FluidLines { 7 | 8 | void addBox(Box child); 9 | 10 | LayoutResult getLayoutResult(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/simplelaf/util/SimpleBoxGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.simplelaf.util; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box; 6 | 7 | public final class SimpleBoxGenerator { 8 | 9 | private SimpleBoxGenerator() {} 10 | 11 | public static Box[] generateBoxes(Supplier defaultBoxGenerator) { 12 | return defaultBoxGenerator.get(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/message/keyboard/CharMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.message.keyboard; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.event.keyboard.CharScreenEvent; 4 | 5 | public interface CharMessage extends KeyboardMessage { 6 | 7 | CharScreenEvent getScreenEvent(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/message/keyboard/KeyMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.message.keyboard; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.event.keyboard.KeyScreenEvent; 4 | 5 | public interface KeyMessage extends KeyboardMessage { 6 | 7 | KeyScreenEvent getScreenEvent(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/message/keyboard/KeyboardMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.message.keyboard; 2 | 3 | import com.github.webicitybrowser.thready.gui.message.Message; 4 | 5 | public interface KeyboardMessage extends Message { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/message/mouse/MouseMessageResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.message.mouse; 2 | 3 | import com.github.webicitybrowser.thready.gui.message.MessageResponse; 4 | 5 | public interface MouseMessageResponse extends MessageResponse { 6 | 7 | boolean getCaptured(); 8 | 9 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/message/mouse/ScrollMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.message.mouse; 2 | 3 | import com.github.webicitybrowser.thready.gui.message.Message; 4 | import com.github.webicitybrowser.thready.windowing.core.event.mouse.ScrollScreenEvent; 5 | 6 | public interface ScrollMessage extends Message { 7 | 8 | ScrollScreenEvent getScreenEvent(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/view/textfield/TextFieldCursorState.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.view.textfield; 2 | 3 | public enum TextFieldCursorState { 4 | 5 | INACTIVE, NOT_SHOWN, SHOWN 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/viewmodel/textfield/TextFieldViewModelListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.graphical.viewmodel.textfield; 2 | 3 | public interface TextFieldViewModelListener { 4 | 5 | void onStateChanged(TextFieldViewModel textFieldViewModel); 6 | 7 | void onSubmit(TextFieldViewModel textFieldViewModel); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/FocusChangeMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public interface FocusChangeMessage extends Message { 4 | 5 | boolean isFocused(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/FocusManager.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public interface FocusManager { 4 | 5 | void setFocused(MessageHandler messageHandler, MessageContext context); 6 | 7 | void messageFocused(MessageContext context, Message message); 8 | 9 | void clearFocus(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/Message.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public interface Message { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/MessageContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.animation.AnimationContext; 4 | 5 | public interface MessageContext { 6 | 7 | FocusManager getFocusManager(); 8 | 9 | FocusManager getSloppyFocusManager(); 10 | 11 | AnimationContext getAnimationContext(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/MessageHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public interface MessageHandler { 4 | 5 | MessageResponse onMessage(MessageContext context, Message message); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/MessageResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public interface MessageResponse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/message/NoopMessageHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.message; 2 | 3 | public class NoopMessageHandler implements MessageHandler { 4 | 5 | @Override 6 | public MessageResponse onMessage(MessageContext messageContext, Message message) { 7 | return null; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/tree/basics/ContainerComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.tree.basics; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.basics.imp.ContainerComponentImp; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public interface ContainerComponent extends Component { 7 | 8 | public static ContainerComponent create() { 9 | return new ContainerComponentImp(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/tree/basics/TextComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.tree.basics; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.basics.imp.TextComponentImp; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public interface TextComponent extends Component { 7 | 8 | TextComponent text(String text); 9 | 10 | String getText(); 11 | 12 | public static TextComponent create() { 13 | return new TextComponentImp(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/tree/basics/imp/ContainerComponentImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.tree.basics.imp; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.basics.ContainerComponent; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public class ContainerComponentImp extends BaseComponent implements ContainerComponent { 7 | 8 | @Override 9 | public Class getPrimaryType() { 10 | return ContainerComponent.class; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/tree/core/Component.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.tree.core; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool; 5 | 6 | public interface Component extends UINode { 7 | 8 | Class getPrimaryType(); 9 | 10 | Component directive(Directive directive); 11 | 12 | DirectivePool getStyleDirectives(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/gui/tree/core/UINode.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.gui.tree.core; 2 | 3 | public interface UINode { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/model/textfield/TextFieldModelListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.model.textfield; 2 | 3 | public interface TextFieldModelListener { 4 | 5 | void onStateChanged(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/Screen.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core; 2 | 3 | public interface Screen { 4 | 5 | void setScreenContent(ScreenContent content); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/Window.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core; 2 | 3 | public interface Window { 4 | 5 | Screen getScreen(); 6 | 7 | void close(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/ScreenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event; 2 | 3 | public interface ScreenEvent { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/keyboard/CharScreenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.keyboard; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.event.ScreenEvent; 4 | 5 | public interface CharScreenEvent extends ScreenEvent { 6 | 7 | int getCodepoint(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/keyboard/KeyScreenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.keyboard; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.event.ScreenEvent; 4 | 5 | public interface KeyScreenEvent extends ScreenEvent { 6 | 7 | String getName(); 8 | 9 | int getAction(); 10 | 11 | int getCode(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/mouse/MouseConstants.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.mouse; 2 | 3 | public final class MouseConstants { 4 | 5 | public static final int LEFT_BUTTON = 1; 6 | public static final int RIGHT_BUTTON = 2; 7 | 8 | public static final int PRESS = 1; 9 | public static final int RELEASE = 2; 10 | public static final int DRAG = 3; 11 | public static final int MOVE = 4; 12 | 13 | private MouseConstants() {} 14 | 15 | } -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/mouse/MouseListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.mouse; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.event.MouseEvent; 4 | 5 | public interface MouseListener { 6 | 7 | void accept(MouseEvent e); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/mouse/MouseScreenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.mouse; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsolutePosition; 4 | import com.github.webicitybrowser.thready.windowing.core.event.ScreenEvent; 5 | 6 | public interface MouseScreenEvent extends ScreenEvent { 7 | 8 | int getAction(); 9 | 10 | int getButton(); 11 | 12 | boolean isExternal(); 13 | 14 | AbsolutePosition getViewportPosition(); 15 | 16 | AbsolutePosition getScreenPosition(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/core/event/mouse/ScrollScreenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.core.event.mouse; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.event.ScreenEvent; 4 | 5 | public interface ScrollScreenEvent extends ScreenEvent { 6 | 7 | float getScrollX(); 8 | 9 | float getScrollY(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/SkijaRootCanvas2D.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija; 2 | 3 | import com.github.webicitybrowser.thready.drawing.core.Canvas2D; 4 | 5 | public interface SkijaRootCanvas2D extends Canvas2D { 6 | 7 | void flush(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/SkijaScreen.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.Screen; 4 | 5 | public interface SkijaScreen extends Screen { 6 | 7 | void tick(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/SkijaWindow.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.DesktopWindow; 4 | 5 | public interface SkijaWindow extends DesktopWindow { 6 | 7 | SkijaScreen getScreen(); 8 | 9 | boolean closed(); 10 | 11 | void tick(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/SkijaWindowingThread.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija; 2 | 3 | import java.util.function.Consumer; 4 | 5 | import com.github.webicitybrowser.thready.gui.graphical.animation.InvalidationScheduler; 6 | import com.github.webicitybrowser.thready.windowing.core.Window; 7 | 8 | public interface SkijaWindowingThread { 9 | 10 | void createWindow(Consumer callback); 11 | 12 | InvalidationScheduler getInvalidationScheduler(); 13 | 14 | void startRenderLoop(Runnable tickHandler); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/imp/SkijaCanvasSettings.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija.imp; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsolutePosition; 4 | import com.github.webicitybrowser.thready.dimensions.Rectangle; 5 | 6 | public record SkijaCanvasSettings(AbsolutePosition offset, Rectangle clipBounds, AbsolutePosition translation) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Thready/src/main/java/com/github/webicitybrowser/thready/windowing/skija/imp/SkijaEventListeners.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.thready.windowing.skija.imp; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.ScreenContent; 4 | 5 | public final class SkijaEventListeners { 6 | 7 | private SkijaEventListeners() {} 8 | 9 | public static void setupEventListeners(long windowId, ScreenContent screenContent) { 10 | SkijaMouseEventListeners.setupEventListeners(windowId, screenContent); 11 | SkijaKeyboardEventListeners.setupEventListeners(windowId, screenContent); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ThreadyWeb/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } 4 | 5 | dependencies { 6 | api project(':Thready') 7 | implementation project(':Spec') 8 | api project(':Codecs') 9 | } -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/context/WebComponentContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.context; 2 | 3 | public interface WebComponentContext { 4 | 5 | T getContext(Class contextCls); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/context/image/ImageState.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.context.image; 2 | 3 | public interface ImageState { 4 | 5 | ImageRequest getCurrentRequest(); 6 | 7 | ImageRequest getPendingRequest(); 8 | 9 | void setCurrentRequest(ImageRequest request); 10 | 11 | void setPendingRequest(ImageRequest request); 12 | 13 | void onImageStateUpdate(Runnable callback); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/BoxSizingDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface BoxSizingDirective extends Directive { 6 | 7 | BoxSizing getValue(); 8 | 9 | @Override 10 | default Class getPrimaryType() { 11 | return BoxSizingDirective.class; 12 | } 13 | 14 | static BoxSizingDirective of(BoxSizing value) { 15 | return () -> value; 16 | } 17 | 18 | enum BoxSizing { 19 | CONTENT_BOX, BORDER_BOX; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/ClearDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.threadyweb.graphical.value.ClearDirection; 5 | 6 | public interface ClearDirective extends Directive { 7 | 8 | ClearDirection getClearDirection(); 9 | 10 | @Override 11 | default Class getPrimaryType() { 12 | return ClearDirective.class; 13 | } 14 | 15 | static ClearDirective of(ClearDirection clearDirection) { 16 | return () -> clearDirection; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/FloatDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.threadyweb.graphical.value.FloatDirection; 5 | 6 | public interface FloatDirective extends Directive { 7 | 8 | FloatDirection getFloatDirection(); 9 | 10 | @Override 11 | default Class getPrimaryType() { 12 | return FloatDirective.class; 13 | } 14 | 15 | static FloatDirective of(FloatDirection floatDirection) { 16 | return () -> floatDirection; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/InnerDisplayDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.threadyweb.graphical.value.InnerDisplay; 5 | 6 | public interface InnerDisplayDirective extends Directive { 7 | 8 | InnerDisplay getInnerDisplay(); 9 | 10 | @Override 11 | default Class getPrimaryType() { 12 | return InnerDisplayDirective.class; 13 | } 14 | 15 | static InnerDisplayDirective of(InnerDisplay display) { 16 | return () -> display; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/derived/DerivedFontDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.derived; 2 | 3 | import com.github.webicitybrowser.thready.drawing.core.text.Font2D; 4 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 5 | 6 | public interface DerivedFontDirective extends Directive { 7 | 8 | Font2D getFont(); 9 | 10 | @Override 11 | default Class getPrimaryType() { 12 | return DerivedFontDirective.class; 13 | } 14 | 15 | static DerivedFontDirective of(Font2D value) { 16 | return () -> value; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/layout/common/size/SizeCalculationDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.layout.common.size; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | import com.github.webicitybrowser.threadyweb.graphical.value.SizeCalculation; 5 | 6 | public interface SizeCalculationDirective extends Directive { 7 | 8 | SizeCalculation getSizeCalculation(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/layout/flexbox/FlexGrowDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.layout.flexbox; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface FlexGrowDirective extends Directive { 6 | 7 | float getFlexGrow(); 8 | 9 | @Override 10 | default Class getPrimaryType() { 11 | return FlexGrowDirective.class; 12 | } 13 | 14 | static FlexGrowDirective of(float flexGrow) { 15 | return () -> flexGrow; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/layout/flexbox/FlexShrinkDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.layout.flexbox; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface FlexShrinkDirective extends Directive { 6 | 7 | float getFlexShrink(); 8 | 9 | @Override 10 | default Class getPrimaryType() { 11 | return FlexShrinkDirective.class; 12 | } 13 | 14 | static FlexShrinkDirective of(float flexShrink) { 15 | return () -> flexShrink; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/layout/flexbox/FlexWrapDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.layout.flexbox; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface FlexWrapDirective extends Directive { 6 | 7 | FlexWrap getFlexWrap(); 8 | 9 | @Override 10 | default Class getPrimaryType() { 11 | return FlexWrapDirective.class; 12 | } 13 | 14 | static FlexWrapDirective of(FlexWrap flexWrap) { 15 | return () -> flexWrap; 16 | } 17 | 18 | enum FlexWrap { 19 | NOWRAP, WRAP, WRAP_REVERSE 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/directive/text/LineBreakDirective.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.directive.text; 2 | 3 | import com.github.webicitybrowser.thready.gui.directive.core.Directive; 4 | 5 | public interface LineBreakDirective extends Directive { 6 | 7 | LineBreak getLineBreak(); 8 | 9 | @Override 10 | default Class getPrimaryType() { 11 | return LineBreakDirective.class; 12 | } 13 | 14 | static LineBreakDirective of(LineBreak wordBreak) { 15 | return () -> wordBreak; 16 | } 17 | 18 | static enum LineBreak { 19 | AUTO, LOOSE, NORMAL, STRICT, ANYWHERE 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flow/FlowRootContextSwitch.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.layout.flow; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.ContextSwitch; 4 | import com.github.webicitybrowser.threadyweb.graphical.layout.flow.floatbox.FloatContext; 5 | 6 | public record FlowRootContextSwitch(FloatContext floatContext) implements ContextSwitch { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flow/context/block/FlowBlockChildRenderResult.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.layout.flow.context.block; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteSize; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.RenderedUnit; 5 | 6 | public record FlowBlockChildRenderResult(RenderedUnit unit, AbsoluteSize adjustedSize) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flow/context/block/FlowBlockPrerenderSizingInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.layout.flow.context.block; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteSize; 4 | import com.github.webicitybrowser.threadyweb.graphical.layout.util.LayoutSizeUtils.LayoutSizingContext; 5 | 6 | public record FlowBlockPrerenderSizingInfo( 7 | AbsoluteSize forcedChildContentSize, AbsoluteSize preferredChildContentSize, AbsoluteSize parentSize, LayoutSizingContext sizingContext 8 | ) {} 9 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flow/context/inline/LineDimension.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.layout.flow.context.inline; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsoluteDimensions; 4 | 5 | public record LineDimension(float run, float depth, LineDirection direction) implements AbsoluteDimensions { 6 | 7 | @Override 8 | public float xComponent() { 9 | return run; 10 | } 11 | 12 | @Override 13 | public float yComponent() { 14 | return depth; 15 | } 16 | 17 | public static enum LineDirection { 18 | LTR, RTL, TTB, BTT 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/lookandfeel/weblaf/stage/render/unit/StyledUnitGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.lookandfeel.weblaf.stage.render.unit; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.RenderedUnit; 4 | 5 | public interface StyledUnitGenerator { 6 | 7 | RenderedUnit generateStyledUnit(StyledUnitContext context); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/lookandfeel/weblaf/ui/element/ElementBox.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.lookandfeel.weblaf.ui.element; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.layout.core.SolidLayoutManager; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.ChildrenBox; 5 | 6 | public interface ElementBox extends ChildrenBox { 7 | 8 | SolidLayoutManager layout(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/lookandfeel/weblaf/ui/element/ElementPainter.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.lookandfeel.weblaf.ui.element; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint.GlobalPaintContext; 4 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.paint.LocalPaintContext; 5 | 6 | public final class ElementPainter { 7 | 8 | private ElementPainter() {} 9 | 10 | public static void paint(ElementUnit unit, GlobalPaintContext globalPaintContext, LocalPaintContext localPaintContext) {} 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/lookandfeel/weblaf/ui/image/ImageUnit.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.lookandfeel.weblaf.ui.image; 2 | 3 | import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.unit.RenderedUnit; 4 | 5 | public interface ImageUnit extends RenderedUnit { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/ClearDirection.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum ClearDirection { 4 | BOTH, LEFT, RIGHT, NONE 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/FloatDirection.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum FloatDirection { 4 | LEFT, RIGHT, NONE 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/InnerDisplay.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum InnerDisplay { 4 | FLOW, FLOW_ROOT, FLEX 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/OuterDisplay.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum OuterDisplay { 4 | BLOCK, INLINE, NONE, CONTENTS 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/PositionType.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum PositionType { 4 | STATIC, RELATIVE, ABSOLUTE, STICKY, FIXED 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/WhiteSpaceCollapse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value; 2 | 3 | public enum WhiteSpaceCollapse { 4 | COLLAPSE, DISCARD, PRESERVE, PRESERVE_BREAKS, PRESERVE_SPACES, BREAK_SPACES 5 | } 6 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/value/math/MathCalculation.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.graphical.value.math; 2 | 3 | import java.util.function.Function; 4 | 5 | public interface MathCalculation { 6 | 7 | // TODO: What if we want non-float types? 8 | float evaluate(Function transformer); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/tree/BreakComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.tree; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Element; 4 | import com.github.webicitybrowser.threadyweb.context.WebComponentContext; 5 | import com.github.webicitybrowser.threadyweb.tree.imp.BreakComponentImp; 6 | 7 | public interface BreakComponent extends ElementComponent { 8 | 9 | public static BreakComponent create(Element element, WebComponentContext componentContext) { 10 | return new BreakComponentImp(element, componentContext); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/tree/TextComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.tree; 2 | 3 | public interface TextComponent extends WebComponent { 4 | 5 | String getText(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/tree/WebComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.tree; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Node; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public interface WebComponent extends Component { 7 | 8 | Node getNode(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/tree/image/ImageStatus.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.threadyweb.tree.image; 2 | 3 | import com.github.webicitybrowser.codec.image.ImageData; 4 | 5 | public record ImageStatus(boolean canImageBeShown, ImageData imageData, String imageAltText) { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Webicity/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | } 4 | 5 | dependencies { 6 | implementation project(':ThreadyWeb') 7 | implementation project(':SpiderHTML') 8 | api project(':Spec') 9 | } -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/AssetLoader.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core; 2 | 3 | import java.io.IOException; 4 | import java.io.Reader; 5 | 6 | public interface AssetLoader { 7 | 8 | Reader streamAsset(String assetType, String assetName) throws IOException; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/image/ImageCodecRegistry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.image; 2 | 3 | import com.github.webicitybrowser.codec.image.ImageCodec; 4 | 5 | public interface ImageCodecRegistry { 6 | 7 | void registerImageLoader(ImageCodec imageLoader); 8 | 9 | ImageCodec getImageLoaderForType(String type); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/Connection.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | import java.io.InputStream; 4 | 5 | import com.github.webicitybrowser.spec.url.URL; 6 | 7 | public interface Connection { 8 | 9 | InputStream getInputStream(); 10 | 11 | String getContentType(); 12 | 13 | URL getURL(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/Protocol.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | import java.io.IOException; 4 | 5 | import com.github.webicitybrowser.spec.url.URL; 6 | 7 | public interface Protocol { 8 | 9 | String[] getSchemes(); 10 | 11 | Connection openConnection(URL url, ProtocolContext context) throws IOException; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/ProtocolConnectionResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | public interface ProtocolConnectionResponse extends ProtocolResponse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/ProtocolContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | public record ProtocolContext(String action, ProtocolRedirectHandler redirectHandler) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/ProtocolRedirectHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public interface ProtocolRedirectHandler { 6 | 7 | boolean onRedirectRequest(URL redirectURL); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/ProtocolRegistry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | import java.util.Optional; 4 | 5 | import com.github.webicitybrowser.spec.url.URL; 6 | 7 | public interface ProtocolRegistry { 8 | 9 | void registerProtocol(Protocol protocol); 10 | 11 | Optional getProtocolForURL(URL url); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/net/ProtocolResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.net; 2 | 3 | public interface ProtocolResponse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/ExceptionRendererCrashReason.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | public class ExceptionRendererCrashReason implements RendererCrashReason { 4 | 5 | private final Exception exception; 6 | 7 | public ExceptionRendererCrashReason(Exception exception) { 8 | this.exception = exception; 9 | } 10 | 11 | @Override 12 | public String getTitle() { 13 | return "EXCEPTION_OCCURED"; 14 | } 15 | 16 | public Exception getException() { 17 | return this.exception; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/GenericRendererCrashReason.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | public class GenericRendererCrashReason implements RendererCrashReason { 4 | 5 | private final String title; 6 | 7 | public GenericRendererCrashReason(String title) { 8 | this.title = title; 9 | } 10 | 11 | @Override 12 | public String getTitle() { 13 | return this.title; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererBackend.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | public interface RendererBackend { 4 | 5 | String getTitle(); 6 | 7 | void tick(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererBackendFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | import com.github.webicitybrowser.spec.fetch.FetchResponse; 4 | 5 | public interface RendererBackendFactory { 6 | 7 | RendererBackend create(RendererContext context, FetchResponse response) throws Exception; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererBackendRegistry.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | import java.util.Optional; 4 | 5 | public interface RendererBackendRegistry { 6 | 7 | Optional getBackendFactory(String contentType); 8 | 9 | void registerBackendFactory(String contentType, RendererBackendFactory factory); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | import com.github.webicitybrowser.webicity.core.RenderingEngine; 5 | 6 | public interface RendererContext { 7 | 8 | RenderingEngine getRenderingEngine(); 9 | 10 | URL getCurrentDocumentURL(); 11 | 12 | void crash(RendererCrashReason reason) throws RendererCrashException; 13 | 14 | void crash(Exception exception) throws RendererCrashException; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererCrashReason.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | public interface RendererCrashReason { 4 | 5 | String getTitle(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererFrontend.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | public interface RendererFrontend { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/RendererHandle.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer; 2 | 3 | import java.util.Optional; 4 | 5 | public interface RendererHandle { 6 | 7 | Optional getRenderer(); 8 | 9 | Optional getCrashReason(); 10 | 11 | void crash(RendererCrashReason crashReason); 12 | 13 | void tick(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/renderer/imp/ParallelContextImp.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.renderer.imp; 2 | 3 | import java.util.concurrent.Executor; 4 | import java.util.concurrent.Executors; 5 | 6 | import com.github.webicitybrowser.spec.htmlbrowsers.ParallelContext; 7 | 8 | public class ParallelContextImp implements ParallelContext { 9 | 10 | private final Executor executor = Executors.newCachedThreadPool(); 11 | 12 | @Override 13 | public void inParallel(Runnable runnable) { 14 | executor.execute(runnable); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/core/ui/FrameEventListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.core.ui; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | import com.github.webicitybrowser.webicity.core.renderer.RendererHandle; 5 | import com.github.webicitybrowser.webicity.event.EventListener; 6 | 7 | public interface FrameEventListener extends EventListener { 8 | 9 | default void onURLChange(URL url) {}; 10 | 11 | default void onRendererChange(RendererHandle rendererHandle) {}; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/event/EventDispatcher.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.event; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public interface EventDispatcher { 6 | 7 | void addListener(T listener); 8 | 9 | void removeListener(T listener); 10 | 11 | void fire(Consumer eventFunc); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/event/EventListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.event; 2 | 3 | public interface EventListener { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/HTMLRendererContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html; 2 | 3 | import com.github.webicitybrowser.spec.htmlbrowsers.tasks.EventLoop; 4 | import com.github.webicitybrowser.webicity.core.renderer.RendererContext; 5 | 6 | public record HTMLRendererContext(RendererContext rendererContext, EventLoop eventLoop) { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/TagActions.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html; 2 | 3 | import com.github.webicitybrowser.webicity.renderer.backend.html.tags.TagAction; 4 | 5 | public interface TagActions { 6 | 7 | void registerTagAction(String tagName, TagAction action); 8 | 9 | TagAction getAction(String tagName); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/cssom/CSSOMParticipantTraverser.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.cssom; 2 | 3 | import java.util.Collection; 4 | 5 | public interface CSSOMParticipantTraverser { 6 | 7 | T[] getChildren(T participant); 8 | 9 | T getParent(T participant); 10 | 11 | Collection> getMatchingNodes(T participant); 12 | 13 | void addMatchingNode(T participant, CSSOMNode baseNode); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/cssom/CSSOMTraverseContext.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.cssom; 2 | 3 | import java.util.BitSet; 4 | import java.util.List; 5 | import java.util.Map; 6 | 7 | public record CSSOMTraverseContext( 8 | CSSOMParticipantTraverser traverser, 9 | List allParticipants, 10 | List allParticipantsEnds, 11 | Map participantIds, 12 | BitSet allParticipantsBitSet, 13 | Map typeMap, 14 | Map idMap, 15 | Map classMap 16 | ) {} -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/cssom/CSSOMTraverseContextGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.cssom; 2 | 3 | import com.github.webicitybrowser.webicity.renderer.backend.html.cssom.imp.CSSOMTraverseContextGeneratorImp; 4 | 5 | public interface CSSOMTraverseContextGenerator { 6 | 7 | CSSOMTraverseContext apply(T participant, CSSOMParticipantTraverser traverser); 8 | 9 | public static CSSOMTraverseContextGenerator create() { 10 | return new CSSOMTraverseContextGeneratorImp<>(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/cssom/CSSOMTree.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.cssom; 2 | 3 | import com.github.webicitybrowser.webicity.renderer.backend.html.cssom.imp.CSSOMTreeImp; 4 | 5 | public interface CSSOMTree { 6 | 7 | void apply(CSSOMTraverseContext traverseContext); 8 | 9 | public static CSSOMTree create(CSSOMNode rootNode) { 10 | return new CSSOMTreeImp(rootNode); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/stylesheetactions/LinkAction.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.stylesheetactions; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Element; 4 | import com.github.webicitybrowser.spec.fetch.FetchResponse; 5 | 6 | public interface LinkAction { 7 | 8 | void processThisTypeOfLinkedResource(Element el, boolean success, FetchResponse response, byte[] bodyBytes); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/stylesheetactions/NoLinkAction.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.stylesheetactions; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Element; 4 | import com.github.webicitybrowser.spec.fetch.FetchResponse; 5 | 6 | public class NoLinkAction implements LinkAction { 7 | 8 | @Override 9 | public void processThisTypeOfLinkedResource(Element el, boolean success, FetchResponse response, byte[] bodyBytes) { 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/tags/TagAction.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.tags; 2 | 3 | import com.github.webicitybrowser.spec.dom.node.Element; 4 | 5 | 6 | public interface TagAction { 7 | 8 | default void onTagParsed(Element element) { 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/tasks/EventScheduler.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.tasks; 2 | 3 | public interface EventScheduler { 4 | 5 | void tick(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/tasks/TaskQueueTaskDestination.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.tasks; 2 | 3 | import com.github.webicitybrowser.spec.fetch.taskdestination.TaskDestination; 4 | import com.github.webicitybrowser.spec.htmlbrowsers.tasks.TaskQueue; 5 | 6 | public class TaskQueueTaskDestination implements TaskDestination { 7 | 8 | private final TaskQueue taskQueue; 9 | 10 | public TaskQueueTaskDestination(TaskQueue taskQueue) { 11 | this.taskQueue = taskQueue; 12 | } 13 | 14 | @Override 15 | public void enqueue(Runnable task) { 16 | taskQueue.enqueue(task); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/backend/html/tasks/TaskRunner.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.backend.html.tasks; 2 | 3 | public interface TaskRunner { 4 | 5 | void tick(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Webicity/src/main/java/com/github/webicitybrowser/webicity/renderer/frontend/thready/core/ThreadyRendererFrontend.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicity.renderer.frontend.thready.core; 2 | 3 | import com.github.webicitybrowser.thready.windowing.core.ScreenContent; 4 | import com.github.webicitybrowser.webicity.core.renderer.RendererFrontend; 5 | 6 | public interface ThreadyRendererFrontend extends RendererFrontend { 7 | 8 | ScreenContent getContent(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /WebicityBrowser/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'application' 3 | } 4 | 5 | dependencies { 6 | implementation project(':Webicity') 7 | implementation project(':Thready') 8 | implementation project(':GetOpts') 9 | implementation project(':Codecs') 10 | 11 | implementation 'com.github.marianobarrios:tls-channel:0.9.0' 12 | implementation 'com.google.code.gson:gson:2.11.0' 13 | } 14 | 15 | mainClassName = "com.github.webicitybrowser.webicitybrowser.Main" 16 | 17 | jar { 18 | manifest { 19 | attributes( 20 | "Main-Class": mainClassName, 21 | "Multi-Release": "true" 22 | ) 23 | } 24 | } -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/BrowserInstance.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser; 2 | 3 | import com.github.webicitybrowser.webicity.core.RenderingEngine; 4 | 5 | public interface BrowserInstance { 6 | 7 | RenderingEngine getRenderingEngine(); 8 | 9 | void tick(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/WebicityArguments.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | 5 | public interface WebicityArguments { 6 | 7 | URL[] getURLs(); 8 | 9 | boolean getVerbose(); 10 | 11 | boolean getPrivate(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/component/MenuButtonComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.component; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.basics.imp.BaseComponent; 4 | import com.github.webicitybrowser.thready.gui.tree.core.Component; 5 | 6 | public class MenuButtonComponent extends BaseComponent { 7 | 8 | @Override 9 | public Class getPrimaryType() { 10 | return MenuButtonComponent.class; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/Styling.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui; 2 | 3 | public final class Styling { 4 | 5 | private Styling() {} 6 | 7 | public static final int BUTTON_WIDTH = 22; 8 | public static final int BORDER_PADDING = 8; 9 | public static final int ELEMENT_PADDING = 8; 10 | 11 | public static final String PRODUCT_NAME = "Webicity"; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/binding/component/tab/TabDisplayComponent.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui.binding.component.tab; 2 | 3 | import com.github.webicitybrowser.thready.gui.tree.basics.imp.ContainerComponentImp; 4 | 5 | public abstract class TabDisplayComponent extends ContainerComponentImp { 6 | 7 | public abstract String getName(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/binding/component/tab/TabSystemConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui.binding.component.tab; 2 | 3 | import com.github.webicitybrowser.webicitybrowser.gui.colors.ColorPalette; 4 | import com.github.webicitybrowser.webicitybrowser.ui.Tab; 5 | 6 | public interface TabSystemConfiguration { 7 | 8 | ColorPalette getColors(); 9 | 10 | TabDisplayComponent createTabDisplay(Tab tab); 11 | 12 | Tab createTab(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/colors/ColorPalette.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui.colors; 2 | 3 | import com.github.webicitybrowser.thready.color.format.ColorFormat; 4 | 5 | public interface ColorPalette { 6 | 7 | ColorFormat getBackgroundPrimary(); 8 | 9 | ColorFormat getBackgroundSecondary(); 10 | 11 | ColorFormat getBackgroundSecondaryHover(); 12 | 13 | ColorFormat getBackgroundSecondarySelected(); 14 | 15 | ColorFormat getBackgroundSecondaryActive(); 16 | 17 | ColorFormat getBackgroundSecondaryDanger(); 18 | 19 | ColorFormat getForegroundPrimary(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/ui/tab/TabButtonState.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui.ui.tab; 2 | 3 | public class TabButtonState { 4 | 5 | private boolean isXHovered; 6 | private boolean isXHeld; 7 | 8 | public boolean isXHovered() { 9 | return isXHovered; 10 | } 11 | 12 | public void setXHovered(boolean hovered) { 13 | this.isXHovered = hovered; 14 | } 15 | 16 | public boolean isXHeld() { 17 | return isXHeld; 18 | } 19 | 20 | public void setXHeld(boolean b) { 21 | this.isXHeld = b; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/gui/window/GUIWindow.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.gui.window; 2 | 3 | import com.github.webicitybrowser.thready.dimensions.AbsolutePosition; 4 | 5 | public interface GUIWindow { 6 | 7 | void addCloseListener(Runnable handler); 8 | 9 | void minimize(); 10 | 11 | void restore(); 12 | 13 | void close(); 14 | 15 | void setPosition(AbsolutePosition newWindowPosition); 16 | 17 | AbsolutePosition getPosition(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/loader/TypedAssetLoader.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.loader; 2 | 3 | import java.io.IOException; 4 | import java.io.Reader; 5 | 6 | public interface TypedAssetLoader { 7 | 8 | Reader streamAsset(String assetName) throws IOException; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/ui/event/TabMutationEventListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.ui.event; 2 | 3 | import com.github.webicitybrowser.spec.url.URL; 4 | import com.github.webicitybrowser.webicity.event.EventListener; 5 | import com.github.webicitybrowser.webicitybrowser.ui.Tab; 6 | 7 | public interface TabMutationEventListener extends EventListener { 8 | 9 | default void onNavigate(Tab tab, URL url) {} 10 | 11 | default void onTitleChange(Tab tab, String name) {} 12 | 13 | default void onClose(Tab tab) {}; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/ui/event/WindowMutationEventListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.ui.event; 2 | 3 | import com.github.webicitybrowser.webicity.event.EventListener; 4 | import com.github.webicitybrowser.webicitybrowser.ui.Tab; 5 | import com.github.webicitybrowser.webicitybrowser.ui.Window; 6 | 7 | public interface WindowMutationEventListener extends EventListener { 8 | 9 | default void onTabAdded(Window window, Tab tab) {} 10 | 11 | default void onClose(Window window) {} 12 | 13 | } 14 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/java/com/github/webicitybrowser/webicitybrowser/ui/event/WindowSetMutationEventListener.java: -------------------------------------------------------------------------------- 1 | package com.github.webicitybrowser.webicitybrowser.ui.event; 2 | 3 | import com.github.webicitybrowser.webicity.event.EventListener; 4 | import com.github.webicitybrowser.webicitybrowser.ui.Window; 5 | import com.github.webicitybrowser.webicitybrowser.ui.WindowSet; 6 | 7 | public interface WindowSetMutationEventListener extends EventListener { 8 | 9 | default void onWindowAdded(WindowSet windowSet, Window window) {} 10 | 11 | default void onClose(WindowSet windowSet) {} 12 | 13 | } 14 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/backward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/backward.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/forward.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/maximize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/maximize.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/microphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/microphone.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/minimize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/minimize.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/newtab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/newtab.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/reload.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/restore.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/icons/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/icons/stop.png -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Open Sans", "Roboto", "Helvetica Neue", "Arial", sans-serif; 3 | --text-color: #00b298; 4 | } 5 | .vpsize { 6 | width: 100vw; 7 | height: 75vh; 8 | } 9 | .hzcenter { 10 | margin: auto; 11 | } 12 | .webicity-name { 13 | color: var(--text-color); 14 | font-size: 3em; 15 | } 16 | .valign { 17 | display: flex; 18 | flex-direction: column; 19 | justify-content: center; 20 | } 21 | .about { 22 | margin-left: 10%; 23 | margin-right: 10%; 24 | } 25 | -------------------------------------------------------------------------------- /WebicityBrowser/src/main/resources/webicity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/WebicityBrowser/src/main/resources/webicity.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.github.johnrengelman.shadow' version '8.1.1' 3 | id 'jacoco' 4 | } 5 | 6 | subprojects { 7 | apply plugin: 'com.github.johnrengelman.shadow' 8 | apply plugin: 'java' 9 | apply plugin: 'jacoco' 10 | 11 | repositories { 12 | mavenCentral() 13 | } 14 | 15 | dependencies { 16 | implementation 'com.github.taucher2003:t2003-logger-impl:1.0.2' 17 | implementation 'com.github.taucher2003:t2003-logger-binder:1.0.2' 18 | 19 | testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0' 20 | testImplementation 'org.mockito:mockito-core:5.12.0' 21 | } 22 | 23 | test { 24 | useJUnitPlatform() 25 | } 26 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | netbeans.hint.jdkPlatform=JDK_18 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebicityBrowser/Webicity/2cacf1f6a04cfa95acdc6673e8470711bb4a051d/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Webicity' 2 | include ':Webicity', ':WebicityBrowser', ':ThreadyWeb', ':Thready', ':SpiderHTML', ':Spec', ':GetOpts', ':Codecs', ':EcmaSpiral' --------------------------------------------------------------------------------