diff --git a/devel/osx/mycss.xcodeproj/project.pbxproj b/devel/osx/mycss.xcodeproj/project.pbxproj deleted file mode 100644 index 9dadd85..0000000 --- a/devel/osx/mycss.xcodeproj/project.pbxproj +++ /dev/null @@ -1,356 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0E068D301CDBC71F0062DC68 /* mystring.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E068D2E1CDBC71F0062DC68 /* mystring.c */; }; - 0E13BA1F1CE4F32400D7FC06 /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E13BA1D1CE4F32400D7FC06 /* convert.c */; }; - 0E8458A11CD9377400246CFD /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458A01CD9377400246CFD /* main.c */; }; - 0E8458B91CD937C200246CFD /* check.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458A81CD937C200246CFD /* check.c */; }; - 0E8458BA1CD937C200246CFD /* entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458AA1CD937C200246CFD /* entry.c */; }; - 0E8458BC1CD937C200246CFD /* mycss.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458AD1CD937C200246CFD /* mycss.c */; }; - 0E8458BD1CD937C200246CFD /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458B01CD937C200246CFD /* parser.c */; }; - 0E8458BE1CD937C200246CFD /* tokenizer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458B21CD937C200246CFD /* tokenizer.c */; }; - 0E8458BF1CD937C200246CFD /* tokenizer_end.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458B41CD937C200246CFD /* tokenizer_end.c */; }; - 0E8458C01CD937C200246CFD /* tokenizer_global.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E8458B61CD937C200246CFD /* tokenizer_global.c */; }; - 0EBEF8F81CF5B0F600A70AD1 /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EBEF8F61CF5B0F600A70AD1 /* parser.c */; }; - 0EBEF8FB1CF5B1D100A70AD1 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EBEF8F91CF5B1D100A70AD1 /* state.c */; }; - 0EBEF8FF1CF5B74600A70AD1 /* selectors.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EBEF8FD1CF5B74600A70AD1 /* selectors.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 0E84589B1CD9377400246CFD /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0E068D2E1CDBC71F0062DC68 /* mystring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mystring.c; sourceTree = ""; }; - 0E068D2F1CDBC71F0062DC68 /* mystring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mystring.h; sourceTree = ""; }; - 0E13BA1D1CE4F32400D7FC06 /* convert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = convert.c; sourceTree = ""; }; - 0E13BA1E1CE4F32400D7FC06 /* convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; - 0E84589D1CD9377400246CFD /* mycss */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mycss; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E8458A01CD9377400246CFD /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; - 0E8458A81CD937C200246CFD /* check.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = check.c; sourceTree = ""; }; - 0E8458A91CD937C200246CFD /* check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; - 0E8458AA1CD937C200246CFD /* entry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = entry.c; sourceTree = ""; }; - 0E8458AB1CD937C200246CFD /* entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = entry.h; sourceTree = ""; }; - 0E8458AD1CD937C200246CFD /* mycss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mycss.c; sourceTree = ""; }; - 0E8458AE1CD937C200246CFD /* mycss.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mycss.h; sourceTree = ""; }; - 0E8458AF1CD937C200246CFD /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = myosi.h; sourceTree = ""; }; - 0E8458B01CD937C200246CFD /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parser.c; sourceTree = ""; }; - 0E8458B11CD937C200246CFD /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; - 0E8458B21CD937C200246CFD /* tokenizer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tokenizer.c; sourceTree = ""; }; - 0E8458B31CD937C200246CFD /* tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenizer.h; sourceTree = ""; }; - 0E8458B41CD937C200246CFD /* tokenizer_end.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tokenizer_end.c; sourceTree = ""; }; - 0E8458B51CD937C200246CFD /* tokenizer_end.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenizer_end.h; sourceTree = ""; }; - 0E8458B61CD937C200246CFD /* tokenizer_global.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tokenizer_global.c; sourceTree = ""; }; - 0E8458B71CD937C200246CFD /* tokenizer_global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenizer_global.h; sourceTree = ""; }; - 0E8458B81CD937C200246CFD /* tokenizer_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenizer_resource.h; sourceTree = ""; }; - 0E8458C11CD93C2A00246CFD /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = ""; }; - 0EBEF8F61CF5B0F600A70AD1 /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parser.c; sourceTree = ""; }; - 0EBEF8F71CF5B0F600A70AD1 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; - 0EBEF8F91CF5B1D100A70AD1 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = state.c; sourceTree = ""; }; - 0EBEF8FA1CF5B1D100A70AD1 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = state.h; sourceTree = ""; }; - 0EBEF8FD1CF5B74600A70AD1 /* selectors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = selectors.c; sourceTree = ""; }; - 0EBEF8FE1CF5B74600A70AD1 /* selectors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = selectors.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0E84589A1CD9377400246CFD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0E8458941CD9377400246CFD = { - isa = PBXGroup; - children = ( - 0E84589F1CD9377400246CFD /* main */, - 0E8458A71CD937C200246CFD /* mycss */, - 0E84589E1CD9377400246CFD /* Products */, - ); - sourceTree = ""; - }; - 0E84589E1CD9377400246CFD /* Products */ = { - isa = PBXGroup; - children = ( - 0E84589D1CD9377400246CFD /* mycss */, - ); - name = Products; - sourceTree = ""; - }; - 0E84589F1CD9377400246CFD /* main */ = { - isa = PBXGroup; - children = ( - 0E8458A01CD9377400246CFD /* main.c */, - ); - name = main; - path = mycss; - sourceTree = ""; - }; - 0E8458A71CD937C200246CFD /* mycss */ = { - isa = PBXGroup; - children = ( - 0E8458C11CD93C2A00246CFD /* api.h */, - 0E8458AF1CD937C200246CFD /* myosi.h */, - 0E8458AE1CD937C200246CFD /* mycss.h */, - 0E8458AD1CD937C200246CFD /* mycss.c */, - 0E8458AB1CD937C200246CFD /* entry.h */, - 0E8458AA1CD937C200246CFD /* entry.c */, - 0E8458B11CD937C200246CFD /* parser.h */, - 0E8458B01CD937C200246CFD /* parser.c */, - 0E068D2F1CDBC71F0062DC68 /* mystring.h */, - 0E068D2E1CDBC71F0062DC68 /* mystring.c */, - 0E8458B31CD937C200246CFD /* tokenizer.h */, - 0E8458B21CD937C200246CFD /* tokenizer.c */, - 0E8458B51CD937C200246CFD /* tokenizer_end.h */, - 0E8458B41CD937C200246CFD /* tokenizer_end.c */, - 0E8458B71CD937C200246CFD /* tokenizer_global.h */, - 0E8458B61CD937C200246CFD /* tokenizer_global.c */, - 0E8458B81CD937C200246CFD /* tokenizer_resource.h */, - 0E8458A91CD937C200246CFD /* check.h */, - 0E8458A81CD937C200246CFD /* check.c */, - 0E13BA1E1CE4F32400D7FC06 /* convert.h */, - 0E13BA1D1CE4F32400D7FC06 /* convert.c */, - 0EBEF8FE1CF5B74600A70AD1 /* selectors.h */, - 0EBEF8FD1CF5B74600A70AD1 /* selectors.c */, - 0EBEF8F51CF5B0A300A70AD1 /* selectors */, - ); - name = mycss; - path = ../../source/mycss; - sourceTree = ""; - }; - 0EBEF8F51CF5B0A300A70AD1 /* selectors */ = { - isa = PBXGroup; - children = ( - 0EBEF8F71CF5B0F600A70AD1 /* parser.h */, - 0EBEF8F61CF5B0F600A70AD1 /* parser.c */, - 0EBEF8FA1CF5B1D100A70AD1 /* state.h */, - 0EBEF8F91CF5B1D100A70AD1 /* state.c */, - ); - path = selectors; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 0E84589C1CD9377400246CFD /* mycss */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0E8458A41CD9377400246CFD /* Build configuration list for PBXNativeTarget "mycss" */; - buildPhases = ( - 0E8458991CD9377400246CFD /* Sources */, - 0E84589A1CD9377400246CFD /* Frameworks */, - 0E84589B1CD9377400246CFD /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = mycss; - productName = mycss; - productReference = 0E84589D1CD9377400246CFD /* mycss */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0E8458951CD9377400246CFD /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0730; - ORGANIZATIONNAME = "Alexander Borisov"; - TargetAttributes = { - 0E84589C1CD9377400246CFD = { - CreatedOnToolsVersion = 7.3; - }; - }; - }; - buildConfigurationList = 0E8458981CD9377400246CFD /* Build configuration list for PBXProject "mycss" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 0E8458941CD9377400246CFD; - productRefGroup = 0E84589E1CD9377400246CFD /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0E84589C1CD9377400246CFD /* mycss */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 0E8458991CD9377400246CFD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0E8458BA1CD937C200246CFD /* entry.c in Sources */, - 0E8458BF1CD937C200246CFD /* tokenizer_end.c in Sources */, - 0EBEF8F81CF5B0F600A70AD1 /* parser.c in Sources */, - 0E8458B91CD937C200246CFD /* check.c in Sources */, - 0E8458BC1CD937C200246CFD /* mycss.c in Sources */, - 0E068D301CDBC71F0062DC68 /* mystring.c in Sources */, - 0E8458BE1CD937C200246CFD /* tokenizer.c in Sources */, - 0E8458BD1CD937C200246CFD /* parser.c in Sources */, - 0EBEF8FF1CF5B74600A70AD1 /* selectors.c in Sources */, - 0E13BA1F1CE4F32400D7FC06 /* convert.c in Sources */, - 0EBEF8FB1CF5B1D100A70AD1 /* state.c in Sources */, - 0E8458C01CD937C200246CFD /* tokenizer_global.c in Sources */, - 0E8458A11CD9377400246CFD /* main.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 0E8458A21CD9377400246CFD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 0E8458A31CD9377400246CFD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - 0E8458A51CD9377400246CFD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ( - ../../source, - ../../../myhtml/source, - ); - LIBRARY_SEARCH_PATHS = /usr/local/lib; - OTHER_LDFLAGS = "-lmyhtml"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 0E8458A61CD9377400246CFD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - ../../source, - ../../../myhtml/source, - ); - LIBRARY_SEARCH_PATHS = /usr/local/lib; - OTHER_LDFLAGS = "-lmyhtml"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0E8458981CD9377400246CFD /* Build configuration list for PBXProject "mycss" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0E8458A21CD9377400246CFD /* Debug */, - 0E8458A31CD9377400246CFD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0E8458A41CD9377400246CFD /* Build configuration list for PBXNativeTarget "mycss" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0E8458A51CD9377400246CFD /* Debug */, - 0E8458A61CD9377400246CFD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0E8458951CD9377400246CFD /* Project object */; -} diff --git a/devel/osx/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/devel/osx/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6ec7197..0000000 --- a/devel/osx/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/devel/osx/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate b/devel/osx/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 4236025..0000000 Binary files a/devel/osx/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index df57b56..0000000 --- a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - diff --git a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme b/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme deleted file mode 100644 index a754d3c..0000000 --- a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist b/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 147dad8..0000000 --- a/devel/osx/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - mycss.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 0E84589C1CD9377400246CFD - - primary - - - - - diff --git a/include/mycss/an_plus_b.h b/include/mycss/an_plus_b.h index f3b1f56..7e3660b 100644 --- a/include/mycss/an_plus_b.h +++ b/include/mycss/an_plus_b.h @@ -25,9 +25,9 @@ #ifdef __cplusplus extern "C" { #endif - -#include + #include +#include struct mycss_an_plus_b { mycss_an_plus_b_entry_t* anb_entry; @@ -39,7 +39,7 @@ struct mycss_an_plus_b_entry { long n; bool is_broken; - mycss_result_entry_t* of; + mycss_selectors_list_t* of; }; mycss_an_plus_b_t * mycss_an_plus_b_create(void); @@ -47,19 +47,19 @@ mycss_status_t mycss_an_plus_b_init(mycss_entry_t* entry, mycss_an_plus_b_t* anb mycss_status_t mycss_an_plus_b_clean_all(mycss_an_plus_b_t* anb); mycss_an_plus_b_t * mycss_an_plus_b_destroy(mycss_an_plus_b_t* anb, bool self_destroy); -bool mycss_an_plus_b_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_an_plus_b_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_an_plus_b_state_skip_all(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_an_plus_b_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_an_plus_b_state_skip_all(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); void mycss_an_plus_b_print(mycss_an_plus_b_entry_t* anb_entry, FILE* fh); -void mycss_an_plus_b_parser_expectations_error(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +void mycss_an_plus_b_parser_expectations_error(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/api.h b/include/mycss/api.h index c52dfbf..6e3c138 100644 --- a/include/mycss/api.h +++ b/include/mycss/api.h @@ -80,10 +80,6 @@ enum mycss_status { MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE = 0x010202, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_INIT = 0x010203, MyCSS_STATUS_ERROR_NAMESPACE_NODE_ADD = 0x010204, - MyCSS_STATUS_ERROR_RESULT_CREATE = 0x010300, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_CREATE = 0x010301, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_INIT = 0x010302, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_ADD_NODE = 0x010303, MyCSS_STATUS_ERROR_RULES_CREATE = 0x010400, MyCSS_STATUS_ERROR_STRING_CREATE = 0x010501, MyCSS_STATUS_ERROR_STRING_INIT = 0x010502, diff --git a/include/mycss/entry.h b/include/mycss/entry.h index f694aa1..38400dc 100644 --- a/include/mycss/entry.h +++ b/include/mycss/entry.h @@ -29,7 +29,16 @@ extern "C" { #include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -37,19 +46,21 @@ struct mycss_entry { /* refs */ mycss_t* mycss; mycss_token_t* token; + mycss_stylesheet_t* stylesheet; /* objects and memory for css modules */ mchar_async_t* mchar; size_t mchar_node_id; size_t mchar_value_node_id; + mcobject_t* mcobject_string_entries; + /* css modules */ mycss_namespace_t* ns; mycss_selectors_t* selectors; mycss_rules_t* rules; mycss_media_t* media; mycss_an_plus_b_t* anb; - mycss_result_t* result; /* incoming buffer */ mcobject_t* mcobject_incoming_buffer; @@ -60,11 +71,19 @@ struct mycss_entry { mycss_entry_type_t type; myhtml_encoding_t encoding; + /* tokenizer */ mycss_tokenizer_state_t state; mycss_tokenizer_state_t state_back; + /* parser */ + mycss_parser_token_f parser; + mycss_parser_token_f parser_switch; + mycss_parser_token_f parser_original; + void* parser_state; + /* callbacks */ mycss_token_ready_callback_f token_ready_callback; + mycss_callback_selector_done_f callback_selector_done; /* helpers */ size_t token_counter; @@ -76,13 +95,21 @@ mycss_status_t mycss_entry_init(mycss_t* mycss, mycss_entry_t* entry); mycss_status_t mycss_entry_clean_all(mycss_entry_t* entry); mycss_entry_t * mycss_entry_destroy(mycss_entry_t* entry, bool self_destroy); +void mycss_entry_end(mycss_entry_t* entry); + +mycss_selectors_list_t * mycss_entry_get_parent_set_parser(mycss_entry_t* entry, mycss_selectors_list_t* selector_list); + +void mycss_entry_print(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list, FILE* fh); + mycss_token_ready_callback_f mycss_entry_token_ready_callback(mycss_entry_t* entry, mycss_token_ready_callback_f callback_f); size_t mycss_entry_token_count(mycss_entry_t* entry); myhtml_incoming_buffer_t * mycss_entry_incoming_buffer_current(mycss_entry_t* entry); myhtml_incoming_buffer_t * mycss_entry_incoming_buffer_first(mycss_entry_t* entry); -mycss_result_t * mycss_entry_result(mycss_entry_t* entry); +myhtml_string_t * mycss_entry_string_create_and_init(mycss_entry_t* entry, size_t string_size); + +mycss_stylesheet_t * mycss_entry_stylesheet(mycss_entry_t* entry); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/media/myosi.h b/include/mycss/media/myosi.h index a7ec79d..189a7ac 100644 --- a/include/mycss/media/myosi.h +++ b/include/mycss/media/myosi.h @@ -30,7 +30,7 @@ extern "C" { typedef struct mycss_media mycss_media_t; -typedef bool (*mycss_media_state_f)(mycss_result_t* result, mycss_media_t* media, mycss_token_t* token); +typedef bool (*mycss_media_state_f)(mycss_entry_t* entry, mycss_media_t* media, mycss_token_t* token); struct mycss_media { diff --git a/include/mycss/media/state.h b/include/mycss/media/state.h index 84b4bbc..a98e594 100644 --- a/include/mycss/media/state.h +++ b/include/mycss/media/state.h @@ -23,16 +23,16 @@ #pragma once #include -#include +#include #ifdef __cplusplus extern "C" { #endif -bool mycss_media_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_media_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_media_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_media_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_media_state_skep_all(mycss_result_t* result, mycss_media_t* media, mycss_token_t* token); +bool mycss_media_state_skep_all(mycss_entry_t* entry, mycss_media_t* media, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/myosi.h b/include/mycss/myosi.h index da549c2..9779be1 100644 --- a/include/mycss/myosi.h +++ b/include/mycss/myosi.h @@ -56,15 +56,14 @@ enum mycss_status { MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_CREATE = 0x010101, MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_INIT = 0x010102, MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_NODE_ADD = 0x010103, + MyCSS_STATUS_ERROR_SELECTORS_LIST_CREATE = 0x010104, + MyCSS_STATUS_ERROR_SELECTORS_LIST_INIT = 0x010105, + MyCSS_STATUS_ERROR_SELECTORS_LIST_ADD_NODE = 0x010106, MyCSS_STATUS_ERROR_NAMESPACE_CREATE = 0x010200, MyCSS_STATUS_ERROR_NAMESPACE_INIT = 0x010201, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE = 0x010202, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_INIT = 0x010203, MyCSS_STATUS_ERROR_NAMESPACE_NODE_ADD = 0x010204, - MyCSS_STATUS_ERROR_RESULT_CREATE = 0x010300, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_CREATE = 0x010301, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_INIT = 0x010302, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_ADD_NODE = 0x010303, MyCSS_STATUS_ERROR_RULES_CREATE = 0x010400, MyCSS_STATUS_ERROR_STRING_CREATE = 0x010501, MyCSS_STATUS_ERROR_STRING_INIT = 0x010502, @@ -247,17 +246,15 @@ typedef struct mycss_an_plus_b mycss_an_plus_b_t; typedef struct mycss_an_plus_b_entry mycss_an_plus_b_entry_t; // result -typedef struct mycss_result_list_parser mycss_result_list_parser_t; -typedef struct mycss_result_list mycss_result_list_t; -typedef struct mycss_result_entry mycss_result_entry_t; -typedef struct mycss_result mycss_result_t; - -enum mycss_result_entry_type { +enum mycss_stylesheet_entry_type { MyCSS_RESULT_ENTRY_TYPE_UNDEF = 0x00, MyCSS_RESULT_ENTRY_TYPE_GOOD = 0x01, MyCSS_RESULT_ENTRY_TYPE_BAD = 0x02 } -typedef mycss_result_entry_type_t; +typedef mycss_stylesheet_entry_type_t; + +// stylesheet +typedef struct mycss_stylesheet mycss_stylesheet_t; // mystring typedef struct mycss_string_escaped_res mycss_string_escaped_res_t; @@ -266,8 +263,8 @@ typedef struct mycss_string_res mycss_string_res_t; typedef size_t (*mycss_tokenizer_state_f)(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size); typedef mycss_token_t * (*mycss_token_ready_callback_f)(mycss_entry_t* entry, mycss_token_t* token); typedef size_t (*mycss_string_process_state_f)(myhtml_string_t* str, const char* data, size_t length, size_t size, mycss_string_res_t *out_res); -typedef bool (*mycss_parser_token_f)(mycss_result_t* result, mycss_token_t* token); -typedef bool (*mycss_an_plus_b_state_f)(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +typedef bool (*mycss_parser_token_f)(mycss_entry_t* entry, mycss_token_t* token); +typedef bool (*mycss_an_plus_b_state_f)(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/namespace/init.h b/include/mycss/namespace/init.h index bfb3a7c..030daa8 100644 --- a/include/mycss/namespace/init.h +++ b/include/mycss/namespace/init.h @@ -27,7 +27,7 @@ extern "C" { #endif #include -#include +#include #include mycss_namespace_t * mycss_namespace_create(void); @@ -35,11 +35,23 @@ mycss_status_t mycss_namespace_init(mycss_entry_t* entry, mycss_namespace_t* ns) mycss_status_t mycss_namespace_clean_all(mycss_namespace_t* ns); mycss_namespace_t * mycss_namespace_destroy(mycss_namespace_t* ns, bool self_destroy); +mycss_status_t mycss_namespace_stylesheet_init(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); +mycss_status_t mycss_namespace_stylesheet_clean(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); +mycss_namespace_stylesheet_t * mycss_namespace_stylesheet_destroy(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, bool self_destroy); + +mycss_status_t mycss_namespace_stylesheet_init_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, const char* url, size_t url_length, myhtml_namespace_t def_ns); +void mycss_namespace_stylesheet_append_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_namespace_entry_t* ns_entry); +void mycss_namespace_stylesheet_destroy_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); + +mycss_namespace_entry_t * mycss_namespace_entry_create(mycss_namespace_t* ns); void mycss_namespace_entry_clean(mycss_namespace_entry_t* ns_entry); +mycss_namespace_entry_t * mycss_namespace_entry_destroy(mycss_namespace_entry_t* ns_entry, mycss_entry_t* entry, bool self_destroy); -const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, size_t ns_id, size_t *length); +const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, mctree_t* name_tree, size_t ns_id, size_t* length); +mycss_namespace_entry_t * mycss_namespace_entry_by_name(mycss_namespace_t *ns, mctree_t* name_tree, const char* ns_name, size_t length, bool case_insensitive); +const char * mycss_namespace_name_by_entry(mycss_namespace_entry_t* ns_entry, mctree_t* name_tree, size_t* length, bool* is_default); -void mycss_namespace_print(mycss_namespace_t* ns, size_t ns_id, FILE* fh, bool with_vbar); +void mycss_namespace_print(mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, FILE* fh, bool with_vbar); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/namespace/myosi.h b/include/mycss/namespace/myosi.h index 3fb121d..5459da7 100644 --- a/include/mycss/namespace/myosi.h +++ b/include/mycss/namespace/myosi.h @@ -33,28 +33,35 @@ extern "C" { typedef struct mycss_namespace mycss_namespace_t; typedef struct mycss_namespace_entry mycss_namespace_entry_t; +typedef struct mycss_namespace_stylesheet mycss_namespace_stylesheet_t; -typedef bool (*mycss_namespace_state_f)(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); - - -struct mycss_namespace { - mycss_namespace_entry_t* ns_entry; /* current namespace entry */ - mctree_t* name_tree; // tree for namespace names - - mcobject_t* mcobject_entries; - - size_t ns_id_counter; -}; +typedef bool (*mycss_namespace_state_f)(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); struct mycss_namespace_entry { myhtml_string_t* name; myhtml_string_t* url; - size_t ns_id; + + myhtml_namespace_t ns_id; + size_t mctree_id; mycss_namespace_entry_t* next; mycss_namespace_entry_t* prev; }; +struct mycss_namespace_stylesheet { + mctree_t* name_tree; // tree for namespace names + + mycss_namespace_entry_t* entry_default; + mycss_namespace_entry_t entry_undef; + mycss_namespace_entry_t entry_any; + + size_t ns_id_counter; +}; + +struct mycss_namespace { + mycss_namespace_entry_t* ns_entry; /* current namespace entry */ + mcobject_t* mcobject_entries; +}; #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/namespace/parser.h b/include/mycss/namespace/parser.h index 5e3a190..213d697 100644 --- a/include/mycss/namespace/parser.h +++ b/include/mycss/namespace/parser.h @@ -26,15 +26,16 @@ extern "C" { #endif +#include #include -#include #include +#include -void mycss_namespace_parser_begin(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_name(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_end(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_expectations_error(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_begin(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_name(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_end(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_expectations_error(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); #ifdef __cplusplus diff --git a/include/mycss/namespace/state.h b/include/mycss/namespace/state.h index 4657418..371bf0f 100644 --- a/include/mycss/namespace/state.h +++ b/include/mycss/namespace/state.h @@ -26,22 +26,21 @@ extern "C" { #endif -#include -#include +#include #include #include #include -bool mycss_namespace_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_namespace_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_namespace_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_namespace_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_namespace_state_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/parser.h b/include/mycss/parser.h index 309735f..7a953c2 100644 --- a/include/mycss/parser.h +++ b/include/mycss/parser.h @@ -40,7 +40,7 @@ extern "C" { mycss_token_t * mycss_parser_token_ready_callback_function(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token); +bool mycss_parser_token(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus diff --git a/include/mycss/result.h b/include/mycss/result.h deleted file mode 100644 index 3614a12..0000000 --- a/include/mycss/result.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (C) 2016 Alexander Borisov - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - Author: lex.borisov@gmail.com (Alexander Borisov) -*/ - -#ifndef MyHTML_MyCSS_RESULT_H -#define MyHTML_MyCSS_RESULT_H -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct mycss_result { - /* refs */ - mycss_entry_t* entry; - - /* memory and objects */ - mcobject_t* mcobject_entries; - mcobject_t* mcobject_string_entries; - - /* current parsing tmp */ - mycss_result_entry_t* result_entry_first; /* first */ - mycss_result_entry_t* result_entry; /* current */ - - mycss_parser_token_f parser; - mycss_parser_token_f parser_switch; - mycss_parser_token_f parser_original; - void* state; - - /* callbacks */ - mycss_callback_selector_done_f callback_selector_done; -}; - -struct mycss_result_entry { - mycss_selectors_entry_t** selector_list; - size_t selector_list_length; - - mycss_selectors_entry_t* selector; /* current selector/last entry */ - - mycss_result_entry_t* parent; - mycss_result_entry_t* next; - mycss_result_entry_t* prev; -}; - -mycss_result_t * mycss_result_create(void); -mycss_status_t mycss_result_init(mycss_entry_t* entry, mycss_result_t* result); -mycss_status_t mycss_result_clean_all(mycss_result_t* result); -mycss_result_t * mycss_result_destroy(mycss_result_t* result, bool self_destroy); -void mycss_result_end(mycss_result_t* result); - -mycss_result_entry_t * mycss_result_entry_create(mycss_result_t* result); -void mycss_result_entry_clean(mycss_result_entry_t* result_entry); -mycss_result_entry_t * mycss_result_entry_destroy(mycss_result_t* result, mycss_result_entry_t* result_entry, bool self_destroy); -mycss_result_entry_t * mycss_result_entry_create_and_push(mycss_result_t* result); -mycss_result_entry_t * mycss_result_entry_append_selector(mycss_result_t* result, mycss_result_entry_t* res_entry, mycss_selectors_entry_t* selector); -mycss_result_entry_t * mycss_result_get_parent_set_parser(mycss_result_t* result, mycss_result_entry_t* res_entry); -mycss_result_entry_t * mycss_result_entry_create_next_level_of_selectors(mycss_result_t* result, mycss_result_entry_t* current_res_entry); - -void mycss_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_entry, FILE* fh); - -size_t mycss_result_detect_namespace_by_name(mycss_result_t* result, const char* ns, size_t length); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* MyHTML_MyCSS_RESULT_H */ diff --git a/include/mycss/rules/myosi.h b/include/mycss/rules/myosi.h index a25557d..fb6dc47 100644 --- a/include/mycss/rules/myosi.h +++ b/include/mycss/rules/myosi.h @@ -30,7 +30,7 @@ extern "C" { typedef struct mycss_rules mycss_rules_t; -typedef bool (*mycss_rules_state_f)(mycss_result_t* result, mycss_rules_t* rules, mycss_token_t* token); +typedef bool (*mycss_rules_state_f)(mycss_entry_t* entry, mycss_rules_t* rules, mycss_token_t* token); struct mycss_rules { diff --git a/include/mycss/rules/state.h b/include/mycss/rules/state.h index 0e855a0..bb2cade 100644 --- a/include/mycss/rules/state.h +++ b/include/mycss/rules/state.h @@ -23,16 +23,16 @@ #pragma once #include -#include +#include #ifdef __cplusplus extern "C" { #endif -bool mycss_rules_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_rules_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_rules_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_rules_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_rules_state_body(mycss_result_t* result, mycss_rules_t* rules, mycss_token_t* token); +bool mycss_rules_state_body(mycss_entry_t* entry, mycss_rules_t* rules, mycss_token_t* token); #ifdef __cplusplus diff --git a/include/mycss/selectors/function.h b/include/mycss/selectors/function.h index e8e962f..68b86ea 100644 --- a/include/mycss/selectors/function.h +++ b/include/mycss/selectors/function.h @@ -27,12 +27,11 @@ #ifdef __cplusplus extern "C" { #endif - -#include + #include #include -typedef void (*mycss_selectors_function_begin_f)(mycss_result_t* result, mycss_selectors_entry_t* selector); +typedef void (*mycss_selectors_function_begin_f)(mycss_entry_t* entry, mycss_selectors_entry_t* selector); struct mycss_selectors_function_index { mycss_parser_token_f parser; @@ -54,37 +53,37 @@ typedef mycss_selectots_function_begin_entry_t; mycss_selectors_function_begin_f mycss_function_begin_by_name(const char *name, size_t length); const mycss_selectots_function_begin_entry_t * mycss_function_begin_entry_by_name(const char* name, size_t length); -void mycss_selectors_function_begin_nth_child(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_not(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_dir(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_matches(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_lang(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_drop(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_column(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_current(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_child(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_has(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_column(mycss_result_t* result, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_not(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_dir(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_matches(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_lang(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_drop(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_current(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_has(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector); -void mycss_selectors_begin_unknown(mycss_result_t* result, mycss_selectors_entry_t* selector); -bool mycss_selectors_unknown_parser(mycss_result_t* result, mycss_token_t* token); +void mycss_selectors_begin_unknown(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +bool mycss_selectors_unknown_parser(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_selectors_function_not_or_matches_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_has_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_with_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_without_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_of_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_column_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_skip_all_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_dir_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_after_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_comma_parser(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_function_not_or_matches_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_has_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_with_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_without_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_of_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_column_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_skip_all_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_dir_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_after_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_comma_parser(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/selectors/init.h b/include/mycss/selectors/init.h index 6d4a0b1..87d0748 100644 --- a/include/mycss/selectors/init.h +++ b/include/mycss/selectors/init.h @@ -26,21 +26,21 @@ extern "C" { #endif -#include #include #include +#include #include mycss_selectors_t * mycss_selectors_create(void); mycss_status_t mycss_selectors_init(mycss_entry_t* entry, mycss_selectors_t* selectors); mycss_status_t mycss_selectors_clean_all(mycss_selectors_t* selectors); mycss_selectors_t * mycss_selectors_destroy(mycss_selectors_t* selectors, bool self_destroy); -void mycss_selectors_end(mycss_result_entry_t* res_entry, mycss_selectors_t* selectors, bool self_destroy); +void mycss_selectors_end(mycss_selectors_list_t* selectors_list, mycss_selectors_t* selectors, bool self_destroy); void mycss_selectors_entry_clean(mycss_selectors_entry_t* sel_entry); mycss_selectors_entry_t * mycss_selectors_entry_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, bool self_destroy); -void * mycss_selectors_entry_value_destroy(mycss_result_t* result, mycss_selectors_entry_t* entry, bool destroy_self); +void * mycss_selectors_entry_value_destroy(mycss_entry_t* entry, mycss_selectors_entry_t* selector_entry, bool destroy_self); mycss_selectors_entry_t * mycss_selectors_entry_find_first(mycss_selectors_entry_t* selector); void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, FILE* fh); @@ -52,6 +52,7 @@ mycss_selectors_entry_t ** mycss_selectors_entry_list_create(mycss_selectors_t* mycss_selectors_entry_t ** mycss_selectors_entry_list_add_one(mycss_selectors_t* selectors, mycss_selectors_entry_t** list, size_t current_size); mycss_selectors_entry_t ** mycss_selectors_entry_list_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t** list); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/include/mycss/selectors/list.h b/include/mycss/selectors/list.h new file mode 100644 index 0000000..51867f3 --- /dev/null +++ b/include/mycss/selectors/list.h @@ -0,0 +1,55 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#ifndef MyHTML_MyCSS_SELECTORS_LIST_H +#define MyHTML_MyCSS_SELECTORS_LIST_H +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct mycss_selectors_list { + mycss_selectors_entry_t** selector_list; + size_t selector_list_length; + + mycss_selectors_entry_t* selector; /* current selector/last entry */ + + mycss_selectors_list_t* parent; + mycss_selectors_list_t* next; + mycss_selectors_list_t* prev; +}; + +mycss_selectors_list_t * mycss_selectors_list_create(mycss_selectors_t* selectors); +void mycss_selectors_list_clean(mycss_selectors_list_t* selector_list); +mycss_selectors_list_t * mycss_selectors_list_destroy(mycss_selectors_t* selectors, mycss_selectors_list_t* selector_list, bool self_destroy); + +mycss_selectors_list_t * mycss_selectors_list_create_and_push(mycss_selectors_t* selectors, mycss_selectors_list_t* current_list); +mycss_selectors_list_t * mycss_selectors_list_append_selector(mycss_selectors_t* selectors, mycss_selectors_list_t* selector_list, mycss_selectors_entry_t* selector); +mycss_selectors_list_t * mycss_selectors_list_create_next_level_of_selectors(mycss_selectors_t* selectors, mycss_stylesheet_t* stylesheet, mycss_selectors_list_t* selector_list); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* MyHTML_MyCSS_SELECTORS_LIST_H */ diff --git a/include/mycss/selectors/myosi.h b/include/mycss/selectors/myosi.h index 9ba2049..23d3fd1 100644 --- a/include/mycss/selectors/myosi.h +++ b/include/mycss/selectors/myosi.h @@ -28,12 +28,14 @@ extern "C" { typedef struct mycss_selectors mycss_selectors_t; typedef struct mycss_selectors_entry mycss_selectors_entry_t; - +typedef struct mycss_selectors_list mycss_selectors_list_t; + #include #include +#include #include -typedef bool (*mycss_selectors_state_f)(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +typedef bool (*mycss_selectors_state_f)(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); typedef void (*mycss_callback_selector_done_f)(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); enum mycss_selectors_match { @@ -49,7 +51,7 @@ typedef mycss_selectors_match_t; enum mycss_selectors_combinator { MyCSS_SELECTORS_COMBINATOR_UNDEF = 0x00, // two compound selectors [key=val].foo - MyCSS_SELECTORS_COMBINATOR_DESCENDANT = 0x01, // '*' or '>>' or WHITESPACE + MyCSS_SELECTORS_COMBINATOR_DESCENDANT = 0x01, // '>>' or WHITESPACE MyCSS_SELECTORS_COMBINATOR_CHILD = 0x02, // '>' MyCSS_SELECTORS_COMBINATOR_NEXT_SIBLING = 0x03, // '+' MyCSS_SELECTORS_COMBINATOR_FOLLOWING_SIBLING = 0x04, // '~' @@ -171,6 +173,7 @@ struct mycss_selectors { mycss_entry_t* entry; mcobject_t* mcobject_entries; + mcobject_t* mcobject_list_entries; }; struct mycss_selectors_entry { @@ -178,7 +181,7 @@ struct mycss_selectors_entry { mycss_selectors_sub_type_t sub_type; mycss_selectors_flags_t flags; - size_t ns; /* namespace */ + mycss_namespace_entry_t* ns_entry; myhtml_string_t* key; void* value; diff --git a/include/mycss/selectors/parser.h b/include/mycss/selectors/parser.h index 10e3cd2..8bd8b05 100644 --- a/include/mycss/selectors/parser.h +++ b/include/mycss/selectors/parser.h @@ -26,55 +26,55 @@ extern "C" { #endif -#include #include #include #include #include #include -mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); +mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); -void mycss_selectors_parser_selector_comma(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_plus(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_tilde(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_column(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_whitespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_ident_type(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_ident_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_after_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_id(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_expectations_error(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_bad_token(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_comma(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_plus(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_tilde(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_column(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_whitespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_ident_type(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_ident_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_namespace_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_namespace_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_after_namespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_id(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_expectations_error(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_bad_token(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* for set parent selector bad status if child selector is bad*/ -void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_result_entry_t* result_entry); +void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_selectors_list_t* selectors_list); /* selectors list */ -bool mycss_selectors_parser_selectors_list_begin(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_process(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_comma(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_skip_all(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_begin(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_process(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_comma(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_skip_all(mycss_entry_t* entry, mycss_token_t* token); /* selectors list with combinator first */ -bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/selectors/pseudo.h b/include/mycss/selectors/pseudo.h index 6bde01f..123b901 100644 --- a/include/mycss/selectors/pseudo.h +++ b/include/mycss/selectors/pseudo.h @@ -25,8 +25,7 @@ #ifdef __cplusplus extern "C" { #endif - -#include + #include #include diff --git a/include/mycss/selectors/state.h b/include/mycss/selectors/state.h index 31ad881..8ef8350 100644 --- a/include/mycss/selectors/state.h +++ b/include/mycss/selectors/state.h @@ -26,39 +26,38 @@ extern "C" { #endif -#include #include #include #include #include -bool mycss_selectors_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); -void mycss_selectors_state_end(mycss_result_t* result); -bool mycss_selectors_state_function_skip_all(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); +void mycss_selectors_state_end(mycss_entry_t* entry); +bool mycss_selectors_state_function_skip_all(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* */ -bool mycss_selectors_state_combinator(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_combinator(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* */ -bool mycss_selectors_state_simple_selector(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_full_stop(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attr_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attribute_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_wq_name_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attr_matcher(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_full_stop(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attr_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attribute_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_wq_name_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attr_matcher(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/selectors/value.h b/include/mycss/selectors/value.h index 5153e4d..a4adee4 100644 --- a/include/mycss/selectors/value.h +++ b/include/mycss/selectors/value.h @@ -28,20 +28,19 @@ #define mycss_selector_value_drop(obj) ((mycss_selectors_function_drop_type_t)(obj)) #define mycss_selector_value_lang(obj) ((mycss_selectors_value_lang_t*)(obj)) #define mycss_selector_value_function(obj) ((mycss_result_entry_t*)(obj)) -#define mycss_selector_value_destroy(result, type, sub_type, value, self_destroy) (mycss_selectors_value_destroy_map[type](result, type, sub_type, value, self_destroy)) +#define mycss_selector_value_destroy(entry, type, sub_type, value, self_destroy) (mycss_selectors_value_destroy_map[type](entry, type, sub_type, value, self_destroy)) #ifdef __cplusplus extern "C" { #endif -#include #include #include #include #include -typedef void * (*mycss_selectors_value_destroy_f)(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -typedef void * (*mycss_selectors_value_function_destroy_f)(mycss_result_t* result, void* value, bool self_destroy); +typedef void * (*mycss_selectors_value_destroy_f)(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +typedef void * (*mycss_selectors_value_function_destroy_f)(mycss_entry_t* entry, void* value, bool self_destroy); struct mycss_selectors_value_attribute { myhtml_string_t* value; @@ -59,48 +58,48 @@ typedef mycss_selectors_value_lang_t; /* create */ -void * mycss_selectors_value_undef_create(mycss_result_t* result, bool set_clean); -mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_result_t* result, bool set_clean); +void * mycss_selectors_value_undef_create(mycss_entry_t* entry, bool set_clean); +mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_entry_t* entry, bool set_clean); /* destroy */ -void * mycss_selectors_value_undef_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_id_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_class_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_element_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_attribute_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_undef_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_id_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_class_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_element_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_attribute_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); /* pseudo class function create */ -void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_current_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_has_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_not_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_result_t* result, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_current_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_has_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_not_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_entry_t* entry, bool set_clean); /* pseudo class function destroy */ -void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy); #ifdef __cplusplus } /* extern "C" */ diff --git a/include/mycss/stylesheet.h b/include/mycss/stylesheet.h new file mode 100644 index 0000000..69b3ab1 --- /dev/null +++ b/include/mycss/stylesheet.h @@ -0,0 +1,57 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#ifndef MyHTML_MyCSS_STYLESHEET_H +#define MyHTML_MyCSS_STYLESHEET_H +#pragma once + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct mycss_stylesheet { + mycss_entry_t* entry; /* refs */ + + mycss_namespace_stylesheet_t ns_stylesheet; + mycss_selectors_list_t* sel_list_first; + mycss_selectors_list_t* sel_list_last; + + mycss_stylesheet_t* child; + mycss_stylesheet_t* parent; + mycss_stylesheet_t* next; + mycss_stylesheet_t* prev; +}; + +mycss_stylesheet_t * mycss_stylesheet_create(void); +mycss_status_t mycss_stylesheet_init(mycss_stylesheet_t* stylesheet, mycss_entry_t* entry); +mycss_status_t mycss_stylesheet_clean_all(mycss_stylesheet_t* stylesheet); +mycss_stylesheet_t * mycss_stylesheet_destroy(mycss_stylesheet_t* stylesheet, bool self_destroy); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif /* MyHTML_MyCSS_STYLESHEET_H */ diff --git a/projects/mycss.xcodeproj/project.pbxproj b/projects/mycss.xcodeproj/project.pbxproj deleted file mode 100644 index 578b16b..0000000 --- a/projects/mycss.xcodeproj/project.pbxproj +++ /dev/null @@ -1,501 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0ED0C8471CF7853700A967AF /* libmyhtml.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ED0C8461CF7853700A967AF /* libmyhtml.dylib */; }; - 0EFCFD8B1D0A6BC000FD1C44 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD741D0A6BC000FD1C44 /* api.h */; }; - 0EFCFD8C1D0A6BC000FD1C44 /* mycss.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD751D0A6BC000FD1C44 /* mycss.c */; }; - 0EFCFD8D1D0A6BC000FD1C44 /* mycss.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD761D0A6BC000FD1C44 /* mycss.h */; }; - 0EFCFD8E1D0A6BC000FD1C44 /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD771D0A6BC000FD1C44 /* parser.c */; }; - 0EFCFD8F1D0A6BC000FD1C44 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD781D0A6BC000FD1C44 /* parser.h */; }; - 0EFCFD901D0A6BC000FD1C44 /* result.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD791D0A6BC000FD1C44 /* result.c */; }; - 0EFCFD911D0A6BC000FD1C44 /* result.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD7A1D0A6BC000FD1C44 /* result.h */; }; - 0EFCFD921D0A6BC000FD1C44 /* tokenizer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD7B1D0A6BC000FD1C44 /* tokenizer.c */; }; - 0EFCFD931D0A6BC000FD1C44 /* entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD7C1D0A6BC000FD1C44 /* entry.c */; }; - 0EFCFD941D0A6BC000FD1C44 /* entry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD7D1D0A6BC000FD1C44 /* entry.h */; }; - 0EFCFD951D0A6BC000FD1C44 /* myosi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD7E1D0A6BC000FD1C44 /* myosi.h */; }; - 0EFCFD961D0A6BC000FD1C44 /* tokenizer_global.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD7F1D0A6BC000FD1C44 /* tokenizer_global.c */; }; - 0EFCFD971D0A6BC000FD1C44 /* check.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD801D0A6BC000FD1C44 /* check.c */; }; - 0EFCFD981D0A6BC000FD1C44 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD811D0A6BC000FD1C44 /* check.h */; }; - 0EFCFD991D0A6BC000FD1C44 /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD821D0A6BC000FD1C44 /* convert.c */; }; - 0EFCFD9A1D0A6BC000FD1C44 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD831D0A6BC000FD1C44 /* convert.h */; }; - 0EFCFD9B1D0A6BC000FD1C44 /* mystring.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD841D0A6BC000FD1C44 /* mystring.c */; }; - 0EFCFD9C1D0A6BC000FD1C44 /* mystring.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD851D0A6BC000FD1C44 /* mystring.h */; }; - 0EFCFD9D1D0A6BC000FD1C44 /* tokenizer_end.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFD861D0A6BC000FD1C44 /* tokenizer_end.c */; }; - 0EFCFD9E1D0A6BC000FD1C44 /* tokenizer_end.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD871D0A6BC000FD1C44 /* tokenizer_end.h */; }; - 0EFCFD9F1D0A6BC000FD1C44 /* tokenizer_global.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD881D0A6BC000FD1C44 /* tokenizer_global.h */; }; - 0EFCFDA01D0A6BC000FD1C44 /* tokenizer_resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD891D0A6BC000FD1C44 /* tokenizer_resource.h */; }; - 0EFCFDA11D0A6BC000FD1C44 /* tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFD8A1D0A6BC000FD1C44 /* tokenizer.h */; }; - 0EFCFDEE1D0A6C1D00FD1C44 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFDE91D0A6C1D00FD1C44 /* state.c */; }; - 0EFCFDEF1D0A6C1D00FD1C44 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFDEA1D0A6C1D00FD1C44 /* init.c */; }; - 0EFCFDF01D0A6C1D00FD1C44 /* init.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDEB1D0A6C1D00FD1C44 /* init.h */; }; - 0EFCFDF11D0A6C1D00FD1C44 /* myosi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDEC1D0A6C1D00FD1C44 /* myosi.h */; }; - 0EFCFDF21D0A6C1D00FD1C44 /* state.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDED1D0A6C1D00FD1C44 /* state.h */; }; - 0EFCFDFA1D0A6C2900FD1C44 /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFDF31D0A6C2900FD1C44 /* parser.c */; }; - 0EFCFDFB1D0A6C2900FD1C44 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFDF41D0A6C2900FD1C44 /* state.c */; }; - 0EFCFDFC1D0A6C2900FD1C44 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFDF51D0A6C2900FD1C44 /* init.c */; }; - 0EFCFDFD1D0A6C2900FD1C44 /* init.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDF61D0A6C2900FD1C44 /* init.h */; }; - 0EFCFDFE1D0A6C2900FD1C44 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDF71D0A6C2900FD1C44 /* parser.h */; }; - 0EFCFDFF1D0A6C2900FD1C44 /* myosi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDF81D0A6C2900FD1C44 /* myosi.h */; }; - 0EFCFE001D0A6C2900FD1C44 /* state.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFDF91D0A6C2900FD1C44 /* state.h */; }; - 0EFCFE061D0A6C3500FD1C44 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE011D0A6C3500FD1C44 /* init.c */; }; - 0EFCFE071D0A6C3500FD1C44 /* init.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE021D0A6C3500FD1C44 /* init.h */; }; - 0EFCFE081D0A6C3500FD1C44 /* myosi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE031D0A6C3500FD1C44 /* myosi.h */; }; - 0EFCFE091D0A6C3500FD1C44 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE041D0A6C3500FD1C44 /* state.c */; }; - 0EFCFE0A1D0A6C3500FD1C44 /* state.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE051D0A6C3500FD1C44 /* state.h */; }; - 0EFCFE191D0A6C4200FD1C44 /* function.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE0B1D0A6C4200FD1C44 /* function.c */; }; - 0EFCFE1A1D0A6C4200FD1C44 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE0C1D0A6C4200FD1C44 /* function.h */; }; - 0EFCFE1B1D0A6C4200FD1C44 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE0D1D0A6C4200FD1C44 /* init.c */; }; - 0EFCFE1C1D0A6C4200FD1C44 /* init.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE0E1D0A6C4200FD1C44 /* init.h */; }; - 0EFCFE1D1D0A6C4200FD1C44 /* myosi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE0F1D0A6C4200FD1C44 /* myosi.h */; }; - 0EFCFE1E1D0A6C4200FD1C44 /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE101D0A6C4200FD1C44 /* parser.c */; }; - 0EFCFE1F1D0A6C4200FD1C44 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE111D0A6C4200FD1C44 /* parser.h */; }; - 0EFCFE201D0A6C4200FD1C44 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE121D0A6C4200FD1C44 /* state.c */; }; - 0EFCFE211D0A6C4200FD1C44 /* state.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE131D0A6C4200FD1C44 /* state.h */; }; - 0EFCFE221D0A6C4200FD1C44 /* function_resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE141D0A6C4200FD1C44 /* function_resource.h */; }; - 0EFCFE231D0A6C4200FD1C44 /* value_resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE151D0A6C4200FD1C44 /* value_resource.h */; }; - 0EFCFE241D0A6C4200FD1C44 /* value.c in Sources */ = {isa = PBXBuildFile; fileRef = 0EFCFE161D0A6C4200FD1C44 /* value.c */; }; - 0EFCFE251D0A6C4200FD1C44 /* value.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE171D0A6C4200FD1C44 /* value.h */; }; - 0EFCFE261D0A6C4200FD1C44 /* myosi_resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFCFE181D0A6C4200FD1C44 /* myosi_resource.h */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 0ED0C8071CF7843000A967AF /* libmycss.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libmycss.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 0ED0C8461CF7853700A967AF /* libmyhtml.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmyhtml.dylib; path = ../../myhtml/projects/build/Debug/libmyhtml.dylib; sourceTree = ""; }; - 0EFCFD741D0A6BC000FD1C44 /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../source/mycss/api.h; sourceTree = ""; }; - 0EFCFD751D0A6BC000FD1C44 /* mycss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mycss.c; path = ../source/mycss/mycss.c; sourceTree = ""; }; - 0EFCFD761D0A6BC000FD1C44 /* mycss.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mycss.h; path = ../source/mycss/mycss.h; sourceTree = ""; }; - 0EFCFD771D0A6BC000FD1C44 /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parser.c; path = ../source/mycss/parser.c; sourceTree = ""; }; - 0EFCFD781D0A6BC000FD1C44 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parser.h; path = ../source/mycss/parser.h; sourceTree = ""; }; - 0EFCFD791D0A6BC000FD1C44 /* result.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = result.c; path = ../source/mycss/result.c; sourceTree = ""; }; - 0EFCFD7A1D0A6BC000FD1C44 /* result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = result.h; path = ../source/mycss/result.h; sourceTree = ""; }; - 0EFCFD7B1D0A6BC000FD1C44 /* tokenizer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tokenizer.c; path = ../source/mycss/tokenizer.c; sourceTree = ""; }; - 0EFCFD7C1D0A6BC000FD1C44 /* entry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = entry.c; path = ../source/mycss/entry.c; sourceTree = ""; }; - 0EFCFD7D1D0A6BC000FD1C44 /* entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = entry.h; path = ../source/mycss/entry.h; sourceTree = ""; }; - 0EFCFD7E1D0A6BC000FD1C44 /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi.h; path = ../source/mycss/myosi.h; sourceTree = ""; }; - 0EFCFD7F1D0A6BC000FD1C44 /* tokenizer_global.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tokenizer_global.c; path = ../source/mycss/tokenizer_global.c; sourceTree = ""; }; - 0EFCFD801D0A6BC000FD1C44 /* check.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = check.c; path = ../source/mycss/check.c; sourceTree = ""; }; - 0EFCFD811D0A6BC000FD1C44 /* check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = check.h; path = ../source/mycss/check.h; sourceTree = ""; }; - 0EFCFD821D0A6BC000FD1C44 /* convert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = convert.c; path = ../source/mycss/convert.c; sourceTree = ""; }; - 0EFCFD831D0A6BC000FD1C44 /* convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = convert.h; path = ../source/mycss/convert.h; sourceTree = ""; }; - 0EFCFD841D0A6BC000FD1C44 /* mystring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mystring.c; path = ../source/mycss/mystring.c; sourceTree = ""; }; - 0EFCFD851D0A6BC000FD1C44 /* mystring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mystring.h; path = ../source/mycss/mystring.h; sourceTree = ""; }; - 0EFCFD861D0A6BC000FD1C44 /* tokenizer_end.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tokenizer_end.c; path = ../source/mycss/tokenizer_end.c; sourceTree = ""; }; - 0EFCFD871D0A6BC000FD1C44 /* tokenizer_end.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tokenizer_end.h; path = ../source/mycss/tokenizer_end.h; sourceTree = ""; }; - 0EFCFD881D0A6BC000FD1C44 /* tokenizer_global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tokenizer_global.h; path = ../source/mycss/tokenizer_global.h; sourceTree = ""; }; - 0EFCFD891D0A6BC000FD1C44 /* tokenizer_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tokenizer_resource.h; path = ../source/mycss/tokenizer_resource.h; sourceTree = ""; }; - 0EFCFD8A1D0A6BC000FD1C44 /* tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tokenizer.h; path = ../source/mycss/tokenizer.h; sourceTree = ""; }; - 0EFCFDE91D0A6C1D00FD1C44 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = state.c; path = ../source/mycss/rules/state.c; sourceTree = ""; }; - 0EFCFDEA1D0A6C1D00FD1C44 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../source/mycss/rules/init.c; sourceTree = ""; }; - 0EFCFDEB1D0A6C1D00FD1C44 /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../source/mycss/rules/init.h; sourceTree = ""; }; - 0EFCFDEC1D0A6C1D00FD1C44 /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi.h; path = ../source/mycss/rules/myosi.h; sourceTree = ""; }; - 0EFCFDED1D0A6C1D00FD1C44 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = state.h; path = ../source/mycss/rules/state.h; sourceTree = ""; }; - 0EFCFDF31D0A6C2900FD1C44 /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parser.c; path = ../source/mycss/namespace/parser.c; sourceTree = ""; }; - 0EFCFDF41D0A6C2900FD1C44 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = state.c; path = ../source/mycss/namespace/state.c; sourceTree = ""; }; - 0EFCFDF51D0A6C2900FD1C44 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../source/mycss/namespace/init.c; sourceTree = ""; }; - 0EFCFDF61D0A6C2900FD1C44 /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../source/mycss/namespace/init.h; sourceTree = ""; }; - 0EFCFDF71D0A6C2900FD1C44 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parser.h; path = ../source/mycss/namespace/parser.h; sourceTree = ""; }; - 0EFCFDF81D0A6C2900FD1C44 /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi.h; path = ../source/mycss/namespace/myosi.h; sourceTree = ""; }; - 0EFCFDF91D0A6C2900FD1C44 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = state.h; path = ../source/mycss/namespace/state.h; sourceTree = ""; }; - 0EFCFE011D0A6C3500FD1C44 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../source/mycss/media/init.c; sourceTree = ""; }; - 0EFCFE021D0A6C3500FD1C44 /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../source/mycss/media/init.h; sourceTree = ""; }; - 0EFCFE031D0A6C3500FD1C44 /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi.h; path = ../source/mycss/media/myosi.h; sourceTree = ""; }; - 0EFCFE041D0A6C3500FD1C44 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = state.c; path = ../source/mycss/media/state.c; sourceTree = ""; }; - 0EFCFE051D0A6C3500FD1C44 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = state.h; path = ../source/mycss/media/state.h; sourceTree = ""; }; - 0EFCFE0B1D0A6C4200FD1C44 /* function.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = function.c; path = ../source/mycss/selectors/function.c; sourceTree = ""; }; - 0EFCFE0C1D0A6C4200FD1C44 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = function.h; path = ../source/mycss/selectors/function.h; sourceTree = ""; }; - 0EFCFE0D1D0A6C4200FD1C44 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../source/mycss/selectors/init.c; sourceTree = ""; }; - 0EFCFE0E1D0A6C4200FD1C44 /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../source/mycss/selectors/init.h; sourceTree = ""; }; - 0EFCFE0F1D0A6C4200FD1C44 /* myosi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi.h; path = ../source/mycss/selectors/myosi.h; sourceTree = ""; }; - 0EFCFE101D0A6C4200FD1C44 /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parser.c; path = ../source/mycss/selectors/parser.c; sourceTree = ""; }; - 0EFCFE111D0A6C4200FD1C44 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parser.h; path = ../source/mycss/selectors/parser.h; sourceTree = ""; }; - 0EFCFE121D0A6C4200FD1C44 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = state.c; path = ../source/mycss/selectors/state.c; sourceTree = ""; }; - 0EFCFE131D0A6C4200FD1C44 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = state.h; path = ../source/mycss/selectors/state.h; sourceTree = ""; }; - 0EFCFE141D0A6C4200FD1C44 /* function_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = function_resource.h; path = ../source/mycss/selectors/function_resource.h; sourceTree = ""; }; - 0EFCFE151D0A6C4200FD1C44 /* value_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = value_resource.h; path = ../source/mycss/selectors/value_resource.h; sourceTree = ""; }; - 0EFCFE161D0A6C4200FD1C44 /* value.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = value.c; path = ../source/mycss/selectors/value.c; sourceTree = ""; }; - 0EFCFE171D0A6C4200FD1C44 /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = value.h; path = ../source/mycss/selectors/value.h; sourceTree = ""; }; - 0EFCFE181D0A6C4200FD1C44 /* myosi_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = myosi_resource.h; path = ../source/mycss/selectors/myosi_resource.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0ED0C8041CF7843000A967AF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0ED0C8471CF7853700A967AF /* libmyhtml.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0ED0C7FE1CF7843000A967AF = { - isa = PBXGroup; - children = ( - 0ED0C8461CF7853700A967AF /* libmyhtml.dylib */, - 0ED0C80E1CF7843F00A967AF /* mycss */, - 0ED0C8081CF7843000A967AF /* Products */, - ); - sourceTree = ""; - }; - 0ED0C8081CF7843000A967AF /* Products */ = { - isa = PBXGroup; - children = ( - 0ED0C8071CF7843000A967AF /* libmycss.dylib */, - ); - name = Products; - sourceTree = ""; - }; - 0ED0C80E1CF7843F00A967AF /* mycss */ = { - isa = PBXGroup; - children = ( - 0EFCFD7E1D0A6BC000FD1C44 /* myosi.h */, - 0EFCFD741D0A6BC000FD1C44 /* api.h */, - 0EFCFD751D0A6BC000FD1C44 /* mycss.c */, - 0EFCFD761D0A6BC000FD1C44 /* mycss.h */, - 0EFCFD771D0A6BC000FD1C44 /* parser.c */, - 0EFCFD781D0A6BC000FD1C44 /* parser.h */, - 0EFCFD791D0A6BC000FD1C44 /* result.c */, - 0EFCFD7A1D0A6BC000FD1C44 /* result.h */, - 0EFCFD7B1D0A6BC000FD1C44 /* tokenizer.c */, - 0EFCFD7C1D0A6BC000FD1C44 /* entry.c */, - 0EFCFD7D1D0A6BC000FD1C44 /* entry.h */, - 0EFCFD7F1D0A6BC000FD1C44 /* tokenizer_global.c */, - 0EFCFD801D0A6BC000FD1C44 /* check.c */, - 0EFCFD811D0A6BC000FD1C44 /* check.h */, - 0EFCFD821D0A6BC000FD1C44 /* convert.c */, - 0EFCFD831D0A6BC000FD1C44 /* convert.h */, - 0EFCFD841D0A6BC000FD1C44 /* mystring.c */, - 0EFCFD851D0A6BC000FD1C44 /* mystring.h */, - 0EFCFD861D0A6BC000FD1C44 /* tokenizer_end.c */, - 0EFCFD871D0A6BC000FD1C44 /* tokenizer_end.h */, - 0EFCFD881D0A6BC000FD1C44 /* tokenizer_global.h */, - 0EFCFD891D0A6BC000FD1C44 /* tokenizer_resource.h */, - 0EFCFD8A1D0A6BC000FD1C44 /* tokenizer.h */, - 0EFCFDE41D0A6BF600FD1C44 /* selectors */, - 0EFCFDE61D0A6C0500FD1C44 /* media */, - 0EFCFDE71D0A6C0A00FD1C44 /* namespace */, - 0EFCFDE81D0A6C0F00FD1C44 /* rules */, - ); - name = mycss; - sourceTree = ""; - }; - 0EFCFDE41D0A6BF600FD1C44 /* selectors */ = { - isa = PBXGroup; - children = ( - 0EFCFE0B1D0A6C4200FD1C44 /* function.c */, - 0EFCFE0C1D0A6C4200FD1C44 /* function.h */, - 0EFCFE0D1D0A6C4200FD1C44 /* init.c */, - 0EFCFE0E1D0A6C4200FD1C44 /* init.h */, - 0EFCFE0F1D0A6C4200FD1C44 /* myosi.h */, - 0EFCFE101D0A6C4200FD1C44 /* parser.c */, - 0EFCFE111D0A6C4200FD1C44 /* parser.h */, - 0EFCFE121D0A6C4200FD1C44 /* state.c */, - 0EFCFE131D0A6C4200FD1C44 /* state.h */, - 0EFCFE141D0A6C4200FD1C44 /* function_resource.h */, - 0EFCFE151D0A6C4200FD1C44 /* value_resource.h */, - 0EFCFE161D0A6C4200FD1C44 /* value.c */, - 0EFCFE171D0A6C4200FD1C44 /* value.h */, - 0EFCFE181D0A6C4200FD1C44 /* myosi_resource.h */, - ); - name = selectors; - sourceTree = ""; - }; - 0EFCFDE61D0A6C0500FD1C44 /* media */ = { - isa = PBXGroup; - children = ( - 0EFCFE011D0A6C3500FD1C44 /* init.c */, - 0EFCFE021D0A6C3500FD1C44 /* init.h */, - 0EFCFE031D0A6C3500FD1C44 /* myosi.h */, - 0EFCFE041D0A6C3500FD1C44 /* state.c */, - 0EFCFE051D0A6C3500FD1C44 /* state.h */, - ); - name = media; - sourceTree = ""; - }; - 0EFCFDE71D0A6C0A00FD1C44 /* namespace */ = { - isa = PBXGroup; - children = ( - 0EFCFDF31D0A6C2900FD1C44 /* parser.c */, - 0EFCFDF41D0A6C2900FD1C44 /* state.c */, - 0EFCFDF51D0A6C2900FD1C44 /* init.c */, - 0EFCFDF61D0A6C2900FD1C44 /* init.h */, - 0EFCFDF71D0A6C2900FD1C44 /* parser.h */, - 0EFCFDF81D0A6C2900FD1C44 /* myosi.h */, - 0EFCFDF91D0A6C2900FD1C44 /* state.h */, - ); - name = namespace; - sourceTree = ""; - }; - 0EFCFDE81D0A6C0F00FD1C44 /* rules */ = { - isa = PBXGroup; - children = ( - 0EFCFDE91D0A6C1D00FD1C44 /* state.c */, - 0EFCFDEA1D0A6C1D00FD1C44 /* init.c */, - 0EFCFDEB1D0A6C1D00FD1C44 /* init.h */, - 0EFCFDEC1D0A6C1D00FD1C44 /* myosi.h */, - 0EFCFDED1D0A6C1D00FD1C44 /* state.h */, - ); - name = rules; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0ED0C8051CF7843000A967AF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0EFCFE221D0A6C4200FD1C44 /* function_resource.h in Headers */, - 0EFCFE1C1D0A6C4200FD1C44 /* init.h in Headers */, - 0EFCFDF11D0A6C1D00FD1C44 /* myosi.h in Headers */, - 0EFCFE1F1D0A6C4200FD1C44 /* parser.h in Headers */, - 0EFCFE071D0A6C3500FD1C44 /* init.h in Headers */, - 0EFCFE0A1D0A6C3500FD1C44 /* state.h in Headers */, - 0EFCFE231D0A6C4200FD1C44 /* value_resource.h in Headers */, - 0EFCFE1D1D0A6C4200FD1C44 /* myosi.h in Headers */, - 0EFCFD981D0A6BC000FD1C44 /* check.h in Headers */, - 0EFCFD8D1D0A6BC000FD1C44 /* mycss.h in Headers */, - 0EFCFDFF1D0A6C2900FD1C44 /* myosi.h in Headers */, - 0EFCFDA01D0A6BC000FD1C44 /* tokenizer_resource.h in Headers */, - 0EFCFDFD1D0A6C2900FD1C44 /* init.h in Headers */, - 0EFCFD9A1D0A6BC000FD1C44 /* convert.h in Headers */, - 0EFCFD911D0A6BC000FD1C44 /* result.h in Headers */, - 0EFCFD8B1D0A6BC000FD1C44 /* api.h in Headers */, - 0EFCFD9F1D0A6BC000FD1C44 /* tokenizer_global.h in Headers */, - 0EFCFD9C1D0A6BC000FD1C44 /* mystring.h in Headers */, - 0EFCFDF01D0A6C1D00FD1C44 /* init.h in Headers */, - 0EFCFDFE1D0A6C2900FD1C44 /* parser.h in Headers */, - 0EFCFD8F1D0A6BC000FD1C44 /* parser.h in Headers */, - 0EFCFD951D0A6BC000FD1C44 /* myosi.h in Headers */, - 0EFCFE081D0A6C3500FD1C44 /* myosi.h in Headers */, - 0EFCFDA11D0A6BC000FD1C44 /* tokenizer.h in Headers */, - 0EFCFE211D0A6C4200FD1C44 /* state.h in Headers */, - 0EFCFE251D0A6C4200FD1C44 /* value.h in Headers */, - 0EFCFD9E1D0A6BC000FD1C44 /* tokenizer_end.h in Headers */, - 0EFCFDF21D0A6C1D00FD1C44 /* state.h in Headers */, - 0EFCFE001D0A6C2900FD1C44 /* state.h in Headers */, - 0EFCFE1A1D0A6C4200FD1C44 /* function.h in Headers */, - 0EFCFE261D0A6C4200FD1C44 /* myosi_resource.h in Headers */, - 0EFCFD941D0A6BC000FD1C44 /* entry.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0ED0C8061CF7843000A967AF /* mycss */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0ED0C80B1CF7843000A967AF /* Build configuration list for PBXNativeTarget "mycss" */; - buildPhases = ( - 0ED0C8031CF7843000A967AF /* Sources */, - 0ED0C8041CF7843000A967AF /* Frameworks */, - 0ED0C8051CF7843000A967AF /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = mycss; - productName = mycss; - productReference = 0ED0C8071CF7843000A967AF /* libmycss.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0ED0C7FF1CF7843000A967AF /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0730; - ORGANIZATIONNAME = "Alexander Borisov"; - TargetAttributes = { - 0ED0C8061CF7843000A967AF = { - CreatedOnToolsVersion = 7.3.1; - }; - }; - }; - buildConfigurationList = 0ED0C8021CF7843000A967AF /* Build configuration list for PBXProject "mycss" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 0ED0C7FE1CF7843000A967AF; - productRefGroup = 0ED0C8081CF7843000A967AF /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0ED0C8061CF7843000A967AF /* mycss */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 0ED0C8031CF7843000A967AF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0EFCFE201D0A6C4200FD1C44 /* state.c in Sources */, - 0EFCFDFC1D0A6C2900FD1C44 /* init.c in Sources */, - 0EFCFDFA1D0A6C2900FD1C44 /* parser.c in Sources */, - 0EFCFD8C1D0A6BC000FD1C44 /* mycss.c in Sources */, - 0EFCFDEE1D0A6C1D00FD1C44 /* state.c in Sources */, - 0EFCFD9D1D0A6BC000FD1C44 /* tokenizer_end.c in Sources */, - 0EFCFDEF1D0A6C1D00FD1C44 /* init.c in Sources */, - 0EFCFD901D0A6BC000FD1C44 /* result.c in Sources */, - 0EFCFD971D0A6BC000FD1C44 /* check.c in Sources */, - 0EFCFDFB1D0A6C2900FD1C44 /* state.c in Sources */, - 0EFCFD921D0A6BC000FD1C44 /* tokenizer.c in Sources */, - 0EFCFD8E1D0A6BC000FD1C44 /* parser.c in Sources */, - 0EFCFE061D0A6C3500FD1C44 /* init.c in Sources */, - 0EFCFE1B1D0A6C4200FD1C44 /* init.c in Sources */, - 0EFCFD931D0A6BC000FD1C44 /* entry.c in Sources */, - 0EFCFD9B1D0A6BC000FD1C44 /* mystring.c in Sources */, - 0EFCFD991D0A6BC000FD1C44 /* convert.c in Sources */, - 0EFCFE241D0A6C4200FD1C44 /* value.c in Sources */, - 0EFCFE191D0A6C4200FD1C44 /* function.c in Sources */, - 0EFCFE091D0A6C3500FD1C44 /* state.c in Sources */, - 0EFCFE1E1D0A6C4200FD1C44 /* parser.c in Sources */, - 0EFCFD961D0A6BC000FD1C44 /* tokenizer_global.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 0ED0C8091CF7843000A967AF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 0ED0C80A1CF7843000A967AF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - 0ED0C80C1CF7843000A967AF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = lib; - HEADER_SEARCH_PATHS = ../source; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 0ED0C80D1CF7843000A967AF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = lib; - HEADER_SEARCH_PATHS = ../source; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0ED0C8021CF7843000A967AF /* Build configuration list for PBXProject "mycss" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0ED0C8091CF7843000A967AF /* Debug */, - 0ED0C80A1CF7843000A967AF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0ED0C80B1CF7843000A967AF /* Build configuration list for PBXNativeTarget "mycss" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0ED0C80C1CF7843000A967AF /* Debug */, - 0ED0C80D1CF7843000A967AF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0ED0C7FF1CF7843000A967AF /* Project object */; -} diff --git a/projects/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/projects/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6ec7197..0000000 --- a/projects/mycss.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/projects/mycss.xcodeproj/project.xcworkspace/xcshareddata/mycss.xcscmblueprint b/projects/mycss.xcodeproj/project.xcworkspace/xcshareddata/mycss.xcscmblueprint deleted file mode 100644 index a37ad3e..0000000 --- a/projects/mycss.xcodeproj/project.xcworkspace/xcshareddata/mycss.xcscmblueprint +++ /dev/null @@ -1,30 +0,0 @@ -{ - "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "98733C220E4E0BC91F352AF8F6264AF568DFB45B", - "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { - - }, - "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { - "98733C220E4E0BC91F352AF8F6264AF568DFB45B" : 0, - "B060867C3997F583FF228863A439187BDC805025" : 0 - }, - "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "9FD2EC02-1236-4D9D-9061-311E5D1B93BF", - "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { - "98733C220E4E0BC91F352AF8F6264AF568DFB45B" : "mycss\/", - "B060867C3997F583FF228863A439187BDC805025" : "myhtml\/" - }, - "DVTSourceControlWorkspaceBlueprintNameKey" : "mycss", - "DVTSourceControlWorkspaceBlueprintVersion" : 204, - "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "projects\/mycss.xcodeproj", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ - { - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/lexborisov\/mycss.git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "98733C220E4E0BC91F352AF8F6264AF568DFB45B" - }, - { - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/lexborisov\/myhtml.git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "B060867C3997F583FF228863A439187BDC805025" - } - ] -} \ No newline at end of file diff --git a/projects/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate b/projects/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 76f9d21..0000000 Binary files a/projects/mycss.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme b/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme deleted file mode 100644 index 7c9350d..0000000 --- a/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/mycss.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist b/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index cba665f..0000000 --- a/projects/mycss.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - mycss.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 0ED0C8061CF7843000A967AF - - primary - - - - - diff --git a/source/mycss/an_plus_b.c b/source/mycss/an_plus_b.c index 0ea5f8e..9c59c26 100644 --- a/source/mycss/an_plus_b.c +++ b/source/mycss/an_plus_b.c @@ -49,15 +49,15 @@ mycss_an_plus_b_t * mycss_an_plus_b_destroy(mycss_an_plus_b_t* anb, bool self_de return anb; } -bool mycss_an_plus_b_state_token_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_an_plus_b_state_token_all(mycss_entry_t* entry, mycss_token_t* token) { - return ((mycss_an_plus_b_state_f)result->state)(result, result->entry->anb, result->entry->anb->anb_entry, token); + return ((mycss_an_plus_b_state_f)entry->parser_state)(entry, entry->anb, entry->anb->anb_entry, token); } -bool mycss_an_plus_b_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_an_plus_b_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token) { if(token->type != MyCSS_TOKEN_TYPE_WHITESPACE) - return ((mycss_an_plus_b_state_f)result->state)(result, result->entry->anb, result->entry->anb->anb_entry, token); + return ((mycss_an_plus_b_state_f)entry->parser_state)(entry, entry->anb, entry->anb->anb_entry, token); return true; } @@ -66,7 +66,7 @@ bool mycss_an_plus_b_state_token_skip_whitespace(mycss_result_t* result, mycss_t //// An+B Parser //// ///////////////////////////////////////////////////////// -void mycss_an_plus_b_parser_expectations_error(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +void mycss_an_plus_b_parser_expectations_error(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { anb_entry->is_broken = true; } @@ -95,22 +95,22 @@ void mycss_an_plus_b_print(mycss_an_plus_b_entry_t* anb_entry, FILE* fh) //// An+B State //// ///////////////////////////////////////////////////////// -bool mycss_an_plus_b_state_skip_all(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_skip_all(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_anb(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_IDENT: { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); if(myhtml_strncasecmp(str.data, "-n-", 3) == 0) { @@ -119,10 +119,10 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m if(str.length == 3) { anb_entry->b = -1; - result->state = mycss_an_plus_b_state_anb_plus_n_hyphen; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_hyphen; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -135,7 +135,7 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_hyphen_n_hyphen_asterisk_end"); - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strncasecmp(str.data, "-n", 2) == 0) { MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_hyphen_n_end") @@ -143,10 +143,10 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m anb_entry->a = -1; if(str.length == 2) { - result->state = mycss_an_plus_b_state_anb_plus_n; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -158,17 +158,17 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m anb_entry->is_broken = true; } - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strncasecmp(str.data, "n-", 2) == 0) { anb_entry->a = 1; if(str.length == 2) { - result->state = mycss_an_plus_b_state_anb_plus_n_hyphen; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_hyphen; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -181,17 +181,17 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_n"); - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strncasecmp(str.data, "n", 1) == 0) { anb_entry->a = 1; if(str.length == 1) { - result->state = mycss_an_plus_b_state_anb_plus_n; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -204,27 +204,27 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_n"); - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strcasecmp(str.data, "even") == 0) { anb_entry->a = 2; anb_entry->b = 0; MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_e_v_e_n") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strcasecmp(str.data, "odd") == 0) { anb_entry->a = 2; anb_entry->b = 1; MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_o_d_d") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { myhtml_string_destroy(&str, false); - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } @@ -235,33 +235,33 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m if(*token->data == '+') { anb_entry->a = 1; - result->state = mycss_an_plus_b_state_anb_plus; + entry->parser_state = mycss_an_plus_b_state_anb_plus; - if(result->parser != mycss_an_plus_b_state_token_all) - result->parser = mycss_an_plus_b_state_token_all; + if(entry->parser != mycss_an_plus_b_state_token_all) + entry->parser = mycss_an_plus_b_state_token_all; } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } break; } case MyCSS_TOKEN_TYPE_NUMBER: { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); mycss_convert_data_to_integer(str.data, str.length, &anb_entry->b); myhtml_string_destroy(&str, false); MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_number") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } case MyCSS_TOKEN_TYPE_DIMENSION: { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); size_t consumed_len = mycss_convert_data_to_integer(str.data, str.length, &anb_entry->a); @@ -270,10 +270,10 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m size_t rem = str.length - consumed_len; if(rem == 2) { - result->state = mycss_an_plus_b_state_anb_plus_n_hyphen; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_hyphen; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -286,17 +286,17 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_n_hyphen_asterisk_end") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strncasecmp(&str.data[consumed_len], "n", 1) == 0) { size_t rem = (str.length - consumed_len) - 1; if(rem == 0) { - result->state = mycss_an_plus_b_state_anb_plus_n; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -308,13 +308,13 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_n_end") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { myhtml_string_destroy(&str, false); - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } @@ -322,8 +322,8 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m break; } default: { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } } @@ -331,20 +331,20 @@ bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, m return true; } -bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_anb_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_IDENT: { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); if(myhtml_strncasecmp(str.data, "n-", 2) == 0) { if(str.length == 2) { - result->state = mycss_an_plus_b_state_anb_plus_n_hyphen; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_hyphen; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; myhtml_string_destroy(&str, false); return true; @@ -357,20 +357,20 @@ bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* a } MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_plus_n_hyphen_asterisk_end") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(myhtml_strncasecmp(str.data, "n", 1) == 0) { MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_plus_n") - result->state = mycss_an_plus_b_state_anb_plus_n; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } else { myhtml_string_destroy(&str, false); - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } @@ -378,8 +378,8 @@ bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* a break; } default: { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } } @@ -387,14 +387,14 @@ bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* a return true; } -bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_NUMBER) { /* begin from 0-9 */ if(myhtml_string_chars_num_map[ (const unsigned char)(*token->data) ] != 0xff) { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); long res; mycss_convert_data_to_integer(str.data, str.length, &res); @@ -402,44 +402,44 @@ bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_result_t* result, mycss_an_pl anb_entry->b = -res; MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_plus_n_hyphen_zero_hyphen_nine_end") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; myhtml_string_destroy(&str, false); } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_an_plus_b_state_anb_plus_n(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_anb_plus_n(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_DELIM: { if(*token->data == '+') { - result->state = mycss_an_plus_b_state_anb_plus_n_plus; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_plus; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } else if(*token->data == '-') { - result->state = mycss_an_plus_b_state_anb_plus_n_hyphen; + entry->parser_state = mycss_an_plus_b_state_anb_plus_n_hyphen; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } break; @@ -448,24 +448,24 @@ bool mycss_an_plus_b_state_anb_plus_n(mycss_result_t* result, mycss_an_plus_b_t* if(*token->data == '+' || *token->data == '-') { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); mycss_convert_data_to_integer(str.data, str.length, &anb_entry->b); MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_plus_n_begin_plus_vertical_bar_hyphen") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; myhtml_string_destroy(&str, false); } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } break; } default: { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } } @@ -473,31 +473,31 @@ bool mycss_an_plus_b_state_anb_plus_n(mycss_result_t* result, mycss_an_plus_b_t* return true; } -bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) +bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_NUMBER) { /* begin from 0-9 */ if(myhtml_string_chars_num_map[ (const unsigned char)(*token->data) ] != 0xff) { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); mycss_convert_data_to_integer(str.data, str.length, &anb_entry->b); MyCSS_DEBUG_MESSAGE("mycss_an_plus_b_state_anb_plus_n_plus_zero_hyphen_nine_end") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; myhtml_string_destroy(&str, false); } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_an_plus_b_parser_expectations_error(result, anb, anb_entry, token); - result->parser = result->parser_switch; + mycss_an_plus_b_parser_expectations_error(entry, anb, anb_entry, token); + entry->parser = entry->parser_switch; return false; } diff --git a/source/mycss/an_plus_b.h b/source/mycss/an_plus_b.h index 5e2e3b6..ba0cf57 100644 --- a/source/mycss/an_plus_b.h +++ b/source/mycss/an_plus_b.h @@ -25,9 +25,9 @@ #ifdef __cplusplus extern "C" { #endif - -#include "mycss/result.h" + #include "mycss/entry.h" +#include "mycss/selectors/list.h" struct mycss_an_plus_b { mycss_an_plus_b_entry_t* anb_entry; @@ -39,7 +39,7 @@ struct mycss_an_plus_b_entry { long n; bool is_broken; - mycss_result_entry_t* of; + mycss_selectors_list_t* of; }; mycss_an_plus_b_t * mycss_an_plus_b_create(void); @@ -47,19 +47,19 @@ mycss_status_t mycss_an_plus_b_init(mycss_entry_t* entry, mycss_an_plus_b_t* anb mycss_status_t mycss_an_plus_b_clean_all(mycss_an_plus_b_t* anb); mycss_an_plus_b_t * mycss_an_plus_b_destroy(mycss_an_plus_b_t* anb, bool self_destroy); -bool mycss_an_plus_b_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_an_plus_b_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_an_plus_b_state_skip_all(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_an_plus_b_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_an_plus_b_state_skip_all(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); void mycss_an_plus_b_print(mycss_an_plus_b_entry_t* anb_entry, FILE* fh); -void mycss_an_plus_b_parser_expectations_error(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +void mycss_an_plus_b_parser_expectations_error(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); -bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n_hyphen(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +bool mycss_an_plus_b_state_anb_plus_n_plus(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/api.h b/source/mycss/api.h index f63005d..a4690ed 100644 --- a/source/mycss/api.h +++ b/source/mycss/api.h @@ -80,10 +80,6 @@ enum mycss_status { MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE = 0x010202, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_INIT = 0x010203, MyCSS_STATUS_ERROR_NAMESPACE_NODE_ADD = 0x010204, - MyCSS_STATUS_ERROR_RESULT_CREATE = 0x010300, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_CREATE = 0x010301, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_INIT = 0x010302, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_ADD_NODE = 0x010303, MyCSS_STATUS_ERROR_RULES_CREATE = 0x010400, MyCSS_STATUS_ERROR_STRING_CREATE = 0x010501, MyCSS_STATUS_ERROR_STRING_INIT = 0x010502, diff --git a/source/mycss/entry.c b/source/mycss/entry.c index 98c72e0..faed1f8 100644 --- a/source/mycss/entry.c +++ b/source/mycss/entry.c @@ -19,7 +19,7 @@ */ #include "mycss/entry.h" - +#include "mycss/selectors/function_resource.h" mycss_entry_t * mycss_entry_create(void) { @@ -28,13 +28,26 @@ mycss_entry_t * mycss_entry_create(void) mycss_status_t mycss_entry_init(mycss_t* mycss, mycss_entry_t* entry) { - entry->mycss = mycss; + entry->mycss = mycss; + entry->parser = mycss_parser_token; + entry->parser_switch = mycss_parser_token; + entry->parser_original = NULL; + entry->parser_state = NULL; // Other init entry->mchar = mchar_async_create(128, (4096 * 5)); entry->mchar_node_id = mchar_async_node_add(entry->mchar); entry->mchar_value_node_id = mchar_async_node_add(entry->mchar); + /* String Entries */ + entry->mcobject_string_entries = mcobject_create(); + if(entry->mcobject_string_entries == NULL) + return MyCSS_STATUS_ERROR_STRING_CREATE; + + myhtml_status_t myhtml_status = mcobject_init(entry->mcobject_string_entries, 256, sizeof(myhtml_string_t)); + if(myhtml_status) + return MyCSS_STATUS_ERROR_STRING_INIT; + /* Selectors */ entry->selectors = mycss_selectors_create(); if(entry->selectors == NULL) @@ -85,7 +98,7 @@ mycss_status_t mycss_entry_init(mycss_t* mycss, mycss_entry_t* entry) if(entry->mcobject_incoming_buffer == NULL) return MyCSS_STATUS_ERROR_ENTRY_INCOMING_BUFFER_CREATE; - myhtml_status_t myhtml_status = mcobject_init(entry->mcobject_incoming_buffer, 256, sizeof(myhtml_incoming_buffer_t)); + myhtml_status = mcobject_init(entry->mcobject_incoming_buffer, 256, sizeof(myhtml_incoming_buffer_t)); if(myhtml_status) return MyCSS_STATUS_ERROR_ENTRY_INCOMING_BUFFER_INIT; @@ -101,6 +114,8 @@ mycss_status_t mycss_entry_clean_all(mycss_entry_t* entry) mchar_async_node_clean(entry->mchar, entry->mchar_node_id); mchar_async_node_clean(entry->mchar, entry->mchar_value_node_id); + mcobject_clean(entry->mcobject_string_entries); + /* CSS Modules */ mycss_selectors_clean_all(entry->selectors); mycss_namespace_clean_all(entry->ns); @@ -108,8 +123,11 @@ mycss_status_t mycss_entry_clean_all(mycss_entry_t* entry) mycss_media_clean_all(entry->media); mycss_an_plus_b_clean_all(entry->anb); + entry->parser = mycss_parser_token; + entry->parser_switch = mycss_parser_token; + entry->parser_original = NULL; + entry->parser_state = NULL; entry->token = NULL; - entry->result = NULL; entry->state = MyCSS_TOKENIZER_STATE_DATA; entry->state_back = MyCSS_TOKENIZER_STATE_DATA; entry->first_buffer = NULL; @@ -132,6 +150,7 @@ mycss_entry_t * mycss_entry_destroy(mycss_entry_t* entry, bool self_destroy) return NULL; entry->mchar = mchar_async_destroy(entry->mchar, 1); + entry->mcobject_string_entries = mcobject_destroy(entry->mcobject_string_entries, true); /* CSS Modules */ entry->selectors = mycss_selectors_destroy(entry->selectors, true); @@ -155,6 +174,81 @@ mycss_entry_t * mycss_entry_destroy(mycss_entry_t* entry, bool self_destroy) return entry; } +void mycss_entry_end(mycss_entry_t* entry) +{ + mycss_selectors_end(entry->stylesheet->sel_list_last, entry->selectors, false); +} + +mycss_selectors_list_t * mycss_entry_get_parent_set_parser(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list) +{ + if(selectors_list->parent == NULL) { + if(entry->parser != mycss_parser_token) + entry->parser = mycss_parser_token; + + if(entry->parser_switch != mycss_parser_token) + entry->parser_switch = mycss_parser_token; + + return selectors_list; + } + + selectors_list = selectors_list->parent; + + if(selectors_list->parent) { + mycss_selectors_entry_t* selector = selectors_list->parent->selector; + + if(selector->type == MyCSS_SELECTORS_TYPE_PSEUDO_CLASS_FUNCTION) { + const mycss_selectors_function_index_t *findex = &mycss_selectors_function_parser_map_by_sub_type[ selector->sub_type ]; + + entry->parser = findex->parser; + entry->parser_switch = findex->switch_parser; + } + else { + entry->parser = mycss_parser_token; + entry->parser_switch = mycss_parser_token; + } + } + else { + if(entry->parser != mycss_parser_token) + entry->parser = mycss_parser_token; + + if(entry->parser_switch != mycss_parser_token) + entry->parser_switch = mycss_parser_token; + } + + return selectors_list; +} + +myhtml_string_t * mycss_entry_string_create_and_init(mycss_entry_t* entry, size_t string_size) +{ + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + + if(str == NULL) + return NULL; + + myhtml_string_init(entry->mchar, entry->mchar_node_id, str, (string_size + 1)); + + return str; +} + +/* Print */ + +void mycss_entry_print(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list, FILE* fh) +{ + while(selectors_list) { + for(size_t i = 0; i < selectors_list->selector_list_length; i++) { + mycss_selectors_print_chain(entry->selectors, selectors_list->selector_list[i], fh); + + if((i + 1) != selectors_list->selector_list_length) + fprintf(fh, ", "); + } + + if(selectors_list->next) + fprintf(fh, " {}\n"); + + selectors_list = selectors_list->next; + } +} + mycss_token_ready_callback_f mycss_entry_token_ready_callback(mycss_entry_t* entry, mycss_token_ready_callback_f callback_f) { if(callback_f) @@ -178,9 +272,9 @@ myhtml_incoming_buffer_t * mycss_entry_incoming_buffer_first(mycss_entry_t* entr return entry->first_buffer; } -mycss_result_t * mycss_entry_result(mycss_entry_t* entry) +mycss_stylesheet_t * mycss_entry_stylesheet(mycss_entry_t* entry) { - return entry->result; + return entry->stylesheet; } diff --git a/source/mycss/entry.h b/source/mycss/entry.h index 298b30b..f5b704f 100644 --- a/source/mycss/entry.h +++ b/source/mycss/entry.h @@ -29,7 +29,16 @@ extern "C" { #include "mycss/myosi.h" #include "mycss/mycss.h" #include "mycss/parser.h" -#include "mycss/result.h" +#include "mycss/media/myosi.h" +#include "mycss/media/init.h" +#include "mycss/stylesheet.h" +#include "mycss/an_plus_b.h" +#include "mycss/namespace/myosi.h" +#include "mycss/namespace/init.h" +#include "mycss/selectors/myosi.h" +#include "mycss/selectors/init.h" +#include "mycss/rules/myosi.h" +#include "mycss/rules/init.h" #include "myhtml/utils/mcobject.h" #include "myhtml/utils/mchar_async.h" @@ -37,19 +46,21 @@ struct mycss_entry { /* refs */ mycss_t* mycss; mycss_token_t* token; + mycss_stylesheet_t* stylesheet; /* objects and memory for css modules */ mchar_async_t* mchar; size_t mchar_node_id; size_t mchar_value_node_id; + mcobject_t* mcobject_string_entries; + /* css modules */ mycss_namespace_t* ns; mycss_selectors_t* selectors; mycss_rules_t* rules; mycss_media_t* media; mycss_an_plus_b_t* anb; - mycss_result_t* result; /* incoming buffer */ mcobject_t* mcobject_incoming_buffer; @@ -60,11 +71,19 @@ struct mycss_entry { mycss_entry_type_t type; myhtml_encoding_t encoding; + /* tokenizer */ mycss_tokenizer_state_t state; mycss_tokenizer_state_t state_back; + /* parser */ + mycss_parser_token_f parser; + mycss_parser_token_f parser_switch; + mycss_parser_token_f parser_original; + void* parser_state; + /* callbacks */ mycss_token_ready_callback_f token_ready_callback; + mycss_callback_selector_done_f callback_selector_done; /* helpers */ size_t token_counter; @@ -76,13 +95,21 @@ mycss_status_t mycss_entry_init(mycss_t* mycss, mycss_entry_t* entry); mycss_status_t mycss_entry_clean_all(mycss_entry_t* entry); mycss_entry_t * mycss_entry_destroy(mycss_entry_t* entry, bool self_destroy); +void mycss_entry_end(mycss_entry_t* entry); + +mycss_selectors_list_t * mycss_entry_get_parent_set_parser(mycss_entry_t* entry, mycss_selectors_list_t* selector_list); + +void mycss_entry_print(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list, FILE* fh); + mycss_token_ready_callback_f mycss_entry_token_ready_callback(mycss_entry_t* entry, mycss_token_ready_callback_f callback_f); size_t mycss_entry_token_count(mycss_entry_t* entry); myhtml_incoming_buffer_t * mycss_entry_incoming_buffer_current(mycss_entry_t* entry); myhtml_incoming_buffer_t * mycss_entry_incoming_buffer_first(mycss_entry_t* entry); -mycss_result_t * mycss_entry_result(mycss_entry_t* entry); +myhtml_string_t * mycss_entry_string_create_and_init(mycss_entry_t* entry, size_t string_size); + +mycss_stylesheet_t * mycss_entry_stylesheet(mycss_entry_t* entry); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/media/myosi.h b/source/mycss/media/myosi.h index 3626d65..2e0dd4e 100644 --- a/source/mycss/media/myosi.h +++ b/source/mycss/media/myosi.h @@ -30,7 +30,7 @@ extern "C" { typedef struct mycss_media mycss_media_t; -typedef bool (*mycss_media_state_f)(mycss_result_t* result, mycss_media_t* media, mycss_token_t* token); +typedef bool (*mycss_media_state_f)(mycss_entry_t* entry, mycss_media_t* media, mycss_token_t* token); struct mycss_media { diff --git a/source/mycss/media/state.c b/source/mycss/media/state.c index eded476..7a33523 100644 --- a/source/mycss/media/state.c +++ b/source/mycss/media/state.c @@ -21,24 +21,23 @@ #include "mycss/media/state.h" -bool mycss_media_state_token_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_media_state_token_all(mycss_entry_t* entry, mycss_token_t* token) { - mycss_media_t *media = result->entry->media; - return ((mycss_media_state_f)result->state)(result, media, token); + mycss_media_t *media = entry->media; + return ((mycss_media_state_f)entry->parser_state)(entry, media, token); } -bool mycss_media_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_media_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token) { if(token->type != MyCSS_TOKEN_TYPE_WHITESPACE) { - mycss_media_t *media = result->entry->media; - return ((mycss_media_state_f)result->state)(result, media, token); + mycss_media_t *media = entry->media; + return ((mycss_media_state_f)entry->parser_state)(entry, media, token); } return true; } - -bool mycss_media_state_skep_all(mycss_result_t* result, mycss_media_t* media, mycss_token_t* token) +bool mycss_media_state_skep_all(mycss_entry_t* entry, mycss_media_t* media, mycss_token_t* token) { return true; } \ No newline at end of file diff --git a/source/mycss/media/state.h b/source/mycss/media/state.h index be8c904..024d812 100644 --- a/source/mycss/media/state.h +++ b/source/mycss/media/state.h @@ -23,16 +23,16 @@ #pragma once #include "mycss/media/myosi.h" -#include "mycss/result.h" +#include "mycss/entry.h" #ifdef __cplusplus extern "C" { #endif -bool mycss_media_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_media_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_media_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_media_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_media_state_skep_all(mycss_result_t* result, mycss_media_t* media, mycss_token_t* token); +bool mycss_media_state_skep_all(mycss_entry_t* entry, mycss_media_t* media, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/mycss.c b/source/mycss/mycss.c index 7ed59f9..b525533 100644 --- a/source/mycss/mycss.c +++ b/source/mycss/mycss.c @@ -57,24 +57,19 @@ mycss_status_t mycss_parse(mycss_entry_t* entry, myhtml_encoding_t encoding, con mycss_entry_clean_all(entry); } - /* create and init new Result */ - entry->result = mycss_result_create(); - if(entry->result == NULL) - return MyCSS_STATUS_ERROR_RESULT_CREATE; - - mycss_status_t status = mycss_result_init(entry, entry->result); - if(status != MyCSS_STATUS_OK) - return status; + /* stylesheet */ + entry->stylesheet = mycss_stylesheet_create(); + mycss_stylesheet_init(entry->stylesheet, entry); /* and parse css */ mycss_encoding_set(entry, encoding); - status = mycss_tokenizer_chunk(entry, css, css_size); + mycss_status_t status = mycss_tokenizer_chunk(entry, css, css_size); if(status != MyCSS_STATUS_OK) return status; status = mycss_tokenizer_end(entry); - mycss_result_end(entry->result); + mycss_entry_end(entry); return status; } @@ -86,18 +81,9 @@ mycss_status_t mycss_parse_chunk(mycss_entry_t* entry, const char* css, size_t c } /* create and init new Result */ - if(entry->result == NULL) { - entry->result = mycss_result_create(); - - if(entry->result == NULL) - return MyCSS_STATUS_ERROR_RESULT_CREATE; - - mycss_status_t status = mycss_result_init(entry, entry->result); - - if(status != MyCSS_STATUS_OK) { - entry->result = mycss_result_destroy(entry->result, true); - return status; - } + if(entry->stylesheet == NULL) { + entry->stylesheet = mycss_stylesheet_create(); + mycss_stylesheet_init(entry->stylesheet, entry); } return mycss_tokenizer_chunk(entry, css, css_size); @@ -106,7 +92,7 @@ mycss_status_t mycss_parse_chunk(mycss_entry_t* entry, const char* css, size_t c mycss_status_t mycss_parse_chunk_end(mycss_entry_t* entry) { mycss_status_t status = mycss_tokenizer_end(entry); - mycss_result_end(entry->result); + mycss_entry_end(entry); return status; } diff --git a/source/mycss/myosi.h b/source/mycss/myosi.h index b23ab15..240173a 100644 --- a/source/mycss/myosi.h +++ b/source/mycss/myosi.h @@ -56,15 +56,14 @@ enum mycss_status { MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_CREATE = 0x010101, MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_INIT = 0x010102, MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_NODE_ADD = 0x010103, + MyCSS_STATUS_ERROR_SELECTORS_LIST_CREATE = 0x010104, + MyCSS_STATUS_ERROR_SELECTORS_LIST_INIT = 0x010105, + MyCSS_STATUS_ERROR_SELECTORS_LIST_ADD_NODE = 0x010106, MyCSS_STATUS_ERROR_NAMESPACE_CREATE = 0x010200, MyCSS_STATUS_ERROR_NAMESPACE_INIT = 0x010201, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE = 0x010202, MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_INIT = 0x010203, MyCSS_STATUS_ERROR_NAMESPACE_NODE_ADD = 0x010204, - MyCSS_STATUS_ERROR_RESULT_CREATE = 0x010300, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_CREATE = 0x010301, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_INIT = 0x010302, - MyCSS_STATUS_ERROR_RESULT_ENTRIES_ADD_NODE = 0x010303, MyCSS_STATUS_ERROR_RULES_CREATE = 0x010400, MyCSS_STATUS_ERROR_STRING_CREATE = 0x010501, MyCSS_STATUS_ERROR_STRING_INIT = 0x010502, @@ -247,17 +246,15 @@ typedef struct mycss_an_plus_b mycss_an_plus_b_t; typedef struct mycss_an_plus_b_entry mycss_an_plus_b_entry_t; // result -typedef struct mycss_result_list_parser mycss_result_list_parser_t; -typedef struct mycss_result_list mycss_result_list_t; -typedef struct mycss_result_entry mycss_result_entry_t; -typedef struct mycss_result mycss_result_t; - -enum mycss_result_entry_type { +enum mycss_stylesheet_entry_type { MyCSS_RESULT_ENTRY_TYPE_UNDEF = 0x00, MyCSS_RESULT_ENTRY_TYPE_GOOD = 0x01, MyCSS_RESULT_ENTRY_TYPE_BAD = 0x02 } -typedef mycss_result_entry_type_t; +typedef mycss_stylesheet_entry_type_t; + +// stylesheet +typedef struct mycss_stylesheet mycss_stylesheet_t; // mystring typedef struct mycss_string_escaped_res mycss_string_escaped_res_t; @@ -266,8 +263,8 @@ typedef struct mycss_string_res mycss_string_res_t; typedef size_t (*mycss_tokenizer_state_f)(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size); typedef mycss_token_t * (*mycss_token_ready_callback_f)(mycss_entry_t* entry, mycss_token_t* token); typedef size_t (*mycss_string_process_state_f)(myhtml_string_t* str, const char* data, size_t length, size_t size, mycss_string_res_t *out_res); -typedef bool (*mycss_parser_token_f)(mycss_result_t* result, mycss_token_t* token); -typedef bool (*mycss_an_plus_b_state_f)(mycss_result_t* result, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); +typedef bool (*mycss_parser_token_f)(mycss_entry_t* entry, mycss_token_t* token); +typedef bool (*mycss_an_plus_b_state_f)(mycss_entry_t* entry, mycss_an_plus_b_t* anb, mycss_an_plus_b_entry_t* anb_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/namespace/init.c b/source/mycss/namespace/init.c index a5af9de..21ca391 100644 --- a/source/mycss/namespace/init.c +++ b/source/mycss/namespace/init.c @@ -27,9 +27,6 @@ mycss_namespace_t * mycss_namespace_create(void) mycss_status_t mycss_namespace_init(mycss_entry_t* entry, mycss_namespace_t* ns) { - ns->name_tree = mctree_create(14); - ns->ns_id_counter = 0; - /* Objects Namespace */ ns->mcobject_entries = mcobject_create(); if(ns->mcobject_entries == NULL) @@ -44,10 +41,8 @@ mycss_status_t mycss_namespace_init(mycss_entry_t* entry, mycss_namespace_t* ns) mycss_status_t mycss_namespace_clean_all(mycss_namespace_t* ns) { - mctree_clean(ns->name_tree); mcobject_clean(ns->mcobject_entries); - - ns->ns_id_counter = 0; + ns->ns_entry = NULL; return MyCSS_STATUS_OK; } @@ -57,7 +52,6 @@ mycss_namespace_t * mycss_namespace_destroy(mycss_namespace_t* ns, bool self_des if(ns == NULL) return NULL; - ns->name_tree = mctree_destroy(ns->name_tree); ns->mcobject_entries = mcobject_destroy(ns->mcobject_entries, true); if(self_destroy) { @@ -68,19 +62,167 @@ mycss_namespace_t * mycss_namespace_destroy(mycss_namespace_t* ns, bool self_des return ns; } +mycss_namespace_entry_t * mycss_namespace_entry_create(mycss_namespace_t* ns) +{ + return mcobject_malloc(ns->mcobject_entries, NULL); +} + void mycss_namespace_entry_clean(mycss_namespace_entry_t* ns_entry) { memset(ns_entry, 0, sizeof(mycss_namespace_entry_t)); } -const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, size_t ns_id, size_t* length) +mycss_namespace_entry_t * mycss_namespace_entry_destroy(mycss_namespace_entry_t* ns_entry, mycss_entry_t* entry, bool self_destroy) +{ + if(ns_entry->name) { + myhtml_string_destroy(ns_entry->name, false); + mcobject_free(entry->mcobject_string_entries, ns_entry->name); + } + + if(ns_entry->url) { + myhtml_string_destroy(ns_entry->url, false); + mcobject_free(entry->mcobject_string_entries, ns_entry->url); + } + + if(self_destroy) { + myhtml_free(ns_entry); + return NULL; + } + + return ns_entry; +} + +mycss_status_t mycss_namespace_stylesheet_init(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry) +{ + ns_stylesheet->name_tree = mctree_create(14); + ns_stylesheet->ns_id_counter = 0; + ns_stylesheet->entry_default = mycss_namespace_entry_create(entry->ns); + + mycss_namespace_entry_clean(ns_stylesheet->entry_default); + mycss_namespace_entry_clean(&ns_stylesheet->entry_undef); + mycss_namespace_entry_clean(&ns_stylesheet->entry_any); + + /* init name for basic namespace entry; for default namespace entry name = NULL */ + ns_stylesheet->entry_undef.name = mycss_entry_string_create_and_init(entry, 2); + if(ns_stylesheet->entry_undef.name == NULL) + return MyCSS_STATUS_ERROR_STRING_CREATE; + + ns_stylesheet->entry_any.name = mycss_entry_string_create_and_init(entry, 2); + if(ns_stylesheet->entry_any.name == NULL) + return MyCSS_STATUS_ERROR_STRING_CREATE; + + myhtml_string_append(ns_stylesheet->entry_any.name, "*", 1); + ns_stylesheet->entry_any.ns_id = MyHTML_NAMESPACE_ANY; + + if(ns_stylesheet->entry_default == NULL) + return MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE; + + mycss_namespace_stylesheet_init_default(ns_stylesheet, entry, NULL, 0, MyHTML_NAMESPACE_ANY); + + return MyCSS_STATUS_OK; +} + +mycss_status_t mycss_namespace_stylesheet_clean(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry) +{ + mctree_clean(ns_stylesheet->name_tree); + ns_stylesheet->ns_id_counter = 0; + + mycss_namespace_stylesheet_init_default(ns_stylesheet, entry, NULL, 0, MyHTML_NAMESPACE_ANY); + + return MyCSS_STATUS_OK; +} + +mycss_namespace_stylesheet_t * mycss_namespace_stylesheet_destroy(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, bool self_destroy) +{ + mycss_namespace_entry_t* ns_entry = ns_stylesheet->entry_default; + + while(ns_entry) { + mycss_namespace_entry_t* ns_entry_next = ns_entry->next; + + mycss_namespace_entry_destroy(ns_entry, entry, false); + mcobject_free(entry->ns->mcobject_entries, ns_entry); + + ns_entry = ns_entry_next; + } + + ns_stylesheet->name_tree = mctree_destroy(ns_stylesheet->name_tree); + ns_stylesheet->entry_undef.name = myhtml_string_destroy(ns_stylesheet->entry_undef.name, false); + ns_stylesheet->entry_any.name = myhtml_string_destroy(ns_stylesheet->entry_any.name, false); + + if(self_destroy) { + myhtml_free(ns_stylesheet); + return NULL; + } + + return ns_stylesheet; +} + +mycss_status_t mycss_namespace_stylesheet_init_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, const char* url, size_t url_length, myhtml_namespace_t def_ns) +{ + myhtml_string_t *str = ns_stylesheet->entry_default->url; + + if(str == NULL) { + str = mcobject_malloc(entry->mcobject_string_entries, NULL); + myhtml_string_init(entry->mchar, entry->mchar_node_id, str, (url_length + 1)); + + ns_stylesheet->entry_default->url = str; + } + else + myhtml_string_clean(str); + + if(url && url_length) { + myhtml_string_append(str, url, url_length); + ns_stylesheet->entry_default->ns_id = myhtml_namespace_id_by_url(url, url_length); + } + else + ns_stylesheet->entry_default->ns_id = def_ns; + + ns_stylesheet->entry_default->mctree_id = 0; + ns_stylesheet->entry_default->name = NULL; + ns_stylesheet->entry_default->next = NULL; + ns_stylesheet->entry_default->prev = NULL; + + return MyCSS_STATUS_OK; +} + +void mycss_namespace_stylesheet_append_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_namespace_entry_t* ns_entry) +{ + if(ns_stylesheet->entry_default == NULL) { + ns_stylesheet->entry_default = ns_entry; + return; + } + + mycss_namespace_entry_t* ns_entry_cur = ns_stylesheet->entry_default; + + while(ns_entry_cur->next) + ns_entry_cur = ns_entry_cur->next; + + ns_entry_cur->next = ns_entry; + ns_entry->prev = ns_entry_cur; + + ns_stylesheet->entry_default = ns_entry; +} + +void mycss_namespace_stylesheet_destroy_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry) +{ + myhtml_string_t *str = ns_stylesheet->entry_default->url; + + if(str) { + myhtml_string_destroy(str, false); + mcobject_free(entry->mcobject_string_entries, str); + + ns_stylesheet->entry_default->url = NULL; + } +} + +const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, mctree_t* name_tree, size_t ns_id, size_t* length) { if(ns_id < MyHTML_NAMESPACE_LAST_ENTRY) return myhtml_namespace_name_by_id((myhtml_namespace_t)ns_id, length); ns_id -= MyHTML_NAMESPACE_LAST_ENTRY; - mycss_namespace_entry_t *entry = (mycss_namespace_entry_t*)(ns->name_tree->nodes[ ns_id ].value); + mycss_namespace_entry_t *entry = (mycss_namespace_entry_t*)(name_tree->nodes[ ns_id ].value); if(length) *length = entry->name->length; @@ -88,23 +230,70 @@ const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, size_t ns_id, siz return entry->name->data; } -void mycss_namespace_print(mycss_namespace_t* ns, size_t ns_id, FILE* fh, bool with_vbar) +const char * mycss_namespace_name_by_entry(mycss_namespace_entry_t* ns_entry, mctree_t* name_tree, size_t* length, bool* is_default) { - size_t length; - const char *name = mycss_namespace_name_by_id(ns, ns_id, &length); - - if(length == 0) { - fprintf(fh, "*"); + if(ns_entry->name == NULL) { + if(is_default) + *is_default = true; - if(with_vbar) - fprintf(fh, "|"); + if(length) + *length = 0; - return; + if(ns_entry->ns_id <= MyHTML_NAMESPACE_LAST_ENTRY) + return myhtml_namespace_name_by_id(ns_entry->ns_id, length); + + return NULL; } - fprintf(fh, "%s", name); + if(is_default) + *is_default = false; + + if(length) + *length = ns_entry->name->length; + + return ns_entry->name->data; +} + +void mycss_namespace_print(mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, FILE* fh, bool with_vbar) +{ + if(ns_entry->name && ns_entry->name->length) { + const char *ns_name = ns_entry->name->data; + + fprintf(fh, "%s", ns_name); + } + else if(ns_entry->ns_id == MyHTML_NAMESPACE_ANY) + return; //fprintf(fh, "*"); + else if(ns_entry->ns_id == MyHTML_NAMESPACE_UNDEF) + fprintf(fh, ""); + else { + if(ns_entry->ns_id < MyHTML_NAMESPACE_LAST_ENTRY) { + const char *ns_name = myhtml_namespace_name_by_id(ns_entry->ns_id, NULL); + fprintf(fh, "", ns_name); + } + else { + fprintf(fh, ""); + } + } if(with_vbar) fprintf(fh, "|"); } +mycss_namespace_entry_t * mycss_namespace_entry_by_name(mycss_namespace_t *ns, mctree_t* name_tree, const char* ns_name, size_t length, bool case_insensitive) +{ + if(ns == NULL) + return NULL; + + mctree_index_t idx; + if(case_insensitive) + idx = mctree_search_lowercase(name_tree, ns_name, length); + else + idx = mctree_search(name_tree, ns_name, length); + + if(idx == 0) + return 0; + + return (mycss_namespace_entry_t*)(name_tree->nodes[ idx ].value); +} + + diff --git a/source/mycss/namespace/init.h b/source/mycss/namespace/init.h index a185da6..1cc8997 100644 --- a/source/mycss/namespace/init.h +++ b/source/mycss/namespace/init.h @@ -27,7 +27,7 @@ extern "C" { #endif #include "mycss/namespace/myosi.h" -#include "mycss/result.h" +#include "mycss/entry.h" #include "myhtml/mynamespace.h" mycss_namespace_t * mycss_namespace_create(void); @@ -35,11 +35,23 @@ mycss_status_t mycss_namespace_init(mycss_entry_t* entry, mycss_namespace_t* ns) mycss_status_t mycss_namespace_clean_all(mycss_namespace_t* ns); mycss_namespace_t * mycss_namespace_destroy(mycss_namespace_t* ns, bool self_destroy); +mycss_status_t mycss_namespace_stylesheet_init(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); +mycss_status_t mycss_namespace_stylesheet_clean(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); +mycss_namespace_stylesheet_t * mycss_namespace_stylesheet_destroy(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, bool self_destroy); + +mycss_status_t mycss_namespace_stylesheet_init_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry, const char* url, size_t url_length, myhtml_namespace_t def_ns); +void mycss_namespace_stylesheet_append_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_namespace_entry_t* ns_entry); +void mycss_namespace_stylesheet_destroy_default(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry); + +mycss_namespace_entry_t * mycss_namespace_entry_create(mycss_namespace_t* ns); void mycss_namespace_entry_clean(mycss_namespace_entry_t* ns_entry); +mycss_namespace_entry_t * mycss_namespace_entry_destroy(mycss_namespace_entry_t* ns_entry, mycss_entry_t* entry, bool self_destroy); -const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, size_t ns_id, size_t *length); +const char * mycss_namespace_name_by_id(mycss_namespace_t* ns, mctree_t* name_tree, size_t ns_id, size_t* length); +mycss_namespace_entry_t * mycss_namespace_entry_by_name(mycss_namespace_t *ns, mctree_t* name_tree, const char* ns_name, size_t length, bool case_insensitive); +const char * mycss_namespace_name_by_entry(mycss_namespace_entry_t* ns_entry, mctree_t* name_tree, size_t* length, bool* is_default); -void mycss_namespace_print(mycss_namespace_t* ns, size_t ns_id, FILE* fh, bool with_vbar); +void mycss_namespace_print(mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, FILE* fh, bool with_vbar); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/namespace/myosi.h b/source/mycss/namespace/myosi.h index fb2fc63..f54422f 100644 --- a/source/mycss/namespace/myosi.h +++ b/source/mycss/namespace/myosi.h @@ -33,28 +33,35 @@ extern "C" { typedef struct mycss_namespace mycss_namespace_t; typedef struct mycss_namespace_entry mycss_namespace_entry_t; +typedef struct mycss_namespace_stylesheet mycss_namespace_stylesheet_t; -typedef bool (*mycss_namespace_state_f)(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); - - -struct mycss_namespace { - mycss_namespace_entry_t* ns_entry; /* current namespace entry */ - mctree_t* name_tree; // tree for namespace names - - mcobject_t* mcobject_entries; - - size_t ns_id_counter; -}; +typedef bool (*mycss_namespace_state_f)(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); struct mycss_namespace_entry { myhtml_string_t* name; myhtml_string_t* url; - size_t ns_id; + + myhtml_namespace_t ns_id; + size_t mctree_id; mycss_namespace_entry_t* next; mycss_namespace_entry_t* prev; }; +struct mycss_namespace_stylesheet { + mctree_t* name_tree; // tree for namespace names + + mycss_namespace_entry_t* entry_default; + mycss_namespace_entry_t entry_undef; + mycss_namespace_entry_t entry_any; + + size_t ns_id_counter; +}; + +struct mycss_namespace { + mycss_namespace_entry_t* ns_entry; /* current namespace entry */ + mcobject_t* mcobject_entries; +}; #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/namespace/parser.c b/source/mycss/namespace/parser.c index b5d226d..3cef930 100644 --- a/source/mycss/namespace/parser.c +++ b/source/mycss/namespace/parser.c @@ -21,7 +21,7 @@ #include "mycss/namespace/parser.h" -void mycss_namespace_parser_begin(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +void mycss_namespace_parser_begin(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { mycss_namespace_entry_t* new_ns_entry = mcobject_malloc(ns->mcobject_entries, NULL); mycss_namespace_entry_clean(new_ns_entry); @@ -34,58 +34,48 @@ void mycss_namespace_parser_begin(mycss_result_t* result, mycss_namespace_t* ns, ns->ns_entry = new_ns_entry; } -void mycss_namespace_parser_name(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +void mycss_namespace_parser_name(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); ns_entry->name = str; } -void mycss_namespace_parser_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +void mycss_namespace_parser_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); ns_entry->url = str; } -void mycss_namespace_parser_end(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +void mycss_namespace_parser_end(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { + myhtml_string_t *str_url = ns_entry->url; + ns_entry->ns_id = myhtml_namespace_id_by_url(str_url->data, str_url->length); + if(ns_entry->name) { myhtml_string_t *str = ns_entry->name; - myhtml_namespace_t ns_id; - bool find_it = myhtml_namespace_id_by_name(str->data, str->length, &ns_id); + ns_entry->mctree_id = mctree_insert(entry->stylesheet->ns_stylesheet.name_tree, str->data, str->length, (void*)ns_entry, NULL); + + if(str_url->length && ns_entry->ns_id == MyHTML_NAMESPACE_UNDEF) + ns_entry->ns_id = MyHTML_NAMESPACE_LAST_ENTRY + (myhtml_namespace_t)ns_entry->mctree_id; - if(find_it) { - ns_entry->ns_id = ns_id; - } - else { - mctree_index_t idx = mctree_search_lowercase(ns->name_tree, str->data, str->length); - - if(idx == 0) { - ns_entry->ns_id = MyHTML_NAMESPACE_LAST_ENTRY + mctree_insert(ns->name_tree, str->data, str->length, (void*)ns_entry, NULL); - ns->ns_id_counter++; - } - else { - ns_entry->ns_id = (size_t)(ns->name_tree->nodes[ idx ].value); - } - } + return; } + + mycss_namespace_stylesheet_append_default(&entry->stylesheet->ns_stylesheet, ns_entry); + ns_entry->mctree_id = mctree_insert(entry->stylesheet->ns_stylesheet.name_tree, " ", 1, (void*)ns_entry, NULL); + + if(str_url->length && ns_entry->ns_id == MyHTML_NAMESPACE_UNDEF) + ns_entry->ns_id = MyHTML_NAMESPACE_LAST_ENTRY + (myhtml_namespace_t)ns_entry->mctree_id; } -void mycss_namespace_parser_expectations_error(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +void mycss_namespace_parser_expectations_error(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { - if(ns_entry->name) { - myhtml_string_destroy(ns_entry->name, 0); - mcobject_free(result->mcobject_string_entries, ns_entry->name); - } - - if(ns_entry->url) { - myhtml_string_destroy(ns_entry->url, 0); - mcobject_free(result->mcobject_string_entries, ns_entry->url); - } + mycss_namespace_entry_destroy(ns_entry, entry, false); if(ns_entry) mcobject_free(ns->mcobject_entries, ns_entry); diff --git a/source/mycss/namespace/parser.h b/source/mycss/namespace/parser.h index 2a6906a..9d584d7 100644 --- a/source/mycss/namespace/parser.h +++ b/source/mycss/namespace/parser.h @@ -26,15 +26,16 @@ extern "C" { #endif +#include "mycss/entry.h" #include "mycss/namespace/myosi.h" -#include "mycss/result.h" #include "myhtml/mynamespace.h" +#include "myhtml/utils/mctree.h" -void mycss_namespace_parser_begin(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_name(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_end(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -void mycss_namespace_parser_expectations_error(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_begin(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_name(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_end(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +void mycss_namespace_parser_expectations_error(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); #ifdef __cplusplus diff --git a/source/mycss/namespace/state.c b/source/mycss/namespace/state.c index da3c3cd..8e4f1c3 100644 --- a/source/mycss/namespace/state.c +++ b/source/mycss/namespace/state.c @@ -20,80 +20,80 @@ #include "mycss/namespace/state.h" -bool mycss_namespace_state_token_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_namespace_state_token_all(mycss_entry_t* entry, mycss_token_t* token) { - mycss_namespace_t *ns = result->entry->ns; - return ((mycss_namespace_state_f)result->state)(result, ns, ns->ns_entry, token); + mycss_namespace_t *ns = entry->ns; + return ((mycss_namespace_state_f)entry->parser_state)(entry, ns, ns->ns_entry, token); } -bool mycss_namespace_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_namespace_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token) { if(token->type != MyCSS_TOKEN_TYPE_WHITESPACE) { - mycss_namespace_t *ns = result->entry->ns; - return ((mycss_namespace_state_f)result->state)(result, ns, ns->ns_entry, token); + mycss_namespace_t *ns = entry->ns; + return ((mycss_namespace_state_f)entry->parser_state)(entry, ns, ns->ns_entry, token); } return true; } -bool mycss_namespace_state_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_AT_KEYWORD) { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, true); + mycss_token_data_to_string(entry, token, &str, true, true); if(myhtml_strcmp(str.data, "namespace") == 0) { - mycss_namespace_parser_begin(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace; + mycss_namespace_parser_begin(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } myhtml_string_destroy(&str, false); } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; } -bool mycss_namespace_state_namespace_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_IDENT: { - mycss_namespace_parser_name(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace_ident; + mycss_namespace_parser_name(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace_ident; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_STRING: { - mycss_namespace_parser_url(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace_string; + mycss_namespace_parser_url(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace_string; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_URL: { - mycss_namespace_parser_url(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace_url; + mycss_namespace_parser_url(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace_url; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; break; } default: { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; break; } } @@ -101,85 +101,85 @@ bool mycss_namespace_state_namespace_namespace(mycss_result_t* result, mycss_nam return true; } -bool mycss_namespace_state_namespace_namespace_ident(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace_ident(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_STRING) { - mycss_namespace_parser_url(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace_ident_string; + mycss_namespace_parser_url(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace_ident_string; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; } else if(token->type == MyCSS_TOKEN_TYPE_URL) { - mycss_namespace_parser_url(result, ns, ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace_ident_url; + mycss_namespace_parser_url(entry, ns, ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace_ident_url; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; } -bool mycss_namespace_state_namespace_namespace_ident_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace_ident_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_SEMICOLON) { - mycss_namespace_parser_end(result, ns, ns_entry, token); - printf("mycss_namespace_state_namespace_namespace_ident_string_semicolon\n"); /* End of selector */ - result->parser = mycss_parser_token; + mycss_namespace_parser_end(entry, ns, ns_entry, token); + MyCSS_DEBUG_MESSAGE("mycss_namespace_state_namespace_namespace_ident_string_semicolon") + entry->parser = mycss_parser_token; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; } -bool mycss_namespace_state_namespace_namespace_ident_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace_ident_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_SEMICOLON) { - mycss_namespace_parser_end(result, ns, ns_entry, token); - printf("mycss_namespace_state_namespace_namespace_ident_url_semicolon\n"); /* End of selector */ - result->parser = mycss_parser_token; + mycss_namespace_parser_end(entry, ns, ns_entry, token); + MyCSS_DEBUG_MESSAGE("mycss_namespace_state_namespace_namespace_ident_url_semicolon") + entry->parser = mycss_parser_token; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; } -bool mycss_namespace_state_namespace_namespace_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_SEMICOLON) { - mycss_namespace_parser_end(result, ns, ns_entry, token); - printf("mycss_namespace_state_namespace_namespace_string_semicolon\n"); /* End of selector */ - result->parser = mycss_parser_token; + mycss_namespace_parser_end(entry, ns, ns_entry, token); + MyCSS_DEBUG_MESSAGE("mycss_namespace_state_namespace_namespace_string_semicolon") + entry->parser = mycss_parser_token; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; } -bool mycss_namespace_state_namespace_namespace_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) +bool mycss_namespace_state_namespace_namespace_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_SEMICOLON) { - mycss_namespace_parser_end(result, ns, ns_entry, token); - printf("mycss_namespace_state_namespace_namespace_url_semicolon\n"); /* End of selector */ - result->parser = mycss_parser_token; + mycss_namespace_parser_end(entry, ns, ns_entry, token); + MyCSS_DEBUG_MESSAGE("mycss_namespace_state_namespace_namespace_url_semicolon") + entry->parser = mycss_parser_token; } else { - mycss_namespace_parser_expectations_error(result, ns, ns_entry, token); - result->parser = mycss_parser_token; + mycss_namespace_parser_expectations_error(entry, ns, ns_entry, token); + entry->parser = mycss_parser_token; } return true; diff --git a/source/mycss/namespace/state.h b/source/mycss/namespace/state.h index 91e51a8..2af674d 100644 --- a/source/mycss/namespace/state.h +++ b/source/mycss/namespace/state.h @@ -26,22 +26,21 @@ extern "C" { #endif -#include "mycss/mycss.h" -#include "mycss/result.h" +#include "mycss/entry.h" #include "mycss/namespace/myosi.h" #include "mycss/namespace/parser.h" #include "myhtml/utils.h" -bool mycss_namespace_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_namespace_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_namespace_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_namespace_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_namespace_state_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_ident_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_string(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); -bool mycss_namespace_state_namespace_namespace_url(mycss_result_t* result, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_ident_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_string(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); +bool mycss_namespace_state_namespace_namespace_url(mycss_entry_t* entry, mycss_namespace_t* ns, mycss_namespace_entry_t* ns_entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/parser.c b/source/mycss/parser.c index 989e84c..3b019da 100644 --- a/source/mycss/parser.c +++ b/source/mycss/parser.c @@ -26,33 +26,32 @@ mycss_token_t * mycss_parser_token_ready_callback_function(mycss_entry_t* entry, if(token->type == MyCSS_TOKEN_TYPE_COMMENT) return token; - while(entry->result->parser(entry->result, token) == false) {}; + while(entry->parser(entry, token) == false) {}; return entry->token; } -bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token) +bool mycss_parser_token(mycss_entry_t* entry, mycss_token_t* token) { - mycss_entry_t* entry = result->entry; - mycss_result_entry_t *res_entry = result->result_entry; + mycss_selectors_list_t *selectors_list = entry->stylesheet->sel_list_last; switch (token->type) { /* Selectors */ case MyCSS_TOKEN_TYPE_IDENT: { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_ident"); - mycss_selectors_parser_selector_ident_type(result, entry->selectors, res_entry->selector, token); - result->state = mycss_selectors_state_simple_selector_ident; + mycss_selectors_parser_selector_ident_type(entry, entry->selectors, selectors_list->selector, token); + entry->parser_state = mycss_selectors_state_simple_selector_ident; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } case MyCSS_TOKEN_TYPE_COMMA: { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_comma"); - mycss_selectors_parser_selector_comma(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_selector_comma(entry, entry->selectors, selectors_list->selector, token); break; } case MyCSS_TOKEN_TYPE_DELIM: { @@ -61,55 +60,53 @@ bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token) case '+': { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_plus"); - mycss_selectors_parser_selector_combinator_plus(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_selector_combinator_plus(entry, entry->selectors, selectors_list->selector, token); return true; } case '>': { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_greater_than"); - mycss_selectors_parser_selector_combinator_greater_than(result, entry->selectors, res_entry->selector, token); - result->state = mycss_selectors_state_combinator_greater_than; + mycss_selectors_parser_selector_combinator_greater_than(entry, entry->selectors, selectors_list->selector, token); + entry->parser_state = mycss_selectors_state_combinator_greater_than; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case '~': { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_tilde"); - mycss_selectors_parser_selector_combinator_tilde(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_selector_combinator_tilde(entry, entry->selectors, selectors_list->selector, token); return true; } /* simple-selector */ case '*': { - MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_asterisk"); + mycss_selectors_parser_selector_ident_type(entry, entry->selectors, selectors_list->selector, token); + MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_asterisk") - mycss_selectors_parser_selector_ident_type(result, entry->selectors, res_entry->selector, token); - mycss_selectors_parser_selector_end(result, entry->selectors, res_entry->selector, token); - - return true; + entry->parser_state = mycss_selectors_state_simple_selector_ident; + break; } case '.': { - result->state = mycss_selectors_state_simple_selector_full_stop; + entry->parser_state = mycss_selectors_state_simple_selector_full_stop; break; } case '|': { - mycss_selectors_parser_selector_ident_type(result, entry->selectors, res_entry->selector, token); - mycss_selectors_parser_selector_namespace(result, entry->selectors, res_entry->selector, token); - result->state = mycss_selectors_state_simple_selector_vertical_bar; + mycss_selectors_parser_selector_namespace_ident(entry, entry->selectors, selectors_list->selector, token); + entry->parser_state = mycss_selectors_state_simple_selector_vertical_bar; break; } default: { // parse error - mycss_selectors_parser_bad_token(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_bad_token(entry, entry->selectors, selectors_list->selector, token); return true; } } - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } @@ -117,65 +114,65 @@ bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token) case MyCSS_TOKEN_TYPE_COLUMN: { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_column"); - mycss_selectors_parser_selector_combinator_column(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_selector_combinator_column(entry, entry->selectors, selectors_list->selector, token); - result->parser = mycss_parser_token; + entry->parser = mycss_parser_token; break; } case MyCSS_TOKEN_TYPE_WHITESPACE: { - if(res_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, entry->selectors, res_entry->selector); + if(selectors_list->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) + mycss_selectors_parser_selector_create_new_entry(entry, entry->selectors, selectors_list->selector); - if(res_entry->selector->combinator == MyCSS_SELECTORS_COMBINATOR_UNDEF && res_entry->selector->prev) { - mycss_selectors_parser_selector_combinator_whitespace(result, entry->selectors, res_entry->selector, token); + if(selectors_list->selector->combinator == MyCSS_SELECTORS_COMBINATOR_UNDEF && selectors_list->selector->prev) { + mycss_selectors_parser_selector_combinator_whitespace(entry, entry->selectors, selectors_list->selector, token); } break; } case MyCSS_TOKEN_TYPE_COLON: { - result->state = mycss_selectors_state_simple_selector_colon; + entry->parser_state = mycss_selectors_state_simple_selector_colon; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } case MyCSS_TOKEN_TYPE_LEFT_SQUARE_BRACKET: { - result->state = mycss_selectors_state_simple_selector_left_bracket; + entry->parser_state = mycss_selectors_state_simple_selector_left_bracket; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_HASH: { MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_hash"); - mycss_selectors_parser_selector_id(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_selector_id(entry, entry->selectors, selectors_list->selector, token); break; } /* Namespace and Media */ case MyCSS_TOKEN_TYPE_AT_KEYWORD: { myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, true); + mycss_token_data_to_string(entry, token, &str, true, true); if(myhtml_strcmp(str.data, "namespace") == 0) { - mycss_namespace_parser_begin(result, entry->ns, entry->ns->ns_entry, token); - result->state = mycss_namespace_state_namespace_namespace; + mycss_namespace_parser_begin(entry, entry->ns, entry->ns->ns_entry, token); + entry->parser_state = mycss_namespace_state_namespace_namespace; - if(result->parser != mycss_namespace_state_token_skip_whitespace) - result->parser = mycss_namespace_state_token_skip_whitespace; + if(entry->parser != mycss_namespace_state_token_skip_whitespace) + entry->parser = mycss_namespace_state_token_skip_whitespace; } else if(myhtml_strcmp(str.data, "media") == 0) { - result->state = mycss_media_state_skep_all; + entry->parser_state = mycss_media_state_skep_all; - if(result->parser != mycss_media_state_token_skip_whitespace) - result->parser = mycss_media_state_token_skip_whitespace; + if(entry->parser != mycss_media_state_token_skip_whitespace) + entry->parser = mycss_media_state_token_skip_whitespace; } else { // parse error myhtml_string_destroy(&str, false); - mycss_selectors_parser_bad_token(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_bad_token(entry, entry->selectors, selectors_list->selector, token); return true; } @@ -185,18 +182,18 @@ bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token) } /* Rules */ case MyCSS_TOKEN_TYPE_LEFT_CURLY_BRACKET: { - mycss_selectors_end(res_entry, entry->selectors, true); + mycss_selectors_end(selectors_list, entry->selectors, true); - result->state = mycss_rules_state_body; + entry->parser_state = mycss_rules_state_body; - if(result->parser != mycss_rules_state_token_skip_whitespace) - result->parser = mycss_rules_state_token_skip_whitespace; + if(entry->parser != mycss_rules_state_token_skip_whitespace) + entry->parser = mycss_rules_state_token_skip_whitespace; break; } default: { // parse error - mycss_selectors_parser_bad_token(result, entry->selectors, res_entry->selector, token); + mycss_selectors_parser_bad_token(entry, entry->selectors, selectors_list->selector, token); break; } } diff --git a/source/mycss/parser.h b/source/mycss/parser.h index a0c8522..a3d1aa8 100644 --- a/source/mycss/parser.h +++ b/source/mycss/parser.h @@ -40,7 +40,7 @@ extern "C" { mycss_token_t * mycss_parser_token_ready_callback_function(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_parser_token(mycss_result_t* result, mycss_token_t* token); +bool mycss_parser_token(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus diff --git a/source/mycss/result.c b/source/mycss/result.c deleted file mode 100644 index 0f5f5df..0000000 --- a/source/mycss/result.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - Copyright (C) 2016 Alexander Borisov - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - Author: lex.borisov@gmail.com (Alexander Borisov) -*/ - -#include "mycss/result.h" -#include "mycss/selectors/function_resource.h" - -mycss_result_t * mycss_result_create(void) -{ - return (mycss_result_t*)myhtml_calloc(1, sizeof(mycss_result_t)); -} - -mycss_status_t mycss_result_init(mycss_entry_t* entry, mycss_result_t* result) -{ - result->entry = entry; - result->parser = mycss_parser_token; - result->parser_switch = mycss_parser_token; - result->parser_original = NULL; - result->state = NULL; - result->callback_selector_done = NULL; - - /* Result Entries */ - result->mcobject_entries = mcobject_create(); - if(result->mcobject_entries == NULL) - return MyCSS_STATUS_ERROR_RESULT_ENTRIES_CREATE; - - myhtml_status_t myhtml_status = mcobject_init(result->mcobject_entries, 256, sizeof(mycss_result_entry_t)); - if(myhtml_status) - return MyCSS_STATUS_ERROR_RESULT_ENTRIES_INIT; - - /* String Entries */ - result->mcobject_string_entries = mcobject_create(); - if(result->mcobject_string_entries == NULL) - return MyCSS_STATUS_ERROR_STRING_CREATE; - - myhtml_status = mcobject_init(result->mcobject_string_entries, 256, sizeof(mycss_result_entry_t)); - if(myhtml_status) - return MyCSS_STATUS_ERROR_STRING_INIT; - - /* create first result entry and selector */ - if(entry->selectors) { - result->result_entry = result->result_entry_first = mycss_result_entry_create(result); - result->result_entry->selector = mycss_selectors_entry_create(entry->selectors); - mycss_result_entry_append_selector(result, result->result_entry, result->result_entry->selector); - } - - return MyCSS_STATUS_OK; -} - -mycss_status_t mycss_result_clean_all(mycss_result_t* result) -{ - result->parser = mycss_parser_token; - result->parser_switch = mycss_parser_token; - result->parser_original = NULL; - result->state = NULL; - result->callback_selector_done = NULL; - - mcobject_clean(result->mcobject_entries); - mcobject_clean(result->mcobject_string_entries); - - return MyCSS_STATUS_OK; -} - -mycss_result_t * mycss_result_destroy(mycss_result_t* result, bool self_destroy) -{ - if(result == NULL) - return NULL; - - result->mcobject_entries = mcobject_destroy(result->mcobject_entries, true); - result->mcobject_string_entries = mcobject_destroy(result->mcobject_string_entries, true); - - if(result) { - myhtml_free(result); - return NULL; - } - - return result; -} - -void mycss_result_end(mycss_result_t* result) -{ - mycss_selectors_end(result->result_entry, result->entry->selectors, false); -} - -mycss_result_entry_t * mycss_result_entry_create(mycss_result_t* result) -{ - mycss_result_entry_t* res_entry = mcobject_malloc(result->mcobject_entries, NULL); - mycss_result_entry_clean(res_entry); - return res_entry; -} - -void mycss_result_entry_clean(mycss_result_entry_t* result_entry) -{ - memset(result_entry, 0, sizeof(mycss_result_entry_t)); -} - -mycss_result_entry_t * mycss_result_entry_destroy(mycss_result_t* result, mycss_result_entry_t* result_entry, bool self_destroy) -{ - if(result_entry == NULL) - return NULL; - - mycss_entry_t *entry = result->entry; - - if(result_entry->selector_list) - { - for(size_t i = 0; i < result_entry->selector_list_length; i++) - mycss_selectors_entry_destroy(entry->selectors, result_entry->selector_list[i], true); - - mycss_selectors_entry_list_destroy(entry->selectors, result_entry->selector_list); - } - - if(self_destroy) { - mcobject_free(result->mcobject_entries, result_entry); - return NULL; - } - - return result_entry; -} - -mycss_result_entry_t * mycss_result_entry_create_and_push(mycss_result_t* result) -{ - mycss_result_entry_t* res_entry = mycss_result_entry_create(result); - - if(result->result_entry) { - res_entry->prev = result->result_entry; - result->result_entry->next = res_entry; - } - - result->result_entry = res_entry; - return res_entry; -} - -mycss_result_entry_t * mycss_result_entry_append_selector(mycss_result_t* result, mycss_result_entry_t* res_entry, mycss_selectors_entry_t* selector) -{ - if(res_entry->selector_list == NULL) { - res_entry->selector_list = mycss_selectors_entry_list_create(result->entry->selectors); - } - else { - res_entry->selector_list = mycss_selectors_entry_list_add_one(result->entry->selectors, res_entry->selector_list, res_entry->selector_list_length); - } - - res_entry->selector_list[res_entry->selector_list_length] = selector; - res_entry->selector_list_length++; - - return res_entry; -} - -mycss_result_entry_t * mycss_result_entry_create_next_level_of_selectors(mycss_result_t* result, mycss_result_entry_t* current_res_entry) -{ - mycss_result_entry_t *res_entry = mycss_result_entry_create(result); - - res_entry->parent = current_res_entry; - result->result_entry = res_entry; - - res_entry->selector = mycss_selectors_entry_create(result->entry->selectors); - mycss_result_entry_append_selector(result, result->result_entry, res_entry->selector); - - return res_entry; -} - -mycss_result_entry_t * mycss_result_get_parent_set_parser(mycss_result_t* result, mycss_result_entry_t* res_entry) -{ - if(res_entry->parent == NULL) { - if(result->parser != mycss_parser_token) - result->parser = mycss_parser_token; - - if(result->parser_switch != mycss_parser_token) - result->parser_switch = mycss_parser_token; - - return res_entry; - } - - res_entry = res_entry->parent; - - if(res_entry->parent) { - mycss_selectors_entry_t* selector = res_entry->parent->selector; - - if(selector->type == MyCSS_SELECTORS_TYPE_PSEUDO_CLASS_FUNCTION) { - const mycss_selectors_function_index_t *findex = &mycss_selectors_function_parser_map_by_sub_type[ selector->sub_type ]; - - result->parser = findex->parser; - result->parser_switch = findex->switch_parser; - } - else { - result->parser = mycss_parser_token; - result->parser_switch = mycss_parser_token; - } - } - else { - if(result->parser != mycss_parser_token) - result->parser = mycss_parser_token; - - if(result->parser_switch != mycss_parser_token) - result->parser_switch = mycss_parser_token; - } - - return res_entry; -} - -/* Print */ - -size_t mycss_result_detect_namespace_by_name(mycss_result_t* result, const char* ns_name, size_t length) -{ - mycss_namespace_t *ns = result->entry->ns; - - if(ns == NULL) - return 0; - - myhtml_namespace_t ns_id; - bool find_it = myhtml_namespace_id_by_name(ns_name, length, &ns_id); - - if(find_it) - return (size_t)ns_id; - - if(ns->name_tree == NULL) - return 0; - - mctree_index_t idx = mctree_search_lowercase(ns->name_tree, ns_name, length); - - if(idx == 0) - return 0; - - mycss_namespace_entry_t *entry = (mycss_namespace_entry_t*)(ns->name_tree->nodes[ idx ].value); - return entry->ns_id; -} - -void mycss_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_entry, FILE* fh) -{ - while(res_entry) { - for(size_t i = 0; i < res_entry->selector_list_length; i++) { - mycss_selectors_print_chain(result->entry->selectors, res_entry->selector_list[i], fh); - - if((i + 1) != res_entry->selector_list_length) - fprintf(fh, ", "); - } - - if(res_entry->next) - fprintf(fh, " {}\n"); - - res_entry = res_entry->next; - } -} - - diff --git a/source/mycss/result.h b/source/mycss/result.h deleted file mode 100644 index 7901d98..0000000 --- a/source/mycss/result.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (C) 2016 Alexander Borisov - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - Author: lex.borisov@gmail.com (Alexander Borisov) -*/ - -#ifndef MyHTML_MyCSS_RESULT_H -#define MyHTML_MyCSS_RESULT_H -#pragma once - -#include "mycss/myosi.h" -#include "mycss/media/myosi.h" -#include "mycss/media/init.h" -#include "mycss/an_plus_b.h" -#include "mycss/namespace/myosi.h" -#include "mycss/namespace/init.h" -#include "mycss/selectors/myosi.h" -#include "mycss/selectors/init.h" -#include "mycss/rules/myosi.h" -#include "mycss/rules/init.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct mycss_result { - /* refs */ - mycss_entry_t* entry; - - /* memory and objects */ - mcobject_t* mcobject_entries; - mcobject_t* mcobject_string_entries; - - /* current parsing tmp */ - mycss_result_entry_t* result_entry_first; /* first */ - mycss_result_entry_t* result_entry; /* current */ - - mycss_parser_token_f parser; - mycss_parser_token_f parser_switch; - mycss_parser_token_f parser_original; - void* state; - - /* callbacks */ - mycss_callback_selector_done_f callback_selector_done; -}; - -struct mycss_result_entry { - mycss_selectors_entry_t** selector_list; - size_t selector_list_length; - - mycss_selectors_entry_t* selector; /* current selector/last entry */ - - mycss_result_entry_t* parent; - mycss_result_entry_t* next; - mycss_result_entry_t* prev; -}; - -mycss_result_t * mycss_result_create(void); -mycss_status_t mycss_result_init(mycss_entry_t* entry, mycss_result_t* result); -mycss_status_t mycss_result_clean_all(mycss_result_t* result); -mycss_result_t * mycss_result_destroy(mycss_result_t* result, bool self_destroy); -void mycss_result_end(mycss_result_t* result); - -mycss_result_entry_t * mycss_result_entry_create(mycss_result_t* result); -void mycss_result_entry_clean(mycss_result_entry_t* result_entry); -mycss_result_entry_t * mycss_result_entry_destroy(mycss_result_t* result, mycss_result_entry_t* result_entry, bool self_destroy); -mycss_result_entry_t * mycss_result_entry_create_and_push(mycss_result_t* result); -mycss_result_entry_t * mycss_result_entry_append_selector(mycss_result_t* result, mycss_result_entry_t* res_entry, mycss_selectors_entry_t* selector); -mycss_result_entry_t * mycss_result_get_parent_set_parser(mycss_result_t* result, mycss_result_entry_t* res_entry); -mycss_result_entry_t * mycss_result_entry_create_next_level_of_selectors(mycss_result_t* result, mycss_result_entry_t* current_res_entry); - -void mycss_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_entry, FILE* fh); - -size_t mycss_result_detect_namespace_by_name(mycss_result_t* result, const char* ns, size_t length); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* MyHTML_MyCSS_RESULT_H */ diff --git a/source/mycss/rules/myosi.h b/source/mycss/rules/myosi.h index 6ecf3f0..4eb8a6a 100644 --- a/source/mycss/rules/myosi.h +++ b/source/mycss/rules/myosi.h @@ -30,7 +30,7 @@ extern "C" { typedef struct mycss_rules mycss_rules_t; -typedef bool (*mycss_rules_state_f)(mycss_result_t* result, mycss_rules_t* rules, mycss_token_t* token); +typedef bool (*mycss_rules_state_f)(mycss_entry_t* entry, mycss_rules_t* rules, mycss_token_t* token); struct mycss_rules { diff --git a/source/mycss/rules/state.c b/source/mycss/rules/state.c index cc57ac7..8874a96 100644 --- a/source/mycss/rules/state.c +++ b/source/mycss/rules/state.c @@ -21,32 +21,34 @@ #include "mycss/rules/state.h" -bool mycss_rules_state_token_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_rules_state_token_all(mycss_entry_t* entry, mycss_token_t* token) { - mycss_rules_t *rules = result->entry->rules; - return ((mycss_rules_state_f)result->state)(result, rules, token); + mycss_rules_t *rules = entry->rules; + return ((mycss_rules_state_f)entry->parser_state)(entry, rules, token); } -bool mycss_rules_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_rules_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token) { if(token->type != MyCSS_TOKEN_TYPE_WHITESPACE) { - mycss_rules_t *rules = result->entry->rules; - return ((mycss_rules_state_f)result->state)(result, rules, token); + mycss_rules_t *rules = entry->rules; + return ((mycss_rules_state_f)entry->parser_state)(entry, rules, token); } return true; } -bool mycss_rules_state_body(mycss_result_t* result, mycss_rules_t* rules, mycss_token_t* token) +bool mycss_rules_state_body(mycss_entry_t* entry, mycss_rules_t* rules, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_CURLY_BRACKET) { //printf("mycss_rules_state_body_closing_brace\n"); /* End of rules */ - mycss_result_entry_create_and_push(result); - result->result_entry->selector = mycss_selectors_entry_create(result->entry->selectors); - mycss_result_entry_append_selector(result, result->result_entry, result->result_entry->selector); + mycss_stylesheet_t *stylesheet = entry->stylesheet; - result->parser = mycss_parser_token; + stylesheet->sel_list_last = mycss_selectors_list_create_and_push(entry->selectors, stylesheet->sel_list_last); + stylesheet->sel_list_last->selector = mycss_selectors_entry_create(entry->selectors); + mycss_selectors_list_append_selector(entry->selectors, stylesheet->sel_list_last, stylesheet->sel_list_last->selector); + + entry->parser = mycss_parser_token; } return true; diff --git a/source/mycss/rules/state.h b/source/mycss/rules/state.h index ef46b30..5bc43aa 100644 --- a/source/mycss/rules/state.h +++ b/source/mycss/rules/state.h @@ -23,16 +23,16 @@ #pragma once #include "mycss/rules/myosi.h" -#include "mycss/result.h" +#include "mycss/entry.h" #ifdef __cplusplus extern "C" { #endif -bool mycss_rules_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_rules_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); +bool mycss_rules_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_rules_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_rules_state_body(mycss_result_t* result, mycss_rules_t* rules, mycss_token_t* token); +bool mycss_rules_state_body(mycss_entry_t* entry, mycss_rules_t* rules, mycss_token_t* token); #ifdef __cplusplus diff --git a/source/mycss/selectors/function.c b/source/mycss/selectors/function.c index e2a04f9..b39bfad 100644 --- a/source/mycss/selectors/function.c +++ b/source/mycss/selectors/function.c @@ -70,211 +70,211 @@ mycss_selectors_function_begin_f mycss_function_begin_by_name(const char *name, //// Begin functions //// ///////////////////////////////////////////////////////// -void mycss_selectors_function_begin_nth_child(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_CHILD; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_with_selectors_before_of_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_with_selectors_before_of_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_has(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_has(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_HAS; - selector->value = mycss_result_entry_create_next_level_of_selectors(result, result->result_entry); + selector->value = mycss_selectors_list_create_next_level_of_selectors(entry->selectors, entry->stylesheet, entry->stylesheet->sel_list_last); /* switch to function not parser find simple selector */ - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; - result->parser_original = mycss_selectors_function_has_parser; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_process; - result->state = mycss_selectors_state_simple_selector; + entry->parser_original = mycss_selectors_function_has_parser; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_process; + entry->parser_state = mycss_selectors_state_simple_selector; } -void mycss_selectors_function_begin_nth_last_child(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_last_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_LAST_CHILD; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_with_selectors_before_of_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_with_selectors_before_of_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_drop(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_drop(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_DROP; selector->value = NULL; - if(result->parser != mycss_selectors_function_drop_parser) - result->parser = mycss_selectors_function_drop_parser; + if(entry->parser != mycss_selectors_function_drop_parser) + entry->parser = mycss_selectors_function_drop_parser; } -void mycss_selectors_function_begin_nth_last_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_last_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_LAST_OF_TYPE; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_without_selectors_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_without_selectors_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_not(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_not(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NOT; - selector->value = mycss_result_entry_create_next_level_of_selectors(result, result->result_entry); + selector->value = mycss_selectors_list_create_next_level_of_selectors(entry->selectors, entry->stylesheet, entry->stylesheet->sel_list_last); /* switch to function not parser find simple selector list */ - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; - result->parser_original = mycss_selectors_function_not_or_matches_parser; - result->parser_switch = mycss_selectors_parser_selectors_list_process; - result->state = mycss_selectors_state_simple_selector; + entry->parser_original = mycss_selectors_function_not_or_matches_parser; + entry->parser_switch = mycss_selectors_parser_selectors_list_process; + entry->parser_state = mycss_selectors_state_simple_selector; } -void mycss_selectors_function_begin_current(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_current(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_CURRENT; - selector->value = mycss_result_entry_create_next_level_of_selectors(result, result->result_entry); + selector->value = mycss_selectors_list_create_next_level_of_selectors(entry->selectors, entry->stylesheet, entry->stylesheet->sel_list_last); /* switch to function not parser find simple selector list */ - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; - result->parser_original = mycss_selectors_function_not_or_matches_parser; - result->parser_switch = mycss_selectors_parser_selectors_list_process; - result->state = mycss_selectors_state_simple_selector; + entry->parser_original = mycss_selectors_function_not_or_matches_parser; + entry->parser_switch = mycss_selectors_parser_selectors_list_process; + entry->parser_state = mycss_selectors_state_simple_selector; } -void mycss_selectors_function_begin_nth_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_OF_TYPE; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_without_selectors_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_without_selectors_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_nth_last_column(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_last_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_LAST_COLUMN; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_without_selectors_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_without_selectors_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_dir(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_dir(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_DIR; selector->value = NULL; - if(result->parser != mycss_selectors_function_dir_parser) - result->parser = mycss_selectors_function_dir_parser; + if(entry->parser != mycss_selectors_function_dir_parser) + entry->parser = mycss_selectors_function_dir_parser; } -void mycss_selectors_function_begin_matches(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_matches(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_MATCHES; - selector->value = mycss_result_entry_create_next_level_of_selectors(result, result->result_entry); + selector->value = mycss_selectors_list_create_next_level_of_selectors(entry->selectors, entry->stylesheet, entry->stylesheet->sel_list_last); /* switch to function "not parser" find simple selector list */ - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; - result->parser_original = mycss_selectors_function_not_or_matches_parser; - result->parser_switch = mycss_selectors_parser_selectors_list_process; - result->state = mycss_selectors_state_simple_selector; + entry->parser_original = mycss_selectors_function_not_or_matches_parser; + entry->parser_switch = mycss_selectors_parser_selectors_list_process; + entry->parser_state = mycss_selectors_state_simple_selector; } -void mycss_selectors_function_begin_nth_column(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_nth_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_COLUMN; - mycss_an_plus_b_entry_t *res_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(result, true); - selector->value = res_entry; + mycss_an_plus_b_entry_t *anb_entry = mycss_selectors_value_pseudo_class_function_nth_child_create(entry, true); + selector->value = anb_entry; - result->entry->anb->anb_entry = res_entry; + entry->anb->anb_entry = anb_entry; - result->parser_switch = mycss_selectors_function_nth_without_selectors_parser; - result->state = mycss_an_plus_b_state_anb; + entry->parser_switch = mycss_selectors_function_nth_without_selectors_parser; + entry->parser_state = mycss_an_plus_b_state_anb; - if(result->parser != mycss_an_plus_b_state_token_skip_whitespace) - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + if(entry->parser != mycss_an_plus_b_state_token_skip_whitespace) + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; } -void mycss_selectors_function_begin_lang(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_function_begin_lang(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_LANG; selector->value = NULL; - if(result->parser != mycss_selectors_function_lang_parser) - result->parser = mycss_selectors_function_lang_parser; + if(entry->parser != mycss_selectors_function_lang_parser) + entry->parser = mycss_selectors_function_lang_parser; } ///////////////////////////////////////////////////////// //// Unknown, for not exists function //// ///////////////////////////////////////////////////////// -void mycss_selectors_begin_unknown(mycss_result_t* result, mycss_selectors_entry_t* selector) +void mycss_selectors_begin_unknown(mycss_entry_t* entry, mycss_selectors_entry_t* selector) { selector->sub_type = MyCSS_SELECTORS_SUB_TYPE_UNKNOWN; - result->parser = mycss_selectors_unknown_parser; + entry->parser = mycss_selectors_unknown_parser; } -bool mycss_selectors_unknown_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_unknown_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } return true; @@ -284,10 +284,10 @@ bool mycss_selectors_unknown_parser(mycss_result_t* result, mycss_token_t* token //// NOT AND MATCHES AND CURRENT //// ///////////////////////////////////////////////////////// -void mycss_selectors_function_find_not_selector(mycss_result_entry_t* result_entry) +void mycss_selectors_function_find_not_selector(mycss_selectors_list_t* selectors_list) { - for(size_t i = 0; i < result_entry->selector_list_length; i++) { - mycss_selectors_entry_t* selector = result_entry->selector_list[i]; + for(size_t i = 0; i < selectors_list->selector_list_length; i++) { + mycss_selectors_entry_t* selector = selectors_list->selector_list[i]; while(selector) { if(selector->sub_type == MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_MATCHES || @@ -295,7 +295,7 @@ void mycss_selectors_function_find_not_selector(mycss_result_entry_t* result_ent selector->sub_type == MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_CURRENT || selector->type == MyCSS_SELECTORS_TYPE_PSEUDO_ELEMENT) { - selector = result_entry->parent->selector; + selector = selectors_list->parent->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -308,27 +308,27 @@ void mycss_selectors_function_find_not_selector(mycss_result_entry_t* result_ent } } -bool mycss_selectors_function_not_or_matches_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_not_or_matches_parser(mycss_entry_t* entry, mycss_token_t* token) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - mycss_result_entry_t *result_entry = result->result_entry; - mycss_selectors_function_find_not_selector(result_entry); + mycss_selectors_list_t *selectors_list = entry->stylesheet->sel_list_last; + mycss_selectors_function_find_not_selector(selectors_list); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, selectors_list); - if(result_entry->selector_list_length == 0) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + if(selectors_list->selector_list_length == 0) { + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; - mycss_result_entry_destroy(result, selector->value, true); + mycss_selectors_list_destroy(entry->selectors, selector->value, true); selector->value = NULL; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); return true; } @@ -336,15 +336,15 @@ bool mycss_selectors_function_not_or_matches_parser(mycss_result_t* result, mycs //// HAS //// ///////////////////////////////////////////////////////// -void mycss_selectors_function_find_has_selector(mycss_result_entry_t* result_entry) +void mycss_selectors_function_find_has_selector(mycss_selectors_list_t* selectors_list) { - for(size_t i = 0; i < result_entry->selector_list_length; i++) { - mycss_selectors_entry_t* selector = result_entry->selector_list[i]; + for(size_t i = 0; i < selectors_list->selector_list_length; i++) { + mycss_selectors_entry_t* selector = selectors_list->selector_list[i]; while(selector) { if(selector->type == MyCSS_SELECTORS_TYPE_PSEUDO_ELEMENT) { - selector = result_entry->parent->selector; + selector = selectors_list->parent->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -357,27 +357,27 @@ void mycss_selectors_function_find_has_selector(mycss_result_entry_t* result_ent } } -bool mycss_selectors_function_has_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_has_parser(mycss_entry_t* entry, mycss_token_t* token) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - mycss_result_entry_t *result_entry = result->result_entry; - mycss_selectors_function_find_has_selector(result_entry); + mycss_selectors_list_t *selectors_list = entry->stylesheet->sel_list_last; + mycss_selectors_function_find_has_selector(selectors_list); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, selectors_list); - if(result_entry->selector_list_length == 0) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + if(selectors_list->selector_list_length == 0) { + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; - mycss_result_entry_destroy(result, selector->value, true); + mycss_selectors_list_destroy(entry->selectors, selector->value, true); selector->value = NULL; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); return true; } @@ -385,34 +385,34 @@ bool mycss_selectors_function_has_parser(mycss_result_t* result, mycss_token_t* //// NTH OF SELECTORS //// ///////////////////////////////////////////////////////// -bool mycss_selectors_function_nth_with_selectors_skip_all_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_with_selectors_skip_all_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - mycss_selectors_entry_t *selector = result->result_entry->selector; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } return true; } -bool mycss_selectors_function_nth_with_selectors_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_with_selectors_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value) { mycss_an_plus_b_entry_t *anb = mycss_selector_value_an_plus_b(selector->value); @@ -423,34 +423,34 @@ bool mycss_selectors_function_nth_with_selectors_parser(mycss_result_t* result, if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); } } - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; + entry->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; } return true; } -bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || mycss_selector_value_an_plus_b(selector->value)->is_broken) @@ -458,24 +458,24 @@ bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->state = mycss_an_plus_b_state_skip_all; - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + entry->parser_state = mycss_an_plus_b_state_skip_all; + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); return true; } myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); if(myhtml_strcasecmp(str.data, "of") != 0) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->state = mycss_an_plus_b_state_skip_all; - result->parser = mycss_an_plus_b_state_token_skip_whitespace; + entry->parser_state = mycss_an_plus_b_state_skip_all; + entry->parser = mycss_an_plus_b_state_token_skip_whitespace; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); myhtml_string_destroy(&str, false); return true; @@ -483,21 +483,21 @@ bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t myhtml_string_destroy(&str, false); - /* create and switch result, and create selector */ - mycss_selector_value_an_plus_b(selector->value)->of = mycss_result_entry_create_next_level_of_selectors(result, result->result_entry); + /* create and switch entry, and create selector */ + mycss_selector_value_an_plus_b(selector->value)->of = mycss_selectors_list_create_next_level_of_selectors(entry->selectors, entry->stylesheet, entry->stylesheet->sel_list_last); /* switch to parse selector */ - result->parser_switch = mycss_selectors_function_nth_of_selectors_parser; - result->state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_function_nth_of_selectors_parser; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value) { mycss_an_plus_b_entry_t *anb = mycss_selector_value_an_plus_b(selector->value); @@ -506,40 +506,40 @@ bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); } } - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; + entry->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; } return true; } -bool mycss_selectors_function_nth_of_selectors_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_of_selectors_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { - result->parser = mycss_selectors_function_nth_of_whitespace_selectors_parser; + entry->parser = mycss_selectors_function_nth_of_whitespace_selectors_parser; return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value) { mycss_an_plus_b_entry_t *anb = mycss_selector_value_an_plus_b(selector->value); @@ -547,34 +547,34 @@ bool mycss_selectors_function_nth_of_selectors_parser(mycss_result_t* result, my if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_child_destroy(entry, selector->value, true); } } - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + entry->parser_state == mycss_selectors_state_simple_selector) { - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - selector = result->result_entry->selector; + selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; + entry->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; return true; } - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; return false; } @@ -582,25 +582,25 @@ bool mycss_selectors_function_nth_of_selectors_parser(mycss_result_t* result, my return true; } -bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; + entry->parser = mycss_selectors_function_nth_with_selectors_skip_all_parser; } return true; @@ -610,36 +610,36 @@ bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_result_t* //// NTH //// ///////////////////////////////////////////////////////// -bool mycss_selectors_function_nth_without_selectors_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_nth_without_selectors_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value) { mycss_an_plus_b_entry_t *anb = mycss_selector_value_an_plus_b(selector->value); if(anb->is_broken) { selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - selector->value = mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(entry, selector->value, true); } } - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) { selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - selector->value = mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(result, selector->value, true); + selector->value = mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(entry, selector->value, true); } } @@ -650,38 +650,38 @@ bool mycss_selectors_function_nth_without_selectors_parser(mycss_result_t* resul //// DROP //// ///////////////////////////////////////////////////////// -bool mycss_selectors_function_drop_skip_all_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_drop_skip_all_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); if(selector->value == NULL) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } return true; } -bool mycss_selectors_function_drop_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_drop_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; mycss_selectors_function_drop_type_t drop_val = mycss_selector_value_drop(selector->value); myhtml_string_t str; - mycss_token_data_to_string(result->entry, token, &str, true, false); + mycss_token_data_to_string(entry, token, &str, true, false); if(myhtml_strcasecmp(str.data ,"active") == 0) { drop_val |= MyCSS_SELECTORS_FUNCTION_DROP_TYPE_ACTIVE; @@ -701,78 +701,78 @@ bool mycss_selectors_function_drop_parser(mycss_result_t* result, mycss_token_t* myhtml_string_destroy(&str, false); - result->parser = mycss_selectors_function_drop_column_parser; + entry->parser = mycss_selectors_function_drop_column_parser; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); if(selector->value == NULL) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_drop_skip_all_parser; + entry->parser = mycss_selectors_function_drop_skip_all_parser; return false; } return true; } -bool mycss_selectors_function_drop_column_wait_ident_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_drop_column_wait_ident_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - result->parser = mycss_selectors_function_drop_parser; + entry->parser = mycss_selectors_function_drop_parser; return false; } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_drop_skip_all_parser; + entry->parser = mycss_selectors_function_drop_skip_all_parser; return false; } } -bool mycss_selectors_function_drop_column_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_drop_column_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_COLUMN) { - result->parser = mycss_selectors_function_drop_column_wait_ident_parser; + entry->parser = mycss_selectors_function_drop_column_wait_ident_parser; return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - result->parser = mycss_selectors_function_drop_parser; + entry->parser = mycss_selectors_function_drop_parser; return false; } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_drop_skip_all_parser; + entry->parser = mycss_selectors_function_drop_skip_all_parser; return false; } @@ -783,27 +783,27 @@ bool mycss_selectors_function_drop_column_parser(mycss_result_t* result, mycss_t //// DIR //// ///////////////////////////////////////////////////////// -bool mycss_selectors_function_dir_wait_parenthesis_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_dir_wait_parenthesis_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value == NULL) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -812,13 +812,13 @@ bool mycss_selectors_function_dir_wait_parenthesis_parser(mycss_result_t* result return true; } -bool mycss_selectors_function_dir_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_dir_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) @@ -827,19 +827,19 @@ bool mycss_selectors_function_dir_parser(mycss_result_t* result, mycss_token_t* return true; } - selector->value = mycss_selectors_value_pseudo_class_function_dir_create(result, true); - mycss_token_data_to_string(result->entry, token, selector->value, true, false); + selector->value = mycss_selectors_value_pseudo_class_function_dir_create(entry, true); + mycss_token_data_to_string(entry, token, selector->value, true, false); - result->parser = mycss_selectors_function_dir_wait_parenthesis_parser; + entry->parser = mycss_selectors_function_dir_wait_parenthesis_parser; } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_dir_wait_parenthesis_parser; + entry->parser = mycss_selectors_function_dir_wait_parenthesis_parser; return false; } @@ -850,21 +850,21 @@ bool mycss_selectors_function_dir_parser(mycss_result_t* result, mycss_token_t* //// LANG //// ///////////////////////////////////////////////////////// -bool mycss_selectors_function_lang_skip_all_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_lang_skip_all_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; + mycss_selectors_t *selectors = entry->selectors; - mycss_selectors_end(result->result_entry, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } return true; } -bool mycss_selectors_function_lang_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_lang_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; @@ -872,7 +872,7 @@ bool mycss_selectors_function_lang_parser(mycss_result_t* result, mycss_token_t* else if(token->type == MyCSS_TOKEN_TYPE_IDENT || token->type == MyCSS_TOKEN_TYPE_STRING) { - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; mycss_selectors_value_lang_t *lang; if(selector->value) { @@ -881,72 +881,72 @@ bool mycss_selectors_function_lang_parser(mycss_result_t* result, mycss_token_t* while(lang->next) lang = lang->next; - lang->next = mycss_selectors_value_pseudo_class_function_lang_create(result, true); - mycss_token_data_to_string(result->entry, token, &lang->next->str, true, false); + lang->next = mycss_selectors_value_pseudo_class_function_lang_create(entry, true); + mycss_token_data_to_string(entry, token, &lang->next->str, true, false); } else { - lang = mycss_selectors_value_pseudo_class_function_lang_create(result, true); - mycss_token_data_to_string(result->entry, token, &lang->str, true, false); + lang = mycss_selectors_value_pseudo_class_function_lang_create(entry, true); + mycss_token_data_to_string(entry, token, &lang->str, true, false); selector->value = lang; } - result->parser = mycss_selectors_function_lang_after_parser; + entry->parser = mycss_selectors_function_lang_after_parser; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_t *selectors = result->entry->selectors; - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_t *selectors = entry->selectors; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if(selector->value == NULL) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - mycss_selectors_end(result->result_entry, selectors, false); - result->result_entry = mycss_result_get_parent_set_parser(result, result->result_entry); + mycss_selectors_end(entry->stylesheet->sel_list_last, selectors, false); + entry->stylesheet->sel_list_last = mycss_entry_get_parent_set_parser(entry, entry->stylesheet->sel_list_last); - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, entry->stylesheet->sel_list_last->selector, token); } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_lang_skip_all_parser; + entry->parser = mycss_selectors_function_lang_skip_all_parser; } return true; } -bool mycss_selectors_function_lang_after_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_lang_after_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; } else if(token->type == MyCSS_TOKEN_TYPE_COMMA) { - result->parser = mycss_selectors_function_lang_comma_parser; + entry->parser = mycss_selectors_function_lang_comma_parser; } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - result->parser = mycss_selectors_function_lang_parser; + entry->parser = mycss_selectors_function_lang_parser; return false; } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_lang_skip_all_parser; + entry->parser = mycss_selectors_function_lang_skip_all_parser; } return true; } -bool mycss_selectors_function_lang_comma_parser(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_function_lang_comma_parser(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) { return true; @@ -954,17 +954,17 @@ bool mycss_selectors_function_lang_comma_parser(mycss_result_t* result, mycss_to else if(token->type == MyCSS_TOKEN_TYPE_IDENT || token->type == MyCSS_TOKEN_TYPE_STRING) { - result->parser = mycss_selectors_function_lang_parser; + entry->parser = mycss_selectors_function_lang_parser; return false; } else { /* parse error */ - mycss_selectors_entry_t *selector = result->result_entry->selector; + mycss_selectors_entry_t *selector = entry->stylesheet->sel_list_last->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_function_lang_skip_all_parser; + entry->parser = mycss_selectors_function_lang_skip_all_parser; return false; } } diff --git a/source/mycss/selectors/function.h b/source/mycss/selectors/function.h index 2ef3087..d108a85 100644 --- a/source/mycss/selectors/function.h +++ b/source/mycss/selectors/function.h @@ -27,12 +27,11 @@ #ifdef __cplusplus extern "C" { #endif - -#include "mycss/result.h" + #include "mycss/entry.h" #include "mycss/selectors/myosi.h" -typedef void (*mycss_selectors_function_begin_f)(mycss_result_t* result, mycss_selectors_entry_t* selector); +typedef void (*mycss_selectors_function_begin_f)(mycss_entry_t* entry, mycss_selectors_entry_t* selector); struct mycss_selectors_function_index { mycss_parser_token_f parser; @@ -54,37 +53,37 @@ typedef mycss_selectots_function_begin_entry_t; mycss_selectors_function_begin_f mycss_function_begin_by_name(const char *name, size_t length); const mycss_selectots_function_begin_entry_t * mycss_function_begin_entry_by_name(const char* name, size_t length); -void mycss_selectors_function_begin_nth_child(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_not(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_dir(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_matches(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_lang(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_drop(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_column(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_current(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_child(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_last_of_type(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_has(mycss_result_t* result, mycss_selectors_entry_t* selector); -void mycss_selectors_function_begin_nth_column(mycss_result_t* result, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_not(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_dir(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_matches(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_lang(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_drop(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_current(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_child(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_last_of_type(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_has(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +void mycss_selectors_function_begin_nth_column(mycss_entry_t* entry, mycss_selectors_entry_t* selector); -void mycss_selectors_begin_unknown(mycss_result_t* result, mycss_selectors_entry_t* selector); -bool mycss_selectors_unknown_parser(mycss_result_t* result, mycss_token_t* token); +void mycss_selectors_begin_unknown(mycss_entry_t* entry, mycss_selectors_entry_t* selector); +bool mycss_selectors_unknown_parser(mycss_entry_t* entry, mycss_token_t* token); -bool mycss_selectors_function_not_or_matches_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_has_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_with_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_without_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_of_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_column_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_drop_skip_all_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_dir_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_after_parser(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_function_lang_comma_parser(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_function_not_or_matches_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_has_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_with_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_with_selectors_before_of_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_without_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_of_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_nth_of_whitespace_selectors_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_column_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_drop_skip_all_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_dir_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_after_parser(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_function_lang_comma_parser(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/selectors/init.c b/source/mycss/selectors/init.c index c66df9d..c1e0fd8 100644 --- a/source/mycss/selectors/init.c +++ b/source/mycss/selectors/init.c @@ -38,7 +38,16 @@ mycss_status_t mycss_selectors_init(mycss_entry_t* entry, mycss_selectors_t* sel myhtml_status_t myhtml_status = mcobject_init(selectors->mcobject_entries, 256, sizeof(mycss_selectors_entry_t)); if(myhtml_status) - return MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_INIT; + return MyCSS_STATUS_ERROR_SELECTORS_ENTRIES_INIT; + + /* Selectors List Entries */ + selectors->mcobject_list_entries = mcobject_create(); + if(selectors->mcobject_list_entries == NULL) + return MyCSS_STATUS_ERROR_SELECTORS_LIST_CREATE; + + myhtml_status = mcobject_init(selectors->mcobject_list_entries, 256, sizeof(mycss_selectors_list_t)); + if(myhtml_status) + return MyCSS_STATUS_ERROR_SELECTORS_LIST_INIT; return MyCSS_STATUS_OK; } @@ -46,6 +55,7 @@ mycss_status_t mycss_selectors_init(mycss_entry_t* entry, mycss_selectors_t* sel mycss_status_t mycss_selectors_clean_all(mycss_selectors_t* selectors) { mcobject_clean(selectors->mcobject_entries); + mcobject_clean(selectors->mcobject_list_entries); return MyCSS_STATUS_OK; } @@ -56,6 +66,7 @@ mycss_selectors_t * mycss_selectors_destroy(mycss_selectors_t* selectors, bool s return NULL; selectors->mcobject_entries = mcobject_destroy(selectors->mcobject_entries, true); + selectors->mcobject_list_entries = mcobject_destroy(selectors->mcobject_list_entries, true); if(self_destroy) { myhtml_free(selectors); @@ -65,21 +76,22 @@ mycss_selectors_t * mycss_selectors_destroy(mycss_selectors_t* selectors, bool s return selectors; } -void mycss_selectors_end(mycss_result_entry_t* res_entry, mycss_selectors_t* selectors, bool self_destroy) +/* TODO: change args position */ +void mycss_selectors_end(mycss_selectors_list_t* selectors_list, mycss_selectors_t* selectors, bool self_destroy) { - if(res_entry->selector->type == MyCSS_SELECTORS_TYPE_UNDEF) { - if(res_entry->selector->prev) { - res_entry->selector->prev->next = NULL; - res_entry->selector->prev = NULL; + if(selectors_list->selector->type == MyCSS_SELECTORS_TYPE_UNDEF) { + if(selectors_list->selector->prev) { + selectors_list->selector->prev->next = NULL; + selectors_list->selector->prev = NULL; } else { - if(res_entry->selector_list_length) { - res_entry->selector_list_length--; - res_entry->selector_list[ res_entry->selector_list_length ] = NULL; + if(selectors_list->selector_list_length) { + selectors_list->selector_list_length--; + selectors_list->selector_list[ selectors_list->selector_list_length ] = NULL; } } - res_entry->selector = mycss_selectors_entry_destroy(selectors, res_entry->selector, self_destroy); + selectors_list->selector = mycss_selectors_entry_destroy(selectors, selectors_list->selector, self_destroy); } } @@ -106,15 +118,13 @@ mycss_selectors_entry_t * mycss_selectors_entry_create(mycss_selectors_t* select mycss_selectors_entry_t * mycss_selectors_entry_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, bool self_destroy) { - mycss_result_t* result = selectors->entry->result; - if(selector->key) { myhtml_string_destroy(selector->key, false); - mcobject_free(result->mcobject_string_entries, selector->key); + mcobject_free(selectors->entry->mcobject_string_entries, selector->key); } if(selector->value) { - selector->value = mycss_selector_value_destroy(result, selector->type, selector->sub_type, selector->value, true); + selector->value = mycss_selector_value_destroy(selectors->entry, selector->type, selector->sub_type, selector->value, true); } if(self_destroy) { @@ -125,34 +135,34 @@ mycss_selectors_entry_t * mycss_selectors_entry_destroy(mycss_selectors_t* selec return selector; } -void * mycss_selectors_entry_value_destroy(mycss_result_t* result, mycss_selectors_entry_t* entry, bool destroy_self) +void * mycss_selectors_entry_value_destroy(mycss_entry_t* entry, mycss_selectors_entry_t* selector_entry, bool destroy_self) { - return mycss_selector_value_destroy(result, entry->type, entry->sub_type, entry->value, destroy_self); + return mycss_selector_value_destroy(entry, selector_entry->type, selector_entry->sub_type, selector_entry->value, destroy_self); } mycss_selectors_entry_t ** mycss_selectors_entry_list_create(mycss_selectors_t* selectors) { - mycss_result_t* result = selectors->entry->result; + mycss_entry_t* entry = selectors->entry; - return (mycss_selectors_entry_t**) mchar_async_malloc(result->entry->mchar, - result->entry->mchar_value_node_id, + return (mycss_selectors_entry_t**) mchar_async_malloc(entry->mchar, + entry->mchar_value_node_id, sizeof(mycss_selectors_entry_t*)); } mycss_selectors_entry_t ** mycss_selectors_entry_list_add_one(mycss_selectors_t* selectors, mycss_selectors_entry_t** list, size_t current_size) { - mycss_result_t* result = selectors->entry->result; + mycss_entry_t* entry = selectors->entry; size_t current_size_char = current_size * sizeof(mycss_selectors_entry_t *); return (mycss_selectors_entry_t**) - mchar_async_realloc(result->entry->mchar, result->entry->mchar_value_node_id, + mchar_async_realloc(entry->mchar, entry->mchar_value_node_id, (char*)list, current_size_char, (current_size_char + sizeof(mycss_selectors_entry_t*))); } mycss_selectors_entry_t ** mycss_selectors_entry_list_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t** list) { - mycss_result_t* result = selectors->entry->result; - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, (char*)list); + mycss_entry_t* entry = selectors->entry; + mchar_async_free(entry->mchar, entry->mchar_value_node_id, (char*)list); return NULL; } @@ -161,8 +171,8 @@ void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selector { switch(selector->type) { case MyCSS_SELECTORS_TYPE_ELEMENT: { - if(selector->ns) - mycss_namespace_print(selectors->entry->ns, selector->ns, fh, true); + if(selector->ns_entry) + mycss_namespace_print(selectors->entry->ns, selector->ns_entry, fh, true); if(selector->key) fprintf(fh, "%s", selector->key->data); @@ -171,8 +181,8 @@ void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selector case MyCSS_SELECTORS_TYPE_ATTRIBUTE: { fprintf(fh, "["); - if(selector->ns) - mycss_namespace_print(selectors->entry->ns, selector->ns, fh, true); + if(selector->ns_entry) + mycss_namespace_print(selectors->entry->ns, selector->ns_entry, fh, true); if(selector->key) fprintf(fh, "%s", selector->key->data); @@ -215,7 +225,7 @@ void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selector case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_MATCHES: case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_CURRENT: if(selector->value) - mycss_result_entry_print(selectors->entry->result, selector->value, fh); + mycss_entry_print(selectors->entry, selector->value, fh); break; case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_CHILD: @@ -229,7 +239,7 @@ void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selector if(mycss_selector_value_an_plus_b(selector->value)->of) { fprintf(fh, " of "); - mycss_result_entry_print(selectors->entry->result, mycss_selector_value_an_plus_b(selector->value)->of, fh); + mycss_entry_print(selectors->entry, mycss_selector_value_an_plus_b(selector->value)->of, fh); } } diff --git a/source/mycss/selectors/init.h b/source/mycss/selectors/init.h index 41b5beb..a2299c1 100644 --- a/source/mycss/selectors/init.h +++ b/source/mycss/selectors/init.h @@ -26,21 +26,21 @@ extern "C" { #endif -#include "mycss/result.h" #include "mycss/entry.h" #include "mycss/selectors/myosi.h" +#include "mycss/selectors/list.h" #include "mycss/namespace/init.h" mycss_selectors_t * mycss_selectors_create(void); mycss_status_t mycss_selectors_init(mycss_entry_t* entry, mycss_selectors_t* selectors); mycss_status_t mycss_selectors_clean_all(mycss_selectors_t* selectors); mycss_selectors_t * mycss_selectors_destroy(mycss_selectors_t* selectors, bool self_destroy); -void mycss_selectors_end(mycss_result_entry_t* res_entry, mycss_selectors_t* selectors, bool self_destroy); +void mycss_selectors_end(mycss_selectors_list_t* selectors_list, mycss_selectors_t* selectors, bool self_destroy); void mycss_selectors_entry_clean(mycss_selectors_entry_t* sel_entry); mycss_selectors_entry_t * mycss_selectors_entry_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, bool self_destroy); -void * mycss_selectors_entry_value_destroy(mycss_result_t* result, mycss_selectors_entry_t* entry, bool destroy_self); +void * mycss_selectors_entry_value_destroy(mycss_entry_t* entry, mycss_selectors_entry_t* selector_entry, bool destroy_self); mycss_selectors_entry_t * mycss_selectors_entry_find_first(mycss_selectors_entry_t* selector); void mycss_selectors_print_selector(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, FILE* fh); @@ -52,6 +52,7 @@ mycss_selectors_entry_t ** mycss_selectors_entry_list_create(mycss_selectors_t* mycss_selectors_entry_t ** mycss_selectors_entry_list_add_one(mycss_selectors_t* selectors, mycss_selectors_entry_t** list, size_t current_size); mycss_selectors_entry_t ** mycss_selectors_entry_list_destroy(mycss_selectors_t* selectors, mycss_selectors_entry_t** list); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/source/mycss/selectors/list.c b/source/mycss/selectors/list.c new file mode 100644 index 0000000..eb00251 --- /dev/null +++ b/source/mycss/selectors/list.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#include "mycss/selectors/list.h" + + +mycss_selectors_list_t * mycss_selectors_list_create(mycss_selectors_t* selectors) +{ + mycss_selectors_list_t* selectors_list = mcobject_malloc(selectors->mcobject_list_entries, NULL); + mycss_selectors_list_clean(selectors_list); + return selectors_list; +} + +void mycss_selectors_list_clean(mycss_selectors_list_t* selectors_list) +{ + memset(selectors_list, 0, sizeof(mycss_selectors_list_t)); +} + +mycss_selectors_list_t * mycss_selectors_list_destroy(mycss_selectors_t* selectors, mycss_selectors_list_t* selectors_list, bool self_destroy) +{ + if(selectors_list == NULL) + return NULL; + + mycss_entry_t *entry = selectors->entry; + + if(selectors_list->selector_list) + { + for(size_t i = 0; i < selectors_list->selector_list_length; i++) + mycss_selectors_entry_destroy(entry->selectors, selectors_list->selector_list[i], true); + + mycss_selectors_entry_list_destroy(entry->selectors, selectors_list->selector_list); + } + + if(self_destroy) { + mcobject_free(selectors->mcobject_list_entries, selectors_list); + return NULL; + } + + return selectors_list; +} + +mycss_selectors_list_t * mycss_selectors_list_create_and_push(mycss_selectors_t* selectors, mycss_selectors_list_t* current_list) +{ + mycss_selectors_list_t* selectors_list = mycss_selectors_list_create(selectors); + + if(current_list) { + selectors_list->prev = current_list; + current_list->next = selectors_list; + } + + return selectors_list; +} + +mycss_selectors_list_t * mycss_selectors_list_append_selector(mycss_selectors_t* selectors, mycss_selectors_list_t* current_list, mycss_selectors_entry_t* selector) +{ + if(current_list->selector_list == NULL) { + current_list->selector_list = mycss_selectors_entry_list_create(selectors); + } + else { + current_list->selector_list = mycss_selectors_entry_list_add_one(selectors, current_list->selector_list, current_list->selector_list_length); + } + + current_list->selector_list[current_list->selector_list_length] = selector; + current_list->selector_list_length++; + + return current_list; +} + +mycss_selectors_list_t * mycss_selectors_list_create_next_level_of_selectors(mycss_selectors_t* selectors, mycss_stylesheet_t* stylesheet, mycss_selectors_list_t* current_list) +{ + mycss_selectors_list_t *list = mycss_selectors_list_create(selectors); + + list->parent = current_list; + + list->selector = mycss_selectors_entry_create(selectors); + mycss_selectors_list_append_selector(selectors, list, list->selector); + + stylesheet->sel_list_last = list; + + return list; +} + + diff --git a/source/mycss/selectors/list.h b/source/mycss/selectors/list.h new file mode 100644 index 0000000..54ba859 --- /dev/null +++ b/source/mycss/selectors/list.h @@ -0,0 +1,55 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#ifndef MyHTML_MyCSS_SELECTORS_LIST_H +#define MyHTML_MyCSS_SELECTORS_LIST_H +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "mycss/entry.h" +#include "mycss/selectors/myosi.h" + +struct mycss_selectors_list { + mycss_selectors_entry_t** selector_list; + size_t selector_list_length; + + mycss_selectors_entry_t* selector; /* current selector/last entry */ + + mycss_selectors_list_t* parent; + mycss_selectors_list_t* next; + mycss_selectors_list_t* prev; +}; + +mycss_selectors_list_t * mycss_selectors_list_create(mycss_selectors_t* selectors); +void mycss_selectors_list_clean(mycss_selectors_list_t* selector_list); +mycss_selectors_list_t * mycss_selectors_list_destroy(mycss_selectors_t* selectors, mycss_selectors_list_t* selector_list, bool self_destroy); + +mycss_selectors_list_t * mycss_selectors_list_create_and_push(mycss_selectors_t* selectors, mycss_selectors_list_t* current_list); +mycss_selectors_list_t * mycss_selectors_list_append_selector(mycss_selectors_t* selectors, mycss_selectors_list_t* selector_list, mycss_selectors_entry_t* selector); +mycss_selectors_list_t * mycss_selectors_list_create_next_level_of_selectors(mycss_selectors_t* selectors, mycss_stylesheet_t* stylesheet, mycss_selectors_list_t* selector_list); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* MyHTML_MyCSS_SELECTORS_LIST_H */ diff --git a/source/mycss/selectors/myosi.h b/source/mycss/selectors/myosi.h index 16374e5..41abe4d 100644 --- a/source/mycss/selectors/myosi.h +++ b/source/mycss/selectors/myosi.h @@ -28,12 +28,14 @@ extern "C" { typedef struct mycss_selectors mycss_selectors_t; typedef struct mycss_selectors_entry mycss_selectors_entry_t; - +typedef struct mycss_selectors_list mycss_selectors_list_t; + #include "mycss/myosi.h" #include "mycss/mystring.h" +#include "mycss/namespace/myosi.h" #include "myhtml/utils/mcobject.h" -typedef bool (*mycss_selectors_state_f)(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +typedef bool (*mycss_selectors_state_f)(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); typedef void (*mycss_callback_selector_done_f)(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); enum mycss_selectors_match { @@ -49,7 +51,7 @@ typedef mycss_selectors_match_t; enum mycss_selectors_combinator { MyCSS_SELECTORS_COMBINATOR_UNDEF = 0x00, // two compound selectors [key=val].foo - MyCSS_SELECTORS_COMBINATOR_DESCENDANT = 0x01, // '*' or '>>' or WHITESPACE + MyCSS_SELECTORS_COMBINATOR_DESCENDANT = 0x01, // '>>' or WHITESPACE MyCSS_SELECTORS_COMBINATOR_CHILD = 0x02, // '>' MyCSS_SELECTORS_COMBINATOR_NEXT_SIBLING = 0x03, // '+' MyCSS_SELECTORS_COMBINATOR_FOLLOWING_SIBLING = 0x04, // '~' @@ -171,6 +173,7 @@ struct mycss_selectors { mycss_entry_t* entry; mcobject_t* mcobject_entries; + mcobject_t* mcobject_list_entries; }; struct mycss_selectors_entry { @@ -178,7 +181,7 @@ struct mycss_selectors_entry { mycss_selectors_sub_type_t sub_type; mycss_selectors_flags_t flags; - size_t ns; /* namespace */ + mycss_namespace_entry_t* ns_entry; myhtml_string_t* key; void* value; diff --git a/source/mycss/selectors/parser.c b/source/mycss/selectors/parser.c index ea42e8f..7f270ee 100644 --- a/source/mycss/selectors/parser.c +++ b/source/mycss/selectors/parser.c @@ -21,17 +21,16 @@ #include "mycss/selectors/parser.h" #include "mycss/selectors/value_resource.h" -mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector) +mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector) { - mycss_selectors_entry_t* new_selector = mcobject_malloc(selectors->mcobject_entries, NULL); - mycss_selectors_entry_clean(new_selector); + mycss_selectors_entry_t *new_selector = mycss_selectors_entry_create(selectors); if(selector) { selector->next = new_selector; new_selector->prev = selector; } - result->result_entry->selector = new_selector; + entry->stylesheet->sel_list_last->selector = new_selector; return new_selector; } @@ -39,9 +38,9 @@ mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss //// Comma (,) //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_comma(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_comma(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - mycss_result_entry_append_selector(result, result->result_entry, selector); + mycss_selectors_list_append_selector(selectors, entry->stylesheet->sel_list_last, selector); selector->prev->next = NULL; selector->prev = NULL; @@ -51,10 +50,10 @@ void mycss_selectors_parser_selector_comma(mycss_result_t* result, mycss_selecto //// Combinator //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(selector->type & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); if(selector->combinator == MyCSS_SELECTORS_COMBINATOR_CHILD) selector->combinator = MyCSS_SELECTORS_COMBINATOR_DESCENDANT; // ">>" @@ -62,34 +61,34 @@ void mycss_selectors_parser_selector_combinator_greater_than(mycss_result_t* res selector->combinator = MyCSS_SELECTORS_COMBINATOR_CHILD; // ">" } -void mycss_selectors_parser_selector_combinator_plus(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_combinator_plus(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(selector->type & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); selector->combinator = MyCSS_SELECTORS_COMBINATOR_NEXT_SIBLING; } -void mycss_selectors_parser_selector_combinator_tilde(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_combinator_tilde(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(selector->type & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); selector->combinator = MyCSS_SELECTORS_COMBINATOR_FOLLOWING_SIBLING; } -void mycss_selectors_parser_selector_combinator_column(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_combinator_column(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(selector->type & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); selector->combinator = MyCSS_SELECTORS_COMBINATOR_COLUMN; } -void mycss_selectors_parser_selector_combinator_whitespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_combinator_whitespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(selector->type & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); selector->combinator = MyCSS_SELECTORS_COMBINATOR_DESCENDANT; } @@ -98,76 +97,119 @@ void mycss_selectors_parser_selector_combinator_whitespace(mycss_result_t* resul //// Selector type //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_ident_type(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_ident_type(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); + + /* set default namespace */ + mycss_stylesheet_t* stylesheet = selectors->entry->stylesheet; + selector->ns_entry = stylesheet->ns_stylesheet.entry_default; selector->type = MyCSS_SELECTORS_TYPE_ELEMENT; selector->key = str; } -void mycss_selectors_parser_selector_ident_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_ident_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); + + /* set default namespace */ + mycss_stylesheet_t* stylesheet = selectors->entry->stylesheet; + selector->ns_entry = stylesheet->ns_stylesheet.entry_default; selector->type = MyCSS_SELECTORS_TYPE_ATTRIBUTE; selector->key = str; } -void mycss_selectors_parser_selector_id(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_id(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, false); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); + + /* set default namespace */ + mycss_stylesheet_t* stylesheet = selectors->entry->stylesheet; + selector->ns_entry = stylesheet->ns_stylesheet.entry_default; selector->type = MyCSS_SELECTORS_TYPE_ID; selector->key = str; - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } -void mycss_selectors_parser_selector_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, false); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); + + /* set default namespace */ + mycss_stylesheet_t* stylesheet = selectors->entry->stylesheet; + selector->ns_entry = stylesheet->ns_stylesheet.entry_default; selector->type = MyCSS_SELECTORS_TYPE_CLASS; selector->key = str; - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } ///////////////////////////////////////////////////////// //// Namespace //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_namespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { myhtml_string_t *str = selector->key; if(str == NULL || str->length == 0) { myhtml_string_destroy(str, 0); + selector->key = NULL; + selector->ns_entry = &entry->stylesheet->ns_stylesheet.entry_undef; + return; } if(str->length == 1 && *str->data == '*') { myhtml_string_destroy(str, 0); + selector->key = NULL; + selector->ns_entry = &entry->stylesheet->ns_stylesheet.entry_any; + return; } - selector->ns = mycss_result_detect_namespace_by_name(result, str->data, str->length); + selector->ns_entry = mycss_namespace_entry_by_name(entry->ns, entry->stylesheet->ns_stylesheet.name_tree, str->data, str->length, false); + + if(selector->ns_entry == NULL) { + selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; + mycss_selectors_parser_check_and_set_bad_parent_selector(entry->stylesheet->sel_list_last); + } myhtml_string_destroy(str, 0); selector->key = NULL; } -void mycss_selectors_parser_selector_after_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_namespace_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +{ + mycss_selectors_parser_selector_namespace(entry, selectors, selector, token); + + if(selector->type == MyCSS_SELECTORS_TYPE_UNDEF) + selector->type = MyCSS_SELECTORS_TYPE_ELEMENT; +} + +void mycss_selectors_parser_selector_namespace_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +{ + mycss_selectors_parser_selector_namespace(entry, selectors, selector, token); + + if(selector->type == MyCSS_SELECTORS_TYPE_UNDEF) + selector->type = MyCSS_SELECTORS_TYPE_ATTRIBUTE; +} + +void mycss_selectors_parser_selector_after_namespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, true); selector->key = str; } @@ -176,18 +218,18 @@ void mycss_selectors_parser_selector_after_namespace(mycss_result_t* result, myc //// Value and Modifier //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - mycss_selectors_object_attribute_t *attr = mycss_selectors_value_attribute_create(result, 1); + mycss_selectors_object_attribute_t *attr = mycss_selectors_value_attribute_create(entry, 1); - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, false); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, false); attr->value = str; selector->value = attr; } -void mycss_selectors_parser_selector_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { mycss_selector_value_attribute(selector->value)->mod = MyCSS_SELECTORS_MOD_I; } @@ -196,10 +238,10 @@ void mycss_selectors_parser_selector_modifier(mycss_result_t* result, mycss_sele //// Pseudo Class //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_pseudo_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, true); selector->key = str; selector->type = MyCSS_SELECTORS_TYPE_PSEUDO_CLASS; @@ -209,14 +251,14 @@ void mycss_selectors_parser_selector_pseudo_class(mycss_result_t* result, mycss_ if(selector->sub_type == MyCSS_SELECTORS_SUB_TYPE_UNKNOWN) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_selectors_parser_check_and_set_bad_parent_selector(result->result_entry); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_check_and_set_bad_parent_selector(entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } -void mycss_selectors_parser_selector_pseudo_class_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_class_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, true); selector->key = str; selector->type = MyCSS_SELECTORS_TYPE_PSEUDO_CLASS_FUNCTION; @@ -224,29 +266,29 @@ void mycss_selectors_parser_selector_pseudo_class_function(mycss_result_t* resul mycss_selectors_function_begin_f to_func = mycss_function_begin_by_name(str->data, str->length); if(to_func) { - to_func(result, selector); + to_func(entry, selector); } else { /* skip and set bad type for current selector */ selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_selectors_begin_unknown(result, selector); + mycss_selectors_begin_unknown(entry, selector); } } -void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - mycss_selectors_parser_check_and_set_bad_parent_selector(result->result_entry); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_check_and_set_bad_parent_selector(entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } ///////////////////////////////////////////////////////// //// Pseudo Element //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_pseudo_element(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_element(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, true); selector->key = str; selector->type = MyCSS_SELECTORS_TYPE_PSEUDO_ELEMENT; @@ -256,85 +298,85 @@ void mycss_selectors_parser_selector_pseudo_element(mycss_result_t* result, mycs if(selector->sub_type == MyCSS_SELECTORS_SUB_TYPE_UNKNOWN) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_selectors_parser_check_and_set_bad_parent_selector(result->result_entry); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_check_and_set_bad_parent_selector(entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } -void mycss_selectors_parser_selector_pseudo_element_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_element_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); - mycss_token_data_to_string(result->entry, token, str, true, true); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); + mycss_token_data_to_string(entry, token, str, true, true); selector->key = str; selector->type = MyCSS_SELECTORS_TYPE_PSEUDO_ELEMENT_FUNCTION; selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_selectors_begin_unknown(result, selector); + mycss_selectors_begin_unknown(entry, selector); } -void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - mycss_selectors_parser_check_and_set_bad_parent_selector(result->result_entry); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_check_and_set_bad_parent_selector(entry->stylesheet->sel_list_last); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); } ///////////////////////////////////////////////////////// //// End and bad selectors //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_selector_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_selector_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { - if(result->callback_selector_done) - result->callback_selector_done(selectors, selector); + if(entry->callback_selector_done) + entry->callback_selector_done(selectors, selector); - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); } -void mycss_selectors_parser_expectations_error(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_expectations_error(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - mycss_result_entry_t *result_entry = result->result_entry; - if(result_entry->parent && result_entry->parent->selector) + mycss_selectors_list_t *selectors_list = entry->stylesheet->sel_list_last; + if(selectors_list->parent && selectors_list->parent->selector) { - mycss_selectors_entry_t* parent_selector = result_entry->parent->selector; + mycss_selectors_entry_t* parent_selector = selectors_list->parent->selector; if((parent_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) parent_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - mycss_selectors_parser_selector_create_new_entry(result, selectors, selector); + mycss_selectors_parser_selector_create_new_entry(entry, selectors, selector); //printf("Expectations error!\n"); } -void mycss_selectors_parser_bad_token(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +void mycss_selectors_parser_bad_token(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) { selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); selector->key = str; - mycss_token_data_to_string(result->entry, token, selector->key, true, false); + mycss_token_data_to_string(entry, token, selector->key, true, false); return; } - mycss_token_data_to_string(result->entry, token, selector->key, false, false); + mycss_token_data_to_string(entry, token, selector->key, false, false); } ///////////////////////////////////////////////////////// //// Set bad //// ///////////////////////////////////////////////////////// -void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_result_entry_t* result_entry) +void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_selectors_list_t* selectors_list) { - mycss_selectors_entry_t *selector = result_entry->selector; + mycss_selectors_entry_t *selector = selectors_list->selector; if(selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) { - if(result_entry->parent && result_entry->parent->selector) { - selector = result_entry->parent->selector; + if(selectors_list->parent && selectors_list->parent->selector) { + selector = selectors_list->parent->selector; if((selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -346,7 +388,7 @@ void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_result_entry //// Selectors list //// ///////////////////////////////////////////////////////// -bool mycss_selectors_parser_selectors_list_begin(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_begin(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_WHITESPACE: { @@ -354,16 +396,16 @@ bool mycss_selectors_parser_selectors_list_begin(mycss_result_t* result, mycss_t } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - result->parser_switch = mycss_selectors_parser_selectors_list_process; - result->state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_process; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; return false; } @@ -372,55 +414,55 @@ bool mycss_selectors_parser_selectors_list_begin(mycss_result_t* result, mycss_t return true; } -bool mycss_selectors_parser_selectors_list_process(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_process(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_COMMA: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - mycss_selectors_parser_selector_comma(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_comma(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_comma; + entry->parser = mycss_selectors_parser_selectors_list_comma; break; } case MyCSS_TOKEN_TYPE_WHITESPACE: { - result->parser = mycss_selectors_parser_selectors_list_whitespace; + entry->parser = mycss_selectors_parser_selectors_list_whitespace; break; } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } @@ -429,7 +471,7 @@ bool mycss_selectors_parser_selectors_list_process(mycss_result_t* result, mycss return true; } -bool mycss_selectors_parser_selectors_list_comma(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_comma(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_WHITESPACE: { @@ -437,20 +479,20 @@ bool mycss_selectors_parser_selectors_list_comma(mycss_result_t* result, mycss_t } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } @@ -459,13 +501,13 @@ bool mycss_selectors_parser_selectors_list_comma(mycss_result_t* result, mycss_t return true; } -bool mycss_selectors_parser_selectors_list_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_whitespace(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_COMMA: { - mycss_selectors_parser_selector_comma(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_comma(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_comma; + entry->parser = mycss_selectors_parser_selectors_list_comma; break; } @@ -474,17 +516,17 @@ bool mycss_selectors_parser_selectors_list_whitespace(mycss_result_t* result, my } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } } @@ -492,10 +534,10 @@ bool mycss_selectors_parser_selectors_list_whitespace(mycss_result_t* result, my return true; } -bool mycss_selectors_parser_selectors_list_skip_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_skip_all(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } @@ -506,18 +548,18 @@ bool mycss_selectors_parser_selectors_list_skip_all(mycss_result_t* result, mycs //// Selectors list with combinator firstly //// ///////////////////////////////////////////////////////// -bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { /* combinator */ case MyCSS_TOKEN_TYPE_COLUMN: { - mycss_selectors_parser_selector_combinator_column(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_column(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } @@ -525,96 +567,96 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_r switch(*token->data) { /* combinator */ case '+': { - mycss_selectors_parser_selector_combinator_plus(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_plus(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } case '>': { - mycss_selectors_parser_selector_combinator_greater_than(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; return true; } case '~': { - mycss_selectors_parser_selector_combinator_tilde(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_tilde(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } default: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } } - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_COMMA: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - mycss_selectors_parser_selector_comma(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_comma(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_comma; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_comma; break; } case MyCSS_TOKEN_TYPE_WHITESPACE: { - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_whitespace; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_whitespace; break; } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } @@ -623,24 +665,24 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_r return true; } -bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_entry_t* entry, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_DELIM && *token->data == '>') { MyCSS_DEBUG_MESSAGE("mycss_selectors_parser_selectors_list_with_combinator_first_greater_than") - mycss_selectors_parser_selector_combinator_greater_than(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); } - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return true; } -bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_WHITESPACE: { @@ -649,13 +691,13 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_res /* combinator */ case MyCSS_TOKEN_TYPE_COLUMN: { - mycss_selectors_parser_selector_combinator_column(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_column(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } @@ -663,53 +705,53 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_res case MyCSS_TOKEN_TYPE_DELIM: { switch(*token->data) { case '+': { - mycss_selectors_parser_selector_combinator_plus(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_plus(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } case '>': { - mycss_selectors_parser_selector_combinator_greater_than(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; return true; } case '~': { - mycss_selectors_parser_selector_combinator_tilde(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_tilde(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } default: { - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } } - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - result->state = mycss_selectors_state_simple_selector; + entry->parser_state = mycss_selectors_state_simple_selector; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; return false; } @@ -718,13 +760,13 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_res return true; } -bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_COMMA: { - mycss_selectors_parser_selector_comma(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_comma(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_comma; + entry->parser = mycss_selectors_parser_selectors_list_comma; break; } @@ -734,64 +776,64 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycs /* combinator */ case MyCSS_TOKEN_TYPE_COLUMN: { - mycss_selectors_parser_selector_combinator_column(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_column(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_DELIM: { switch(*token->data) { case '+': { - mycss_selectors_parser_selector_combinator_plus(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_plus(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } case '>': { - mycss_selectors_parser_selector_combinator_greater_than(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_greater_than; return true; } case '~': { - mycss_selectors_parser_selector_combinator_tilde(result, result->entry->selectors, result->result_entry->selector, token); + mycss_selectors_parser_selector_combinator_tilde(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); break; } default: { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; return true; } } - result->state = mycss_selectors_state_simple_selector; - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; + entry->parser_state = mycss_selectors_state_simple_selector; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } } @@ -799,7 +841,7 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycs return true; } -bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_entry_t* entry, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_WHITESPACE: { @@ -807,34 +849,34 @@ bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinato } case MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - result->parser = result->parser_original; + entry->parser = entry->parser_original; return false; } default: { - if(result->result_entry->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || - result->state == mycss_selectors_state_simple_selector) + if(entry->stylesheet->sel_list_last->selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD || + entry->parser_state == mycss_selectors_state_simple_selector) { - mycss_selectors_entry_t *prev_selector = result->result_entry->parent->selector; + mycss_selectors_entry_t *prev_selector = entry->stylesheet->sel_list_last->parent->selector; if((prev_selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) == 0) prev_selector->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; - result->parser = mycss_selectors_parser_selectors_list_skip_all; + entry->parser = mycss_selectors_parser_selectors_list_skip_all; break; } - result->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_process; - result->parser = mycss_selectors_parser_selectors_list_with_combinator_first_process; + entry->parser_switch = mycss_selectors_parser_selectors_list_with_combinator_first_process; + entry->parser = mycss_selectors_parser_selectors_list_with_combinator_first_process; return false; } diff --git a/source/mycss/selectors/parser.h b/source/mycss/selectors/parser.h index 8494f5c..39095d6 100644 --- a/source/mycss/selectors/parser.h +++ b/source/mycss/selectors/parser.h @@ -26,55 +26,55 @@ extern "C" { #endif -#include "mycss/result.h" #include "mycss/entry.h" #include "mycss/selectors/myosi.h" #include "mycss/selectors/value.h" #include "mycss/selectors/function.h" #include "mycss/selectors/pseudo.h" -mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); +mycss_selectors_entry_t * mycss_selectors_parser_selector_create_new_entry(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector); -void mycss_selectors_parser_selector_comma(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_plus(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_tilde(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_column(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_combinator_whitespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_ident_type(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_ident_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_after_namespace(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_id(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_expectations_error(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -void mycss_selectors_parser_bad_token(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_comma(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_plus(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_tilde(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_column(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_combinator_whitespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_ident_type(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_ident_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_namespace_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_namespace_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_after_namespace(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_id(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_class_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_selector_pseudo_element_function_end(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_expectations_error(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +void mycss_selectors_parser_bad_token(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* for set parent selector bad status if child selector is bad*/ -void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_result_entry_t* result_entry); +void mycss_selectors_parser_check_and_set_bad_parent_selector(mycss_selectors_list_t* selectors_list); /* selectors list */ -bool mycss_selectors_parser_selectors_list_begin(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_process(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_comma(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_skip_all(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_begin(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_process(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_comma(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_skip_all(mycss_entry_t* entry, mycss_token_t* token); /* selectors list with combinator first */ -bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_result_t* result, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_process(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_greater_than(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_comma(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_whitespace(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_parser_selectors_list_with_combinator_first_after_combinator(mycss_entry_t* entry, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/selectors/pseudo.h b/source/mycss/selectors/pseudo.h index fcf1842..cadaa5f 100644 --- a/source/mycss/selectors/pseudo.h +++ b/source/mycss/selectors/pseudo.h @@ -25,8 +25,7 @@ #ifdef __cplusplus extern "C" { #endif - -#include "mycss/result.h" + #include "mycss/entry.h" #include "mycss/selectors/myosi.h" diff --git a/source/mycss/selectors/state.c b/source/mycss/selectors/state.c index 36c6f11..7aa6454 100644 --- a/source/mycss/selectors/state.c +++ b/source/mycss/selectors/state.c @@ -20,24 +20,24 @@ #include "mycss/selectors/state.h" -bool mycss_selectors_state_token_all(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_state_token_all(mycss_entry_t* entry, mycss_token_t* token) { - return ((mycss_selectors_state_f)result->state)(result, result->entry->selectors, result->result_entry->selector, token); + return ((mycss_selectors_state_f)entry->parser_state)(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); } -bool mycss_selectors_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token) +bool mycss_selectors_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token) { if(token->type != MyCSS_TOKEN_TYPE_WHITESPACE) { - return ((mycss_selectors_state_f)result->state)(result, result->entry->selectors, result->result_entry->selector, token); + return ((mycss_selectors_state_f)entry->parser_state)(entry, entry->selectors, entry->stylesheet->sel_list_last->selector, token); } return true; } -void mycss_selectors_state_end(mycss_result_t* result) +void mycss_selectors_state_end(mycss_entry_t* entry) { - mycss_selectors_t* selectors = result->entry->selectors; - mycss_selectors_entry_t* selector = result->result_entry->selector; + mycss_selectors_t* selectors = entry->selectors; + mycss_selectors_entry_t* selector = entry->stylesheet->sel_list_last->selector; if(selector == NULL) return; @@ -49,15 +49,15 @@ void mycss_selectors_state_end(mycss_result_t* result) mycss_selectors_entry_clean(selector); } else { - mycss_selectors_parser_selector_end(result, selectors, selector, NULL); + mycss_selectors_parser_selector_end(entry, selectors, selector, NULL); } } /* for unknown functions */ -bool mycss_selectors_state_function_skip_all(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_function_skip_all(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) - return result->parser_switch(result, token); + return entry->parser_switch(entry, token); return true; } @@ -65,44 +65,44 @@ bool mycss_selectors_state_function_skip_all(mycss_result_t* result, mycss_selec /* Generated by utils/selectors.pl and my hands edit (HAND_EDIT_BEGIN and HAND_EDIT_END) */ /* */ -bool mycss_selectors_state_combinator(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_combinator(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_COLUMN: { - mycss_selectors_parser_selector_combinator_column(result, selectors, selector, token); + mycss_selectors_parser_selector_combinator_column(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_column") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } case MyCSS_TOKEN_TYPE_DELIM: { if(*token->data == '+') { - mycss_selectors_parser_selector_combinator_plus(result, selectors, selector, token); + mycss_selectors_parser_selector_combinator_plus(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_plus") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(*token->data == '>') { - mycss_selectors_parser_selector_combinator_greater_than(result, selectors, selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_greater_than") - result->state = mycss_selectors_state_combinator_greater_than; + entry->parser_state = mycss_selectors_state_combinator_greater_than; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else if(*token->data == '~') { - mycss_selectors_parser_selector_combinator_tilde(result, selectors, selector, token); + mycss_selectors_parser_selector_combinator_tilde(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_tilde") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } break; } default: { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } @@ -110,21 +110,21 @@ bool mycss_selectors_state_combinator(mycss_result_t* result, mycss_selectors_t* return true; } -bool mycss_selectors_state_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_DELIM) { if(*token->data == '>') { - mycss_selectors_parser_selector_combinator_greater_than(result, selectors, selector, token); + mycss_selectors_parser_selector_combinator_greater_than(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_combinator_greater_than_greater_than") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } } else { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } @@ -132,75 +132,83 @@ bool mycss_selectors_state_combinator_greater_than(mycss_result_t* result, mycss } /* */ -bool mycss_selectors_state_simple_selector(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_IDENT: { - mycss_selectors_parser_selector_ident_type(result, selectors, selector, token); + mycss_selectors_parser_selector_ident_type(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_ident") - result->state = mycss_selectors_state_simple_selector_ident; + entry->parser_state = mycss_selectors_state_simple_selector_ident; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } case MyCSS_TOKEN_TYPE_DELIM: { + // HAND_EDIT_BEGIN if(*token->data == '*') { - mycss_selectors_parser_selector_ident_type(result, selectors, selector, token); + mycss_selectors_parser_selector_ident_type(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_asterisk") - result->parser = result->parser_switch; + + entry->parser_state = mycss_selectors_state_simple_selector_ident; + + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } + // HAND_EDIT_END else if(*token->data == '.') { - result->state = mycss_selectors_state_simple_selector_full_stop; + entry->parser_state = mycss_selectors_state_simple_selector_full_stop; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else if(*token->data == '|') { - mycss_selectors_parser_selector_namespace(result, selectors, selector, token); - result->state = mycss_selectors_state_simple_selector_vertical_bar; + // HAND_EDIT_BEGIN + mycss_selectors_parser_selector_namespace_ident(entry, selectors, selector, token); + // HAND_EDIT_END + entry->parser_state = mycss_selectors_state_simple_selector_vertical_bar; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } break; } case MyCSS_TOKEN_TYPE_COLON: { - result->state = mycss_selectors_state_simple_selector_colon; + entry->parser_state = mycss_selectors_state_simple_selector_colon; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } case MyCSS_TOKEN_TYPE_LEFT_SQUARE_BRACKET: { - result->state = mycss_selectors_state_simple_selector_left_bracket; + entry->parser_state = mycss_selectors_state_simple_selector_left_bracket; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_HASH: { // HAND_EDIT_BEGIN // // need if some check after process mycss_selectors_state_simple_selector - // if(result->state == mycss_selectors_state_simple_selector) + // if(entry->parser_state == mycss_selectors_state_simple_selector) // printf("error"); // - result->state = NULL; + entry->parser_state = NULL; // HAND_EDIT_END - mycss_selectors_parser_selector_id(result, selectors, selector, token); + mycss_selectors_parser_selector_id(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_hash") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } default: { - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; return false; } } @@ -208,156 +216,159 @@ bool mycss_selectors_state_simple_selector(mycss_result_t* result, mycss_selecto return true; } -bool mycss_selectors_state_simple_selector_left_bracket(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_left_bracket(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_ident_attr(result, selectors, selector, token); - result->state = mycss_selectors_state_simple_selector_left_bracket_ident; + mycss_selectors_parser_selector_ident_attr(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_simple_selector_left_bracket_ident; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else if(token->type == MyCSS_TOKEN_TYPE_DELIM) { if(*token->data == '|') { - mycss_selectors_parser_selector_ident_attr(result, selectors, selector, token); - mycss_selectors_parser_selector_namespace(result, selectors, result->result_entry->selector, token); - result->state = mycss_selectors_state_simple_selector_left_bracket_vertical_bar; + // HAND_EDIT_BEGIN + mycss_selectors_parser_selector_namespace_attr(entry, selectors, entry->stylesheet->sel_list_last->selector, token); + // HAND_EDIT_END + entry->parser_state = mycss_selectors_state_simple_selector_left_bracket_vertical_bar; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - result->state = mycss_selectors_state_shared_after_wq_name_attr; + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_shared_after_wq_name_attr; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_WHITESPACE: { - result->state = mycss_selectors_state_shared_after_wq_name_attr; + entry->parser_state = mycss_selectors_state_shared_after_wq_name_attr; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_INCLUDE_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_INCLUDE; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_DASH_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_DASH; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_PREFIX_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_PREFIX; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_SUFFIX_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_SUFFIX; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_SUBSTRING_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_SUBSTRING; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_DELIM: { if(*token->data == '=') { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_EQUAL; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else if(*token->data == '|') { - mycss_selectors_parser_selector_namespace(result, selectors, selector, token); - result->state = mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar; + // HAND_EDIT_BEGIN + mycss_selectors_parser_selector_namespace_attr(entry, selectors, selector, token); + // HAND_EDIT_END + entry->parser_state = mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } break; } case MyCSS_TOKEN_TYPE_RIGHT_SQUARE_BRACKET: { - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_left_bracket_ident_right_bracket") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } default: { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } @@ -365,18 +376,18 @@ bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_result_t* re return true; } -bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - result->state = mycss_selectors_state_shared_after_wq_name_attr; + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_shared_after_wq_name_attr; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } @@ -384,29 +395,29 @@ bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss } // HAND_EDIT_BEGIN -bool mycss_selectors_state_simple_selector_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_IDENT: { - mycss_selectors_parser_selector_pseudo_class(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_class(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_colon_ident") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } case MyCSS_TOKEN_TYPE_COLON: { - result->state = mycss_selectors_state_simple_selector_colon_colon; + entry->parser_state = mycss_selectors_state_simple_selector_colon_colon; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; break; } case MyCSS_TOKEN_TYPE_FUNCTION: { - mycss_selectors_parser_selector_pseudo_class_function(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_class_function(entry, selectors, selector, token); break; } default: { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } @@ -414,51 +425,51 @@ bool mycss_selectors_state_simple_selector_colon(mycss_result_t* result, mycss_s return true; } -bool mycss_selectors_state_simple_selector_colon_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_colon_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_pseudo_element(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_element(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_colon_colon_ident") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(token->type == MyCSS_TOKEN_TYPE_FUNCTION) { - mycss_selectors_parser_selector_pseudo_element_function(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_element_function(entry, selectors, selector, token); } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_parser_selector_pseudo_element_function_end(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_element_function_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_colon_colon_function_right_parenthesis") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS) { - mycss_selectors_parser_selector_pseudo_class_function_end(result, selectors, selector, token); + mycss_selectors_parser_selector_pseudo_class_function_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_colon_function_right_parenthesis") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } @@ -466,192 +477,194 @@ bool mycss_selectors_state_simple_selector_colon_function(mycss_result_t* result } // HAND_EDIT_END -bool mycss_selectors_state_simple_selector_full_stop(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_full_stop(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_class(result, selectors, selector, token); + mycss_selectors_parser_selector_class(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_full_stop_ident") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_vertical_bar_ident") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(token->type == MyCSS_TOKEN_TYPE_DELIM) { if(*token->data == '*') { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_vertical_bar_asterisk") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_DELIM) { if(*token->data == '|') { - mycss_selectors_parser_selector_namespace(result, selectors, selector, token); - result->state = mycss_selectors_state_simple_selector_ident_vertical_bar; + // HAND_EDIT_BEGIN + mycss_selectors_parser_selector_namespace_ident(entry, selectors, selector, token); + // HAND_EDIT_END + entry->parser_state = mycss_selectors_state_simple_selector_ident_vertical_bar; - if(result->parser != mycss_selectors_state_token_all) - result->parser = mycss_selectors_state_token_all; + if(entry->parser != mycss_selectors_state_token_all) + entry->parser = mycss_selectors_state_token_all; } else { - mycss_selectors_parser_selector_end(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_selector_end(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_selectors_parser_selector_end(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_selector_end(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_ident_vertical_bar_ident") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else if(token->type == MyCSS_TOKEN_TYPE_DELIM) { if(*token->data == '*') { - mycss_selectors_parser_selector_after_namespace(result, selectors, selector, token); - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_after_namespace(entry, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_simple_selector_ident_vertical_bar_asterisk") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_shared_after_wq_name_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_shared_after_wq_name_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { switch (token->type) { case MyCSS_TOKEN_TYPE_INCLUDE_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_INCLUDE; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_DASH_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_DASH; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_PREFIX_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_PREFIX; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_SUFFIX_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_SUFFIX; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_SUBSTRING_MATCH: { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_SUBSTRING; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; break; } case MyCSS_TOKEN_TYPE_DELIM: { if(*token->data == '=') { if(selector->value == NULL) - selector->value = mycss_selectors_value_attribute_create(result, true); + selector->value = mycss_selectors_value_attribute_create(entry, true); mycss_selector_value_attribute(selector->value)->match = MyCSS_SELECTORS_MATCH_EQUAL; - result->state = mycss_selectors_state_shared_after_attr_matcher; + entry->parser_state = mycss_selectors_state_shared_after_attr_matcher; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } break; } case MyCSS_TOKEN_TYPE_RIGHT_SQUARE_BRACKET: { - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_shared_after_wq_name_attr_right_bracket") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; break; } default: { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } @@ -659,71 +672,71 @@ bool mycss_selectors_state_shared_after_wq_name_attr(mycss_result_t* result, myc return true; } -bool mycss_selectors_state_shared_after_attr_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_shared_after_attr_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_RIGHT_SQUARE_BRACKET) { - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_shared_after_attr_modifier_right_bracket") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_shared_after_attribute_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_shared_after_attribute_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { if(*token->data == 'i') { - mycss_selectors_parser_selector_modifier(result, selectors, selector, token); - result->state = mycss_selectors_state_shared_after_attr_modifier; + mycss_selectors_parser_selector_modifier(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_shared_after_attr_modifier; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } } else if(token->type == MyCSS_TOKEN_TYPE_RIGHT_SQUARE_BRACKET) { - mycss_selectors_parser_selector_end(result, selectors, selector, token); + mycss_selectors_parser_selector_end(entry, selectors, selector, token); MyCSS_DEBUG_MESSAGE("mycss_selectors_state_shared_after_attribute_value_right_bracket") - result->parser = result->parser_switch; + entry->parser = entry->parser_switch; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } return true; } -bool mycss_selectors_state_shared_after_attr_matcher(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) +bool mycss_selectors_state_shared_after_attr_matcher(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token) { if(token->type == MyCSS_TOKEN_TYPE_IDENT) { - mycss_selectors_parser_selector_value(result, selectors, selector, token); - result->state = mycss_selectors_state_shared_after_attribute_value; + mycss_selectors_parser_selector_value(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_shared_after_attribute_value; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else if(token->type == MyCSS_TOKEN_TYPE_STRING) { - mycss_selectors_parser_selector_value(result, selectors, selector, token); - result->state = mycss_selectors_state_shared_after_attribute_value; + mycss_selectors_parser_selector_value(entry, selectors, selector, token); + entry->parser_state = mycss_selectors_state_shared_after_attribute_value; - if(result->parser != mycss_selectors_state_token_skip_whitespace) - result->parser = mycss_selectors_state_token_skip_whitespace; + if(entry->parser != mycss_selectors_state_token_skip_whitespace) + entry->parser = mycss_selectors_state_token_skip_whitespace; } else { - mycss_selectors_parser_expectations_error(result, selectors, selector, token); - result->parser = result->parser_switch; + mycss_selectors_parser_expectations_error(entry, selectors, selector, token); + entry->parser = entry->parser_switch; return false; } diff --git a/source/mycss/selectors/state.h b/source/mycss/selectors/state.h index 0dbc231..d607c10 100644 --- a/source/mycss/selectors/state.h +++ b/source/mycss/selectors/state.h @@ -26,39 +26,38 @@ extern "C" { #endif -#include "mycss/result.h" #include "mycss/entry.h" #include "mycss/selectors/myosi.h" #include "mycss/selectors/parser.h" #include "myhtml/utils.h" -bool mycss_selectors_state_token_all(mycss_result_t* result, mycss_token_t* token); -bool mycss_selectors_state_token_skip_whitespace(mycss_result_t* result, mycss_token_t* token); -void mycss_selectors_state_end(mycss_result_t* result); -bool mycss_selectors_state_function_skip_all(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_token_all(mycss_entry_t* entry, mycss_token_t* token); +bool mycss_selectors_state_token_skip_whitespace(mycss_entry_t* entry, mycss_token_t* token); +void mycss_selectors_state_end(mycss_entry_t* entry); +bool mycss_selectors_state_function_skip_all(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* */ -bool mycss_selectors_state_combinator(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_combinator_greater_than(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_combinator(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_combinator_greater_than(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); /* */ -bool mycss_selectors_state_simple_selector(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_colon(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_colon_function(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_full_stop(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_ident(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attr_modifier(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attribute_value(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_wq_name_attr(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); -bool mycss_selectors_state_shared_after_attr_matcher(mycss_result_t* result, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_left_bracket_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_colon(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_colon_function(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_full_stop(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_ident(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_simple_selector_ident_vertical_bar(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attr_modifier(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attribute_value(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_wq_name_attr(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); +bool mycss_selectors_state_shared_after_attr_matcher(mycss_entry_t* entry, mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, mycss_token_t* token); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/selectors/value.c b/source/mycss/selectors/value.c index 829f72d..24c0997 100644 --- a/source/mycss/selectors/value.c +++ b/source/mycss/selectors/value.c @@ -25,15 +25,15 @@ //// Create //// ///////////////////////////////////////////////////////// -void * mycss_selectors_value_undef_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_undef_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_result_t* result, bool set_clean) +mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_entry_t* entry, bool set_clean) { mycss_selectors_object_attribute_t* attr = (mycss_selectors_object_attribute_t*) - mchar_async_malloc(result->entry->mchar, result->entry->mchar_value_node_id, sizeof(mycss_selectors_object_attribute_t)); + mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_selectors_object_attribute_t)); if(set_clean) memset(attr, 0, sizeof(mycss_selectors_object_attribute_t)); @@ -45,69 +45,69 @@ mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycs //// Destroy //// ///////////////////////////////////////////////////////// -void * mycss_selectors_value_undef_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_undef_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { myhtml_string_destroy(mycss_selector_value_string(value), false); - mcobject_free(result->mcobject_string_entries, value); + mcobject_free(entry->mcobject_string_entries, value); return NULL; } -void * mycss_selectors_value_id_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_id_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { myhtml_string_destroy(mycss_selector_value_string(value), false); if(self_destroy) { - mcobject_free(result->mcobject_string_entries, value); + mcobject_free(entry->mcobject_string_entries, value); return NULL; } return value; } -void * mycss_selectors_value_class_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_class_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { myhtml_string_destroy(mycss_selector_value_string(value), false); if(self_destroy) { - mcobject_free(result->mcobject_string_entries, value); + mcobject_free(entry->mcobject_string_entries, value); return NULL; } return value; } -void * mycss_selectors_value_element_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_element_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { myhtml_string_destroy(mycss_selector_value_string(value), false); if(self_destroy) { - mcobject_free(result->mcobject_string_entries, value); + mcobject_free(entry->mcobject_string_entries, value); return NULL; } return value; } -void * mycss_selectors_value_attribute_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_attribute_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { if(mycss_selector_value_attribute(value)->value) { myhtml_string_destroy(mycss_selector_value_attribute(value)->value, false); - mcobject_free(result->mcobject_string_entries, mycss_selector_value_attribute(value)->value); + mcobject_free(entry->mcobject_string_entries, mycss_selector_value_attribute(value)->value); } if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy) { if(sub_type > MyCSS_SELECTORS_SUB_TYPE_UNKNOWN && sub_type < MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_LAST_ENTRY) - return (mycss_selectors_value_function_destroy_map[sub_type](result, value, self_destroy)); + return (mycss_selectors_value_function_destroy_map[sub_type](entry, value, self_destroy)); return value; } @@ -116,19 +116,19 @@ void * mycss_selectors_value_pseudo_class_function_destroy(mycss_result_t* resul //// Pseudo Class Function Create //// ///////////////////////////////////////////////////////// -void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -void * mycss_selectors_value_pseudo_class_function_current_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_current_create(mycss_entry_t* entry, bool set_clean) { - return mycss_result_entry_create(result); + return mycss_selectors_list_create(entry->selectors); } -void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_entry_t* entry, bool set_clean) { - myhtml_string_t *str = mcobject_malloc(result->mcobject_string_entries, NULL); + myhtml_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL); if(set_clean) myhtml_string_clean_all(str); @@ -136,21 +136,21 @@ void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_result_t* re return str; } -void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_entry_t* entry, bool set_clean) { /* not need create */ return NULL; } -void * mycss_selectors_value_pseudo_class_function_has_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_has_create(mycss_entry_t* entry, bool set_clean) { - return mycss_result_entry_create(result); + return mycss_selectors_list_create(entry->selectors); } -void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_entry_t* entry, bool set_clean) { mycss_selectors_value_lang_t* lang = (mycss_selectors_value_lang_t*) - mchar_async_malloc(result->entry->mchar, result->entry->mchar_value_node_id, sizeof(mycss_selectors_value_lang_t)); + mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_selectors_value_lang_t)); if(set_clean) { lang->next = NULL; @@ -160,20 +160,20 @@ void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_result_t* r return lang; } -void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_entry_t* entry, bool set_clean) { - return mycss_result_entry_create(result); + return mycss_selectors_list_create(entry->selectors); } -void * mycss_selectors_value_pseudo_class_function_not_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_not_create(mycss_entry_t* entry, bool set_clean) { - return mycss_result_entry_create(result); + return mycss_selectors_list_create(entry->selectors); } -void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_entry_t* entry, bool set_clean) { mycss_an_plus_b_entry_t* anb_entry = (mycss_an_plus_b_entry_t*) - mchar_async_malloc(result->entry->mchar, result->entry->mchar_value_node_id, sizeof(mycss_an_plus_b_entry_t)); + mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_an_plus_b_entry_t)); if(set_clean) memset(anb_entry, 0, sizeof(mycss_an_plus_b_entry_t)); @@ -181,27 +181,27 @@ void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_result return anb_entry; } -void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_entry_t* entry, bool set_clean) { return NULL; } -void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_result_t* result, bool set_clean) +void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_entry_t* entry, bool set_clean) { return NULL; } @@ -210,7 +210,7 @@ void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_resu //// Pseudo Class Function Destroy //// ///////////////////////////////////////////////////////// -void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { /* not need destroy */ if(self_destroy) { @@ -220,17 +220,17 @@ void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_result_t* return value; } -void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { - return mycss_result_entry_destroy(result, value, self_destroy); + return mycss_selectors_list_destroy(entry->selectors, value, self_destroy); } -void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { return myhtml_string_destroy(value, self_destroy); } -void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { /* not need destroy */ if(self_destroy) { @@ -240,12 +240,12 @@ void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_result_t* return value; } -void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { - return mycss_result_entry_destroy(result, value, self_destroy); + return mycss_selectors_list_destroy(entry->selectors, value, self_destroy); } -void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; @@ -258,7 +258,7 @@ void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_result_t* } if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } @@ -267,17 +267,17 @@ void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_result_t* return value; } -void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { - return mycss_result_entry_destroy(result, value, self_destroy); + return mycss_selectors_list_destroy(entry->selectors, value, self_destroy); } -void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { - return mycss_result_entry_destroy(result, value, self_destroy); + return mycss_selectors_list_destroy(entry->selectors, value, self_destroy); } -void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; @@ -285,30 +285,30 @@ void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_resul mycss_an_plus_b_entry_t *anb = value; if(anb->of) - anb->of = mycss_result_entry_destroy(result, anb->of, true); + anb->of = mycss_selectors_list_destroy(entry->selectors, anb->of, true); if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; @@ -316,49 +316,49 @@ void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_ mycss_an_plus_b_entry_t *anb = value; if(anb->of) - anb->of = mycss_result_entry_destroy(result, anb->of, true); + anb->of = mycss_selectors_list_destroy(entry->selectors, anb->of, true); if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } return value; } -void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy) +void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy) { if(value == NULL) return NULL; if(self_destroy) { - mchar_async_free(result->entry->mchar, result->entry->mchar_value_node_id, value); + mchar_async_free(entry->mchar, entry->mchar_value_node_id, value); return NULL; } diff --git a/source/mycss/selectors/value.h b/source/mycss/selectors/value.h index f9c9027..58382d5 100644 --- a/source/mycss/selectors/value.h +++ b/source/mycss/selectors/value.h @@ -28,20 +28,19 @@ #define mycss_selector_value_drop(obj) ((mycss_selectors_function_drop_type_t)(obj)) #define mycss_selector_value_lang(obj) ((mycss_selectors_value_lang_t*)(obj)) #define mycss_selector_value_function(obj) ((mycss_result_entry_t*)(obj)) -#define mycss_selector_value_destroy(result, type, sub_type, value, self_destroy) (mycss_selectors_value_destroy_map[type](result, type, sub_type, value, self_destroy)) +#define mycss_selector_value_destroy(entry, type, sub_type, value, self_destroy) (mycss_selectors_value_destroy_map[type](entry, type, sub_type, value, self_destroy)) #ifdef __cplusplus extern "C" { #endif -#include "mycss/result.h" #include "mycss/entry.h" #include "mycss/an_plus_b.h" #include "mycss/selectors/myosi.h" #include "myhtml/utils/mchar_async.h" -typedef void * (*mycss_selectors_value_destroy_f)(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -typedef void * (*mycss_selectors_value_function_destroy_f)(mycss_result_t* result, void* value, bool self_destroy); +typedef void * (*mycss_selectors_value_destroy_f)(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +typedef void * (*mycss_selectors_value_function_destroy_f)(mycss_entry_t* entry, void* value, bool self_destroy); struct mycss_selectors_value_attribute { myhtml_string_t* value; @@ -59,48 +58,48 @@ typedef mycss_selectors_value_lang_t; /* create */ -void * mycss_selectors_value_undef_create(mycss_result_t* result, bool set_clean); -mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_result_t* result, bool set_clean); +void * mycss_selectors_value_undef_create(mycss_entry_t* entry, bool set_clean); +mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_entry_t* entry, bool set_clean); /* destroy */ -void * mycss_selectors_value_undef_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_id_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_class_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_element_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_attribute_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_destroy(mycss_result_t* result, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_undef_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_id_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_class_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_element_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_attribute_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, mycss_selectors_sub_type_t sub_type, void* value, bool self_destroy); /* pseudo class function create */ -void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_current_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_has_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_not_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_result_t* result, bool set_clean); -void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_result_t* result, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_current_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_has_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_not_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_entry_t* entry, bool set_clean); +void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_entry_t* entry, bool set_clean); /* pseudo class function destroy */ -void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy); -void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_result_t* result, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy); +void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/mycss/stylesheet.c b/source/mycss/stylesheet.c new file mode 100644 index 0000000..88f1a2a --- /dev/null +++ b/source/mycss/stylesheet.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#include "mycss/stylesheet.h" + +mycss_stylesheet_t * mycss_stylesheet_create(void) +{ + return (mycss_stylesheet_t*)myhtml_calloc(1, sizeof(mycss_stylesheet_t)); +} + +mycss_status_t mycss_stylesheet_init(mycss_stylesheet_t* stylesheet, mycss_entry_t* entry) +{ + stylesheet->entry = entry; + + mycss_status_t status = mycss_namespace_stylesheet_init(&stylesheet->ns_stylesheet, entry); + if(status != MyCSS_STATUS_OK) + return status; + + /* create first result entry and selector */ + if(entry->selectors) { + stylesheet->sel_list_first = stylesheet->sel_list_last = mycss_selectors_list_create(entry->selectors); + stylesheet->sel_list_last->selector = mycss_selectors_entry_create(entry->selectors); + mycss_selectors_list_append_selector(entry->selectors, stylesheet->sel_list_last, stylesheet->sel_list_first->selector); + } + + return MyCSS_STATUS_OK; +} + +mycss_status_t mycss_stylesheet_clean_all(mycss_stylesheet_t* stylesheet) +{ + mycss_status_t status = mycss_namespace_stylesheet_clean(&stylesheet->ns_stylesheet, stylesheet->entry); + if(status != MyCSS_STATUS_OK) + return status; + + memset(stylesheet, 0, sizeof(mycss_stylesheet_t)); + + return MyCSS_STATUS_OK; +} + +mycss_stylesheet_t * mycss_stylesheet_destroy(mycss_stylesheet_t* stylesheet, bool self_destroy) +{ + mycss_namespace_stylesheet_destroy(&stylesheet->ns_stylesheet, stylesheet->entry, false); + + if(self_destroy) { + myhtml_free(stylesheet); + return NULL; + } + + return stylesheet; +} + + diff --git a/source/mycss/stylesheet.h b/source/mycss/stylesheet.h new file mode 100644 index 0000000..ad9156f --- /dev/null +++ b/source/mycss/stylesheet.h @@ -0,0 +1,57 @@ +/* + Copyright (C) 2016 Alexander Borisov + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#ifndef MyHTML_MyCSS_STYLESHEET_H +#define MyHTML_MyCSS_STYLESHEET_H +#pragma once + +#include "mycss/myosi.h" +#include "mycss/entry.h" +#include "mycss/namespace/myosi.h" +#include "mycss/selectors/myosi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct mycss_stylesheet { + mycss_entry_t* entry; /* refs */ + + mycss_namespace_stylesheet_t ns_stylesheet; + mycss_selectors_list_t* sel_list_first; + mycss_selectors_list_t* sel_list_last; + + mycss_stylesheet_t* child; + mycss_stylesheet_t* parent; + mycss_stylesheet_t* next; + mycss_stylesheet_t* prev; +}; + +mycss_stylesheet_t * mycss_stylesheet_create(void); +mycss_status_t mycss_stylesheet_init(mycss_stylesheet_t* stylesheet, mycss_entry_t* entry); +mycss_status_t mycss_stylesheet_clean_all(mycss_stylesheet_t* stylesheet); +mycss_stylesheet_t * mycss_stylesheet_destroy(mycss_stylesheet_t* stylesheet, bool self_destroy); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif /* MyHTML_MyCSS_STYLESHEET_H */ diff --git a/test/Selectors/Basic.txt b/test/Selectors/Basic.txt index 5353c1d..0403d2c 100644 --- a/test/Selectors/Basic.txt +++ b/test/Selectors/Basic.txt @@ -1,17 +1,16 @@ - div HtMl|span |svg |* * .class #hash [attr_key=attr_value i] [key] [svg|attr_key_ns=attr_value_ns i] [|key_ns] + div span |svg |* * .class #hash [attr_key=attr_value i] [key] [|key_ns] - - - + + + - - + div @@ -19,6 +18,6 @@ #hash [key] [key=value] -[|key=value] -[svg|key=value] +[|key=value] +[svg|key=value] [key=value i] diff --git a/test/Selectors/pseudo_class_function.txt b/test/Selectors/pseudo_class_function.txt index c62ab3f..9628457 100644 --- a/test/Selectors/pseudo_class_function.txt +++ b/test/Selectors/pseudo_class_function.txt @@ -100,7 +100,7 @@ - :not(svg|div) + @namespace SVG "http://www.w3.org/2000/svg"; :not(SVG|div) @@ -109,7 +109,7 @@ - :not([svg|div]) + @namespace SVG "http://www.w3.org/2000/svg"; :not([SVG|div]) @@ -118,20 +118,20 @@ - :not(svg|div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; @namespace html "http://www.w3.org/1999/xhtml"; :not(SVG|div[html|a=b]) - + - :not(svg |div[html|a=b]) + :not(SVG |div[html|a=b]) - + @@ -349,7 +349,7 @@ - :matches(svg|div) + @namespace SVG "http://www.w3.org/2000/svg"; :matches(SVG|div) @@ -358,7 +358,7 @@ - :matches([svg|div]) + @namespace SVG "http://www.w3.org/2000/svg"; :matches([SVG|div]) @@ -367,20 +367,20 @@ - :matches(svg|div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; @namespace html "http://www.w3.org/1999/xhtml"; :matches(SVG|div[html|a=b]) - + - :matches(svg |div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; :matches(SVG |div[html|a=b]) - + @@ -620,7 +620,7 @@ - :has(svg|div) + @namespace SVG "http://www.w3.org/2000/svg"; :has(SVG|div) @@ -629,7 +629,7 @@ - :has([svg|div]) + @namespace SVG "http://www.w3.org/2000/svg"; :has([SVG|div]) @@ -638,20 +638,20 @@ - :has(svg|div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; @namespace html "http://www.w3.org/1999/xhtml"; :has(SVG|div[html|a=b]) - + - :has(svg |div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; :has(SVG |div[html|a=b]) - + @@ -774,7 +774,7 @@ - :has(+ div, >> svg|span, > [key], || #col, ~ .img) + @namespace SVG "http://www.w3.org/2000/svg"; :has(+ div, >> SVG|span, > [key], || #col, ~ .img) , @@ -1105,7 +1105,7 @@ - :current(svg|div) + @namespace SVG "http://www.w3.org/2000/svg"; :current(SVG|div) @@ -1114,7 +1114,7 @@ - :current([svg|div]) + @namespace SVG "http://www.w3.org/2000/svg"; :current([SVG|div]) @@ -1123,20 +1123,20 @@ - :current(svg|div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; @namespace html "http://www.w3.org/1999/xhtml"; :current(SVG|div[html|a=b]) - + - :current(svg |div[html|a=b]) + @namespace SVG "http://www.w3.org/2000/svg"; :current(SVG |div[html|a=b]) - + diff --git a/test/test.c b/test/test.c index adc9e14..58ec06a 100644 --- a/test/test.c +++ b/test/test.c @@ -30,16 +30,16 @@ #include #include -#include #include +#include #include #include #include -#include +#include #include void test_print_selector(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, myhtml_string_t* str); -void test_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_entry, myhtml_string_t* str); +void test_result_entry_print(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list, myhtml_string_t* str); struct res_html { char *html; @@ -83,20 +83,36 @@ struct res_html load_html_file(const char* filename) //// CSS Parsing //// ///////////////////////////////////////////////////////// - -void test_print_selector_value_attribute(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, myhtml_string_t* str) +void test_print_selector_namespace(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, myhtml_string_t* str) { - if(selector->ns) { + if(selector->ns_entry && selector->ns_entry->ns_id != MyHTML_NAMESPACE_ANY) { myhtml_string_append(str, " ns=\"", strlen(" ns=\"")); size_t length; - const char *name = mycss_namespace_name_by_id(selectors->entry->ns, selector->ns, &length); + bool is_default; + const char *ns_name = mycss_namespace_name_by_entry(selector->ns_entry, selectors->entry->stylesheet->ns_stylesheet.name_tree, &length, &is_default); - if(length) - myhtml_string_append(str, name, length); + if(is_default) { + myhtml_string_append(str, "", 1); + } + else { + myhtml_string_append(str, ns_name, length); + } myhtml_string_append(str, "\"", strlen("\"")); } +} + +void test_print_selector_value_attribute(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, myhtml_string_t* str) +{ + test_print_selector_namespace(selectors, selector, str); if(selector->value == NULL) { myhtml_string_append(str, ">", 1); @@ -124,18 +140,7 @@ void test_print_selector_value_attribute(mycss_selectors_t* selectors, mycss_sel void test_print_selector_value_element(mycss_selectors_t* selectors, mycss_selectors_entry_t* selector, myhtml_string_t* str) { - if(selector->ns) { - myhtml_string_append(str, " ns=\"", strlen(" ns=\"")); - - size_t length; - const char *name = mycss_namespace_name_by_id(selectors->entry->ns, selector->ns, &length); - - if(length) - myhtml_string_append(str, name, length); - - myhtml_string_append(str, "\"", strlen("\"")); - } - + test_print_selector_namespace(selectors, selector, str); myhtml_string_append(str, ">", 1); } @@ -147,8 +152,6 @@ void test_print_number(myhtml_string_t* str, long num) myhtml_string_append(str, str_num, strlen(str_num)); } - - void test_print_an_plus_b(mycss_an_plus_b_entry_t* anb_entry, myhtml_string_t* str) { if(anb_entry->a != 0) { @@ -173,7 +176,7 @@ void test_print_pseudo_class_function(mycss_selectors_t* selectors, mycss_select case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_MATCHES: case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_CURRENT: if(selector->value) - test_result_entry_print(selectors->entry->result, selector->value, str); + test_result_entry_print(selectors->entry, selector->value, str); break; case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_NTH_CHILD: @@ -186,7 +189,7 @@ void test_print_pseudo_class_function(mycss_selectors_t* selectors, mycss_select if(mycss_selector_value_an_plus_b(selector->value)->of) { myhtml_string_append(str, "\n", 1); - test_result_entry_print(selectors->entry->result, mycss_selector_value_an_plus_b(selector->value)->of, str); + test_result_entry_print(selectors->entry, mycss_selector_value_an_plus_b(selector->value)->of, str); } break; @@ -358,15 +361,15 @@ void test_print_selector(mycss_selectors_t* selectors, mycss_selectors_entry_t* } } -void test_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_entry, myhtml_string_t* str) +void test_result_entry_print(mycss_entry_t* entry, mycss_selectors_list_t* selectors_list, myhtml_string_t* str) { - while(res_entry) { - for(size_t i = 0; i < res_entry->selector_list_length; i++) { + while(selectors_list) { + for(size_t i = 0; i < selectors_list->selector_list_length; i++) { - mycss_selectors_entry_t* selector = res_entry->selector_list[i]; + mycss_selectors_entry_t* selector = selectors_list->selector_list[i]; while(selector) { - test_print_selector(result->entry->selectors, selector, str); + test_print_selector(entry->selectors, selector, str); myhtml_string_append(str, "", strlen("")); @@ -376,11 +379,11 @@ void test_result_entry_print(mycss_result_t* result, mycss_result_entry_t* res_e selector = selector->next; } - if((i + 1) != res_entry->selector_list_length) + if((i + 1) != selectors_list->selector_list_length) myhtml_string_append(str, ",\n", 2); } - res_entry = res_entry->next; + selectors_list = selectors_list->next; } } @@ -420,9 +423,9 @@ void test_print_tag_selector(myhtml_tree_node_t* node, myhtml_string_t* str) test_node_attr_value(node, "key", str); test_node_attr_value(node, "comb", str); test_node_attr_value(node, "ns", str); + test_node_attr_value(node, "flags", str); test_node_attr_value(node, "value", str); test_node_attr_value(node, "mod", str); - test_node_attr_value(node, "flags", str); myhtml_string_append(str, ">", 1); } @@ -515,9 +518,9 @@ void test_html_result(myhtml_tree_t* tree, myhtml_tree_node_t *node, myhtml_stri //// Process //// ///////////////////////////////////////////////////////// -bool test_process(mycss_result_t *css_result, myhtml_tree_t* tree, myhtml_tree_node_t *node, myhtml_string_t* css_res, myhtml_string_t* res_res) +bool test_process(mycss_entry_t *css_entry, myhtml_tree_t* tree, myhtml_tree_node_t *node, myhtml_string_t* css_res, myhtml_string_t* res_res) { - test_result_entry_print(css_result, css_result->result_entry_first, css_res); + test_result_entry_print(css_entry, css_entry->stylesheet->sel_list_first, css_res); myhtml_collection_t *collection = myhtml_get_nodes_by_name_in_scope(tree, NULL, node, "result", 6, NULL); @@ -558,9 +561,9 @@ size_t test_data(myhtml_tree_t* tree, size_t count_of_files, size_t* bad_res) mycss_parse(entry, MyHTML_ENCODING_UTF_8, data_str->data, data_str->length); - test_process(entry->result, tree, collection->list[i], &css_res, &res_res); + test_process(entry, tree, collection->list[i], &css_res, &res_res); - mycss_result_destroy(entry->result, true); + entry->stylesheet = mycss_stylesheet_destroy(entry->stylesheet, true); count++; printf("\t%zu: ", count); @@ -666,23 +669,23 @@ size_t test_dir(const char* dir_path, const char* test_name, size_t *bad_count) int main(int argc, const char * argv[]) { - if (argc < 3) { - printf("Bad ARGV!\nUse: test [ ]*\n"); - exit(EXIT_FAILURE); - } - - printf("\nDirectory: %s\n", argv[1]); +// if (argc < 3) { +// printf("Bad ARGV!\nUse: test [ ]*\n"); +// exit(EXIT_FAILURE); +// } +// +// printf("\nDirectory: %s\n", argv[1]); +// +// size_t bad_count = 0; +// size_t all_count = 0; +// +// for(size_t i = 2; i < argc; i++) { +// all_count += test_dir(argv[1], argv[i], &bad_count); +// } size_t bad_count = 0; size_t all_count = 0; - - for(size_t i = 2; i < argc; i++) { - all_count += test_dir(argv[1], argv[i], &bad_count); - } - -// size_t bad_count = 0; -// size_t all_count = 0; -// all_count += test_dir("/new/C-git/mycss/test", "Selectors", &bad_count); + all_count += test_dir("/new/C-git/mycss/test", "Selectors", &bad_count); printf("\nTotal count: %zu; Good: %zu; Bad: %zu\n", all_count, (all_count - bad_count), bad_count); diff --git a/test/test.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate b/test/test.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate index c90aaa4..e5d0ef8 100644 Binary files a/test/test.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate and b/test/test.xcodeproj/project.xcworkspace/xcuserdata/alexanderborisov.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/utils/selectors.pl b/utils/selectors.pl index c3d6212..f0be8c4 100755 --- a/utils/selectors.pl +++ b/utils/selectors.pl @@ -74,8 +74,8 @@ #$hash_full->{$key} = $grammar->make_combine_hash_from_decomposing_list($work_full->{$key}, sub{ $_[1]->entry->name }); } -my $key = ""; -#my $key = ""; +#my $key = ""; +my $key = ""; #my $key = ""; #my $key = "";