├── .gitignore ├── Demo~ └── Regex │ ├── Assets │ ├── Scenes.meta │ └── Scenes │ │ ├── SampleScene.unity │ │ └── SampleScene.unity.meta │ ├── Packages │ ├── manifest.json │ └── packages-lock.json │ └── ProjectSettings │ ├── AudioManager.asset │ ├── ClusterInputManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── NavMeshAreas.asset │ ├── PackageManagerSettings.asset │ ├── Physics2DSettings.asset │ ├── PresetManager.asset │ ├── ProjectSettings.asset │ ├── ProjectVersion.txt │ ├── QualitySettings.asset │ ├── TagManager.asset │ ├── TimeManager.asset │ ├── UnityConnectSettings.asset │ ├── VFXManager.asset │ ├── VersionControlSettings.asset │ └── XRSettings.asset ├── LICENSE.md ├── LICENSE.md.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── Alternation.cs ├── Alternation.cs.meta ├── Anchor.cs ├── Anchor.cs.meta ├── Literal.cs ├── Literal.cs.meta ├── Lumpn.Regex.asmdef ├── Lumpn.Regex.asmdef.meta ├── NamedCapture.cs ├── NamedCapture.cs.meta ├── OneOrMore.cs ├── OneOrMore.cs.meta ├── Optional.cs ├── Optional.cs.meta ├── Pattern.cs ├── Pattern.cs.meta ├── PatternExtensions.cs ├── PatternExtensions.cs.meta ├── Patterns.cs ├── Patterns.cs.meta ├── Range.cs ├── Range.cs.meta ├── Repeat.cs ├── Repeat.cs.meta ├── Sequence.cs ├── Sequence.cs.meta ├── Verbatim.cs ├── Verbatim.cs.meta ├── ZeroOrMore.cs └── ZeroOrMore.cs.meta ├── Tests.meta ├── Tests ├── Editor.meta └── Editor │ ├── AlternationTest.cs │ ├── AlternationTest.cs.meta │ ├── CaptureTest.cs │ ├── CaptureTest.cs.meta │ ├── LiteralTest.cs │ ├── LiteralTest.cs.meta │ ├── Lumpn.Regex.Editor.Tests.asmdef │ ├── Lumpn.Regex.Editor.Tests.asmdef.meta │ ├── OperatorPrecedenceTest.cs │ ├── OperatorPrecedenceTest.cs.meta │ ├── QuantifierTest.cs │ ├── QuantifierTest.cs.meta │ ├── RangeTest.cs │ ├── RangeTest.cs.meta │ ├── SequenceTest.cs │ └── SequenceTest.cs.meta ├── package.json └── package.json.meta /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | **/[Ll]ibrary/ 6 | **/[Tt]emp/ 7 | **/[Oo]bj/ 8 | **/[Bb]uild/ 9 | **/[Bb]uilds/ 10 | **/[Ll]ogs/ 11 | **/[Mm]emoryCaptures/ 12 | **/[Uu]serSettings/ 13 | 14 | # Asset meta data should only be ignored when the corresponding asset is also ignored 15 | !/[Aa]ssets/**/*.meta 16 | 17 | # Uncomment this line if you wish to ignore the asset store tools plugin 18 | # /[Aa]ssets/AssetStoreTools* 19 | 20 | # Autogenerated Jetbrains Rider plugin 21 | [Aa]ssets/Plugins/Editor/JetBrains* 22 | 23 | # Visual Studio cache directory 24 | .vs/ 25 | 26 | # Gradle cache directory 27 | .gradle/ 28 | 29 | # Autogenerated VS/MD/Consulo solution and project files 30 | ExportedObj/ 31 | .consulo/ 32 | *.csproj 33 | *.unityproj 34 | *.sln 35 | *.suo 36 | *.tmp 37 | *.user 38 | *.userprefs 39 | *.pidb 40 | *.booproj 41 | *.svd 42 | *.pdb 43 | *.mdb 44 | *.opendb 45 | *.VC.db 46 | 47 | # Unity3D generated meta files 48 | *.pidb.meta 49 | *.pdb.meta 50 | *.mdb.meta 51 | 52 | # Unity3D generated file on crash reports 53 | sysinfo.txt 54 | 55 | # Builds 56 | *.apk 57 | *.unitypackage 58 | 59 | # Crashlytics generated file 60 | crashlytics-build.properties 61 | 62 | -------------------------------------------------------------------------------- /Demo~/Regex/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d391b83444d1ef3468ac654dc79a6144 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Demo~/Regex/Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 705507994} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &705507993 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInternal: {fileID: 0} 129 | serializedVersion: 6 130 | m_Component: 131 | - component: {fileID: 705507995} 132 | - component: {fileID: 705507994} 133 | m_Layer: 0 134 | m_Name: Directional Light 135 | m_TagString: Untagged 136 | m_Icon: {fileID: 0} 137 | m_NavMeshLayer: 0 138 | m_StaticEditorFlags: 0 139 | m_IsActive: 1 140 | --- !u!108 &705507994 141 | Light: 142 | m_ObjectHideFlags: 0 143 | m_CorrespondingSourceObject: {fileID: 0} 144 | m_PrefabInternal: {fileID: 0} 145 | m_GameObject: {fileID: 705507993} 146 | m_Enabled: 1 147 | serializedVersion: 8 148 | m_Type: 1 149 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 150 | m_Intensity: 1 151 | m_Range: 10 152 | m_SpotAngle: 30 153 | m_CookieSize: 10 154 | m_Shadows: 155 | m_Type: 2 156 | m_Resolution: -1 157 | m_CustomResolution: -1 158 | m_Strength: 1 159 | m_Bias: 0.05 160 | m_NormalBias: 0.4 161 | m_NearPlane: 0.2 162 | m_Cookie: {fileID: 0} 163 | m_DrawHalo: 0 164 | m_Flare: {fileID: 0} 165 | m_RenderMode: 0 166 | m_CullingMask: 167 | serializedVersion: 2 168 | m_Bits: 4294967295 169 | m_Lightmapping: 1 170 | m_LightShadowCasterMode: 0 171 | m_AreaSize: {x: 1, y: 1} 172 | m_BounceIntensity: 1 173 | m_ColorTemperature: 6570 174 | m_UseColorTemperature: 0 175 | m_ShadowRadius: 0 176 | m_ShadowAngle: 0 177 | --- !u!4 &705507995 178 | Transform: 179 | m_ObjectHideFlags: 0 180 | m_CorrespondingSourceObject: {fileID: 0} 181 | m_PrefabInternal: {fileID: 0} 182 | m_GameObject: {fileID: 705507993} 183 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 184 | m_LocalPosition: {x: 0, y: 3, z: 0} 185 | m_LocalScale: {x: 1, y: 1, z: 1} 186 | m_Children: [] 187 | m_Father: {fileID: 0} 188 | m_RootOrder: 1 189 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 190 | --- !u!1 &963194225 191 | GameObject: 192 | m_ObjectHideFlags: 0 193 | m_CorrespondingSourceObject: {fileID: 0} 194 | m_PrefabInternal: {fileID: 0} 195 | serializedVersion: 6 196 | m_Component: 197 | - component: {fileID: 963194228} 198 | - component: {fileID: 963194227} 199 | - component: {fileID: 963194226} 200 | m_Layer: 0 201 | m_Name: Main Camera 202 | m_TagString: MainCamera 203 | m_Icon: {fileID: 0} 204 | m_NavMeshLayer: 0 205 | m_StaticEditorFlags: 0 206 | m_IsActive: 1 207 | --- !u!81 &963194226 208 | AudioListener: 209 | m_ObjectHideFlags: 0 210 | m_CorrespondingSourceObject: {fileID: 0} 211 | m_PrefabInternal: {fileID: 0} 212 | m_GameObject: {fileID: 963194225} 213 | m_Enabled: 1 214 | --- !u!20 &963194227 215 | Camera: 216 | m_ObjectHideFlags: 0 217 | m_CorrespondingSourceObject: {fileID: 0} 218 | m_PrefabInternal: {fileID: 0} 219 | m_GameObject: {fileID: 963194225} 220 | m_Enabled: 1 221 | serializedVersion: 2 222 | m_ClearFlags: 1 223 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 224 | m_projectionMatrixMode: 1 225 | m_SensorSize: {x: 36, y: 24} 226 | m_LensShift: {x: 0, y: 0} 227 | m_GateFitMode: 2 228 | m_FocalLength: 50 229 | m_NormalizedViewPortRect: 230 | serializedVersion: 2 231 | x: 0 232 | y: 0 233 | width: 1 234 | height: 1 235 | near clip plane: 0.3 236 | far clip plane: 1000 237 | field of view: 60 238 | orthographic: 0 239 | orthographic size: 5 240 | m_Depth: -1 241 | m_CullingMask: 242 | serializedVersion: 2 243 | m_Bits: 4294967295 244 | m_RenderingPath: -1 245 | m_TargetTexture: {fileID: 0} 246 | m_TargetDisplay: 0 247 | m_TargetEye: 3 248 | m_HDR: 1 249 | m_AllowMSAA: 1 250 | m_AllowDynamicResolution: 0 251 | m_ForceIntoRT: 0 252 | m_OcclusionCulling: 1 253 | m_StereoConvergence: 10 254 | m_StereoSeparation: 0.022 255 | --- !u!4 &963194228 256 | Transform: 257 | m_ObjectHideFlags: 0 258 | m_CorrespondingSourceObject: {fileID: 0} 259 | m_PrefabInternal: {fileID: 0} 260 | m_GameObject: {fileID: 963194225} 261 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 262 | m_LocalPosition: {x: 0, y: 1, z: -10} 263 | m_LocalScale: {x: 1, y: 1, z: 1} 264 | m_Children: [] 265 | m_Father: {fileID: 0} 266 | m_RootOrder: 0 267 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 268 | -------------------------------------------------------------------------------- /Demo~/Regex/Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Demo~/Regex/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.test-framework": "1.1.30", 4 | "de.lumpn.unity-regex": "file:../../../" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Demo~/Regex/Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ext.nunit": { 4 | "version": "1.0.6", 5 | "depth": 1, 6 | "source": "registry", 7 | "dependencies": {}, 8 | "url": "https://packages.unity.com" 9 | }, 10 | "com.unity.test-framework": { 11 | "version": "1.1.30", 12 | "depth": 0, 13 | "source": "registry", 14 | "dependencies": { 15 | "com.unity.ext.nunit": "1.0.6", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0" 18 | }, 19 | "url": "https://packages.unity.com" 20 | }, 21 | "de.lumpn.unity-regex": { 22 | "version": "file:../../../", 23 | "depth": 0, 24 | "source": "local", 25 | "dependencies": { 26 | "com.unity.ext.nunit": "1.0.0" 27 | } 28 | }, 29 | "com.unity.modules.imgui": { 30 | "version": "1.0.0", 31 | "depth": 1, 32 | "source": "builtin", 33 | "dependencies": {} 34 | }, 35 | "com.unity.modules.jsonserialize": { 36 | "version": "1.0.0", 37 | "depth": 1, 38 | "source": "builtin", 39 | "dependencies": {} 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Scenes/SampleScene.unity 10 | guid: 9fc0d4010bbf28b4594072e72b8655ab 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_SerializeInlineMappingsOnOneLine: 1 -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreviewPackages: 0 16 | m_EnablePackageDependencies: 1 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | oneTimeWarningShown: 0 20 | m_Registries: 21 | - m_Id: main 22 | m_Name: 23 | m_Url: https://packages.unity.com 24 | m_Scopes: [] 25 | m_IsDefault: 1 26 | m_Capabilities: 7 27 | m_UserSelectedRegistryName: 28 | m_UserAddingNewScopedRegistry: 0 29 | m_RegistryInfoDraft: 30 | m_ErrorMessage: 31 | m_Original: 32 | m_Id: 33 | m_Name: 34 | m_Url: 35 | m_Scopes: [] 36 | m_IsDefault: 0 37 | m_Capabilities: 0 38 | m_Modified: 0 39 | m_Name: 40 | m_Url: 41 | m_Scopes: 42 | - 43 | m_SelectedScopeIndex: 0 44 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 22 7 | productGUID: a478efaac5863b541afb82438bd85457 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Regex 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | mipStripping: 0 53 | numberOfMipsStripped: 0 54 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 55 | iosShowActivityIndicatorOnLoading: -1 56 | androidShowActivityIndicatorOnLoading: -1 57 | iosUseCustomAppBackgroundBehavior: 0 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidStartInFullscreen: 1 68 | androidRenderOutsideSafeArea: 1 69 | androidUseSwappy: 1 70 | androidBlitType: 0 71 | androidResizableWindow: 0 72 | androidDefaultWindowWidth: 1920 73 | androidDefaultWindowHeight: 1080 74 | androidMinimumWindowWidth: 400 75 | androidMinimumWindowHeight: 300 76 | androidFullscreenMode: 1 77 | defaultIsNativeResolution: 1 78 | macRetinaSupport: 1 79 | runInBackground: 1 80 | captureSingleScreen: 0 81 | muteOtherAudioSources: 0 82 | Prepare IOS For Recording: 0 83 | Force IOS Speakers When Recording: 0 84 | deferSystemGesturesMode: 0 85 | hideHomeButton: 0 86 | submitAnalytics: 1 87 | usePlayerLog: 1 88 | bakeCollisionMeshes: 0 89 | forceSingleInstance: 0 90 | useFlipModelSwapchain: 1 91 | resizableWindow: 0 92 | useMacAppStoreValidation: 0 93 | macAppStoreCategory: public.app-category.games 94 | gpuSkinning: 1 95 | xboxPIXTextureCapture: 0 96 | xboxEnableAvatar: 0 97 | xboxEnableKinect: 0 98 | xboxEnableKinectAutoTracking: 0 99 | xboxEnableFitness: 0 100 | visibleInBackground: 1 101 | allowFullscreenSwitch: 1 102 | fullscreenMode: 1 103 | xboxSpeechDB: 0 104 | xboxEnableHeadOrientation: 0 105 | xboxEnableGuest: 0 106 | xboxEnablePIXSampling: 0 107 | metalFramebufferOnly: 0 108 | xboxOneResolution: 0 109 | xboxOneSResolution: 0 110 | xboxOneXResolution: 3 111 | xboxOneMonoLoggingLevel: 0 112 | xboxOneLoggingLevel: 1 113 | xboxOneDisableEsram: 0 114 | xboxOneEnableTypeOptimization: 0 115 | xboxOnePresentImmediateThreshold: 0 116 | switchQueueCommandMemory: 0 117 | switchQueueControlMemory: 16384 118 | switchQueueComputeMemory: 262144 119 | switchNVNShaderPoolsGranularity: 33554432 120 | switchNVNDefaultPoolsGranularity: 16777216 121 | switchNVNOtherPoolsGranularity: 16777216 122 | switchNVNMaxPublicTextureIDCount: 0 123 | switchNVNMaxPublicSamplerIDCount: 0 124 | stadiaPresentMode: 0 125 | stadiaTargetFramerate: 0 126 | vulkanNumSwapchainBuffers: 3 127 | vulkanEnableSetSRGBWrite: 0 128 | vulkanEnablePreTransform: 0 129 | vulkanEnableLateAcquireNextImage: 0 130 | vulkanEnableCommandBufferRecycling: 1 131 | m_SupportedAspectRatios: 132 | 4:3: 1 133 | 5:4: 1 134 | 16:10: 1 135 | 16:9: 1 136 | Others: 1 137 | bundleVersion: 0.1 138 | preloadedAssets: [] 139 | metroInputSource: 0 140 | wsaTransparentSwapchain: 0 141 | m_HolographicPauseOnTrackingLoss: 1 142 | xboxOneDisableKinectGpuReservation: 1 143 | xboxOneEnable7thCore: 1 144 | vrSettings: 145 | enable360StereoCapture: 0 146 | isWsaHolographicRemotingEnabled: 0 147 | enableFrameTimingStats: 0 148 | useHDRDisplay: 0 149 | D3DHDRBitDepth: 0 150 | m_ColorGamuts: 00000000 151 | targetPixelDensity: 30 152 | resolutionScalingMode: 0 153 | androidSupportedAspectRatio: 1 154 | androidMaxAspectRatio: 2.1 155 | applicationIdentifier: {} 156 | buildNumber: 157 | Standalone: 0 158 | iPhone: 0 159 | tvOS: 0 160 | overrideDefaultApplicationIdentifier: 0 161 | AndroidBundleVersionCode: 1 162 | AndroidMinSdkVersion: 19 163 | AndroidTargetSdkVersion: 0 164 | AndroidPreferredInstallLocation: 1 165 | aotOptions: 166 | stripEngineCode: 1 167 | iPhoneStrippingLevel: 0 168 | iPhoneScriptCallOptimization: 0 169 | ForceInternetPermission: 0 170 | ForceSDCardPermission: 0 171 | CreateWallpaper: 0 172 | APKExpansionFiles: 0 173 | keepLoadedShadersAlive: 0 174 | StripUnusedMeshComponents: 1 175 | VertexChannelCompressionMask: 4054 176 | iPhoneSdkVersion: 988 177 | iOSTargetOSVersionString: 11.0 178 | tvOSSdkVersion: 0 179 | tvOSRequireExtendedGameController: 0 180 | tvOSTargetOSVersionString: 11.0 181 | uIPrerenderedIcon: 0 182 | uIRequiresPersistentWiFi: 0 183 | uIRequiresFullScreen: 1 184 | uIStatusBarHidden: 1 185 | uIExitOnSuspend: 0 186 | uIStatusBarStyle: 0 187 | appleTVSplashScreen: {fileID: 0} 188 | appleTVSplashScreen2x: {fileID: 0} 189 | tvOSSmallIconLayers: [] 190 | tvOSSmallIconLayers2x: [] 191 | tvOSLargeIconLayers: [] 192 | tvOSLargeIconLayers2x: [] 193 | tvOSTopShelfImageLayers: [] 194 | tvOSTopShelfImageLayers2x: [] 195 | tvOSTopShelfImageWideLayers: [] 196 | tvOSTopShelfImageWideLayers2x: [] 197 | iOSLaunchScreenType: 0 198 | iOSLaunchScreenPortrait: {fileID: 0} 199 | iOSLaunchScreenLandscape: {fileID: 0} 200 | iOSLaunchScreenBackgroundColor: 201 | serializedVersion: 2 202 | rgba: 0 203 | iOSLaunchScreenFillPct: 100 204 | iOSLaunchScreenSize: 100 205 | iOSLaunchScreenCustomXibPath: 206 | iOSLaunchScreeniPadType: 0 207 | iOSLaunchScreeniPadImage: {fileID: 0} 208 | iOSLaunchScreeniPadBackgroundColor: 209 | serializedVersion: 2 210 | rgba: 0 211 | iOSLaunchScreeniPadFillPct: 100 212 | iOSLaunchScreeniPadSize: 100 213 | iOSLaunchScreeniPadCustomXibPath: 214 | iOSLaunchScreenCustomStoryboardPath: 215 | iOSLaunchScreeniPadCustomStoryboardPath: 216 | iOSDeviceRequirements: [] 217 | iOSURLSchemes: [] 218 | iOSBackgroundModes: 0 219 | iOSMetalForceHardShadows: 0 220 | metalEditorSupport: 1 221 | metalAPIValidation: 1 222 | iOSRenderExtraFrameOnPause: 0 223 | iosCopyPluginsCodeInsteadOfSymlink: 0 224 | appleDeveloperTeamID: 225 | iOSManualSigningProvisioningProfileID: 226 | tvOSManualSigningProvisioningProfileID: 227 | iOSManualSigningProvisioningProfileType: 0 228 | tvOSManualSigningProvisioningProfileType: 0 229 | appleEnableAutomaticSigning: 0 230 | iOSRequireARKit: 0 231 | iOSAutomaticallyDetectAndAddCapabilities: 1 232 | appleEnableProMotion: 0 233 | shaderPrecisionModel: 0 234 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 235 | templatePackageId: com.unity.template.3d@5.0.4 236 | templateDefaultScene: Assets/Scenes/SampleScene.unity 237 | useCustomMainManifest: 0 238 | useCustomLauncherManifest: 0 239 | useCustomMainGradleTemplate: 0 240 | useCustomLauncherGradleManifest: 0 241 | useCustomBaseGradleTemplate: 0 242 | useCustomGradlePropertiesTemplate: 0 243 | useCustomProguardFile: 0 244 | AndroidTargetArchitectures: 1 245 | AndroidTargetDevices: 0 246 | AndroidSplashScreenScale: 0 247 | androidSplashScreen: {fileID: 0} 248 | AndroidKeystoreName: 249 | AndroidKeyaliasName: 250 | AndroidBuildApkPerCpuArchitecture: 0 251 | AndroidTVCompatibility: 0 252 | AndroidIsGame: 1 253 | AndroidEnableTango: 0 254 | androidEnableBanner: 1 255 | androidUseLowAccuracyLocation: 0 256 | androidUseCustomKeystore: 0 257 | m_AndroidBanners: 258 | - width: 320 259 | height: 180 260 | banner: {fileID: 0} 261 | androidGamepadSupportLevel: 0 262 | chromeosInputEmulation: 1 263 | AndroidMinifyWithR8: 0 264 | AndroidMinifyRelease: 0 265 | AndroidMinifyDebug: 0 266 | AndroidValidateAppBundleSize: 1 267 | AndroidAppBundleSizeToValidate: 150 268 | m_BuildTargetIcons: [] 269 | m_BuildTargetPlatformIcons: [] 270 | m_BuildTargetBatching: 271 | - m_BuildTarget: Standalone 272 | m_StaticBatching: 1 273 | m_DynamicBatching: 0 274 | - m_BuildTarget: tvOS 275 | m_StaticBatching: 1 276 | m_DynamicBatching: 0 277 | - m_BuildTarget: Android 278 | m_StaticBatching: 1 279 | m_DynamicBatching: 0 280 | - m_BuildTarget: iPhone 281 | m_StaticBatching: 1 282 | m_DynamicBatching: 0 283 | - m_BuildTarget: WebGL 284 | m_StaticBatching: 0 285 | m_DynamicBatching: 0 286 | m_BuildTargetGraphicsJobs: 287 | - m_BuildTarget: MacStandaloneSupport 288 | m_GraphicsJobs: 0 289 | - m_BuildTarget: Switch 290 | m_GraphicsJobs: 1 291 | - m_BuildTarget: MetroSupport 292 | m_GraphicsJobs: 1 293 | - m_BuildTarget: AppleTVSupport 294 | m_GraphicsJobs: 0 295 | - m_BuildTarget: BJMSupport 296 | m_GraphicsJobs: 1 297 | - m_BuildTarget: LinuxStandaloneSupport 298 | m_GraphicsJobs: 1 299 | - m_BuildTarget: PS4Player 300 | m_GraphicsJobs: 1 301 | - m_BuildTarget: iOSSupport 302 | m_GraphicsJobs: 0 303 | - m_BuildTarget: WindowsStandaloneSupport 304 | m_GraphicsJobs: 1 305 | - m_BuildTarget: XboxOnePlayer 306 | m_GraphicsJobs: 1 307 | - m_BuildTarget: LuminSupport 308 | m_GraphicsJobs: 0 309 | - m_BuildTarget: AndroidPlayer 310 | m_GraphicsJobs: 0 311 | - m_BuildTarget: WebGLSupport 312 | m_GraphicsJobs: 0 313 | m_BuildTargetGraphicsJobMode: 314 | - m_BuildTarget: PS4Player 315 | m_GraphicsJobMode: 0 316 | - m_BuildTarget: XboxOnePlayer 317 | m_GraphicsJobMode: 0 318 | m_BuildTargetGraphicsAPIs: 319 | - m_BuildTarget: AndroidPlayer 320 | m_APIs: 150000000b000000 321 | m_Automatic: 0 322 | - m_BuildTarget: iOSSupport 323 | m_APIs: 10000000 324 | m_Automatic: 1 325 | - m_BuildTarget: AppleTVSupport 326 | m_APIs: 10000000 327 | m_Automatic: 1 328 | - m_BuildTarget: WebGLSupport 329 | m_APIs: 0b000000 330 | m_Automatic: 1 331 | m_BuildTargetVRSettings: 332 | - m_BuildTarget: Standalone 333 | m_Enabled: 0 334 | m_Devices: 335 | - Oculus 336 | - OpenVR 337 | openGLRequireES31: 0 338 | openGLRequireES31AEP: 0 339 | openGLRequireES32: 0 340 | m_TemplateCustomTags: {} 341 | mobileMTRendering: 342 | Android: 1 343 | iPhone: 1 344 | tvOS: 1 345 | m_BuildTargetGroupLightmapEncodingQuality: [] 346 | m_BuildTargetGroupLightmapSettings: [] 347 | m_BuildTargetNormalMapEncoding: [] 348 | playModeTestRunnerEnabled: 0 349 | runPlayModeTestAsEditModeTest: 0 350 | actionOnDotNetUnhandledException: 1 351 | enableInternalProfiler: 0 352 | logObjCUncaughtExceptions: 1 353 | enableCrashReportAPI: 0 354 | cameraUsageDescription: 355 | locationUsageDescription: 356 | microphoneUsageDescription: 357 | bluetoothUsageDescription: 358 | switchNMETAOverride: 359 | switchNetLibKey: 360 | switchSocketMemoryPoolSize: 6144 361 | switchSocketAllocatorPoolSize: 128 362 | switchSocketConcurrencyLimit: 14 363 | switchScreenResolutionBehavior: 2 364 | switchUseCPUProfiler: 0 365 | switchUseGOLDLinker: 0 366 | switchApplicationID: 0x01004b9000490000 367 | switchNSODependencies: 368 | switchTitleNames_0: 369 | switchTitleNames_1: 370 | switchTitleNames_2: 371 | switchTitleNames_3: 372 | switchTitleNames_4: 373 | switchTitleNames_5: 374 | switchTitleNames_6: 375 | switchTitleNames_7: 376 | switchTitleNames_8: 377 | switchTitleNames_9: 378 | switchTitleNames_10: 379 | switchTitleNames_11: 380 | switchTitleNames_12: 381 | switchTitleNames_13: 382 | switchTitleNames_14: 383 | switchTitleNames_15: 384 | switchPublisherNames_0: 385 | switchPublisherNames_1: 386 | switchPublisherNames_2: 387 | switchPublisherNames_3: 388 | switchPublisherNames_4: 389 | switchPublisherNames_5: 390 | switchPublisherNames_6: 391 | switchPublisherNames_7: 392 | switchPublisherNames_8: 393 | switchPublisherNames_9: 394 | switchPublisherNames_10: 395 | switchPublisherNames_11: 396 | switchPublisherNames_12: 397 | switchPublisherNames_13: 398 | switchPublisherNames_14: 399 | switchPublisherNames_15: 400 | switchIcons_0: {fileID: 0} 401 | switchIcons_1: {fileID: 0} 402 | switchIcons_2: {fileID: 0} 403 | switchIcons_3: {fileID: 0} 404 | switchIcons_4: {fileID: 0} 405 | switchIcons_5: {fileID: 0} 406 | switchIcons_6: {fileID: 0} 407 | switchIcons_7: {fileID: 0} 408 | switchIcons_8: {fileID: 0} 409 | switchIcons_9: {fileID: 0} 410 | switchIcons_10: {fileID: 0} 411 | switchIcons_11: {fileID: 0} 412 | switchIcons_12: {fileID: 0} 413 | switchIcons_13: {fileID: 0} 414 | switchIcons_14: {fileID: 0} 415 | switchIcons_15: {fileID: 0} 416 | switchSmallIcons_0: {fileID: 0} 417 | switchSmallIcons_1: {fileID: 0} 418 | switchSmallIcons_2: {fileID: 0} 419 | switchSmallIcons_3: {fileID: 0} 420 | switchSmallIcons_4: {fileID: 0} 421 | switchSmallIcons_5: {fileID: 0} 422 | switchSmallIcons_6: {fileID: 0} 423 | switchSmallIcons_7: {fileID: 0} 424 | switchSmallIcons_8: {fileID: 0} 425 | switchSmallIcons_9: {fileID: 0} 426 | switchSmallIcons_10: {fileID: 0} 427 | switchSmallIcons_11: {fileID: 0} 428 | switchSmallIcons_12: {fileID: 0} 429 | switchSmallIcons_13: {fileID: 0} 430 | switchSmallIcons_14: {fileID: 0} 431 | switchSmallIcons_15: {fileID: 0} 432 | switchManualHTML: 433 | switchAccessibleURLs: 434 | switchLegalInformation: 435 | switchMainThreadStackSize: 1048576 436 | switchPresenceGroupId: 437 | switchLogoHandling: 0 438 | switchReleaseVersion: 0 439 | switchDisplayVersion: 1.0.0 440 | switchStartupUserAccount: 0 441 | switchTouchScreenUsage: 0 442 | switchSupportedLanguagesMask: 0 443 | switchLogoType: 0 444 | switchApplicationErrorCodeCategory: 445 | switchUserAccountSaveDataSize: 0 446 | switchUserAccountSaveDataJournalSize: 0 447 | switchApplicationAttribute: 0 448 | switchCardSpecSize: -1 449 | switchCardSpecClock: -1 450 | switchRatingsMask: 0 451 | switchRatingsInt_0: 0 452 | switchRatingsInt_1: 0 453 | switchRatingsInt_2: 0 454 | switchRatingsInt_3: 0 455 | switchRatingsInt_4: 0 456 | switchRatingsInt_5: 0 457 | switchRatingsInt_6: 0 458 | switchRatingsInt_7: 0 459 | switchRatingsInt_8: 0 460 | switchRatingsInt_9: 0 461 | switchRatingsInt_10: 0 462 | switchRatingsInt_11: 0 463 | switchRatingsInt_12: 0 464 | switchLocalCommunicationIds_0: 465 | switchLocalCommunicationIds_1: 466 | switchLocalCommunicationIds_2: 467 | switchLocalCommunicationIds_3: 468 | switchLocalCommunicationIds_4: 469 | switchLocalCommunicationIds_5: 470 | switchLocalCommunicationIds_6: 471 | switchLocalCommunicationIds_7: 472 | switchParentalControl: 0 473 | switchAllowsScreenshot: 1 474 | switchAllowsVideoCapturing: 1 475 | switchAllowsRuntimeAddOnContentInstall: 0 476 | switchDataLossConfirmation: 0 477 | switchUserAccountLockEnabled: 0 478 | switchSystemResourceMemory: 16777216 479 | switchSupportedNpadStyles: 22 480 | switchNativeFsCacheSize: 32 481 | switchIsHoldTypeHorizontal: 0 482 | switchSupportedNpadCount: 8 483 | switchSocketConfigEnabled: 0 484 | switchTcpInitialSendBufferSize: 32 485 | switchTcpInitialReceiveBufferSize: 64 486 | switchTcpAutoSendBufferSizeMax: 256 487 | switchTcpAutoReceiveBufferSizeMax: 256 488 | switchUdpSendBufferSize: 9 489 | switchUdpReceiveBufferSize: 42 490 | switchSocketBufferEfficiency: 4 491 | switchSocketInitializeEnabled: 1 492 | switchNetworkInterfaceManagerInitializeEnabled: 1 493 | switchPlayerConnectionEnabled: 1 494 | switchUseNewStyleFilepaths: 0 495 | switchUseMicroSleepForYield: 1 496 | switchMicroSleepForYieldTime: 25 497 | ps4NPAgeRating: 12 498 | ps4NPTitleSecret: 499 | ps4NPTrophyPackPath: 500 | ps4ParentalLevel: 11 501 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 502 | ps4Category: 0 503 | ps4MasterVersion: 01.00 504 | ps4AppVersion: 01.00 505 | ps4AppType: 0 506 | ps4ParamSfxPath: 507 | ps4VideoOutPixelFormat: 0 508 | ps4VideoOutInitialWidth: 1920 509 | ps4VideoOutBaseModeInitialWidth: 1920 510 | ps4VideoOutReprojectionRate: 60 511 | ps4PronunciationXMLPath: 512 | ps4PronunciationSIGPath: 513 | ps4BackgroundImagePath: 514 | ps4StartupImagePath: 515 | ps4StartupImagesFolder: 516 | ps4IconImagesFolder: 517 | ps4SaveDataImagePath: 518 | ps4SdkOverride: 519 | ps4BGMPath: 520 | ps4ShareFilePath: 521 | ps4ShareOverlayImagePath: 522 | ps4PrivacyGuardImagePath: 523 | ps4ExtraSceSysFile: 524 | ps4NPtitleDatPath: 525 | ps4RemotePlayKeyAssignment: -1 526 | ps4RemotePlayKeyMappingDir: 527 | ps4PlayTogetherPlayerCount: 0 528 | ps4EnterButtonAssignment: 1 529 | ps4ApplicationParam1: 0 530 | ps4ApplicationParam2: 0 531 | ps4ApplicationParam3: 0 532 | ps4ApplicationParam4: 0 533 | ps4DownloadDataSize: 0 534 | ps4GarlicHeapSize: 2048 535 | ps4ProGarlicHeapSize: 2560 536 | playerPrefsMaxSize: 32768 537 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 538 | ps4pnSessions: 1 539 | ps4pnPresence: 1 540 | ps4pnFriends: 1 541 | ps4pnGameCustomData: 1 542 | playerPrefsSupport: 0 543 | enableApplicationExit: 0 544 | resetTempFolder: 1 545 | restrictedAudioUsageRights: 0 546 | ps4UseResolutionFallback: 0 547 | ps4ReprojectionSupport: 0 548 | ps4UseAudio3dBackend: 0 549 | ps4UseLowGarlicFragmentationMode: 1 550 | ps4SocialScreenEnabled: 0 551 | ps4ScriptOptimizationLevel: 0 552 | ps4Audio3dVirtualSpeakerCount: 14 553 | ps4attribCpuUsage: 0 554 | ps4PatchPkgPath: 555 | ps4PatchLatestPkgPath: 556 | ps4PatchChangeinfoPath: 557 | ps4PatchDayOne: 0 558 | ps4attribUserManagement: 0 559 | ps4attribMoveSupport: 0 560 | ps4attrib3DSupport: 0 561 | ps4attribShareSupport: 0 562 | ps4attribExclusiveVR: 0 563 | ps4disableAutoHideSplash: 0 564 | ps4videoRecordingFeaturesUsed: 0 565 | ps4contentSearchFeaturesUsed: 0 566 | ps4CompatibilityPS5: 0 567 | ps4AllowPS5Detection: 0 568 | ps4GPU800MHz: 1 569 | ps4attribEyeToEyeDistanceSettingVR: 0 570 | ps4IncludedModules: [] 571 | ps4attribVROutputEnabled: 0 572 | monoEnv: 573 | splashScreenBackgroundSourceLandscape: {fileID: 0} 574 | splashScreenBackgroundSourcePortrait: {fileID: 0} 575 | blurSplashScreenBackground: 1 576 | spritePackerPolicy: 577 | webGLMemorySize: 16 578 | webGLExceptionSupport: 1 579 | webGLNameFilesAsHashes: 0 580 | webGLDataCaching: 1 581 | webGLDebugSymbols: 0 582 | webGLEmscriptenArgs: 583 | webGLModulesDirectory: 584 | webGLTemplate: APPLICATION:Default 585 | webGLAnalyzeBuildSize: 0 586 | webGLUseEmbeddedResources: 0 587 | webGLCompressionFormat: 1 588 | webGLWasmArithmeticExceptions: 0 589 | webGLLinkerTarget: 1 590 | webGLThreadsSupport: 0 591 | webGLDecompressionFallback: 0 592 | scriptingDefineSymbols: {} 593 | additionalCompilerArguments: {} 594 | platformArchitecture: {} 595 | scriptingBackend: {} 596 | il2cppCompilerConfiguration: {} 597 | managedStrippingLevel: {} 598 | incrementalIl2cppBuild: {} 599 | suppressCommonWarnings: 1 600 | allowUnsafeCode: 0 601 | useDeterministicCompilation: 1 602 | useReferenceAssemblies: 1 603 | enableRoslynAnalyzers: 1 604 | additionalIl2CppArgs: 605 | scriptingRuntimeVersion: 1 606 | gcIncremental: 1 607 | assemblyVersionValidation: 1 608 | gcWBarrierValidation: 0 609 | apiCompatibilityLevelPerPlatform: {} 610 | m_RenderingPath: 1 611 | m_MobileRenderingPath: 1 612 | metroPackageName: Template_3D 613 | metroPackageVersion: 614 | metroCertificatePath: 615 | metroCertificatePassword: 616 | metroCertificateSubject: 617 | metroCertificateIssuer: 618 | metroCertificateNotAfter: 0000000000000000 619 | metroApplicationDescription: Template_3D 620 | wsaImages: {} 621 | metroTileShortName: 622 | metroTileShowName: 0 623 | metroMediumTileShowName: 0 624 | metroLargeTileShowName: 0 625 | metroWideTileShowName: 0 626 | metroSupportStreamingInstall: 0 627 | metroLastRequiredScene: 0 628 | metroDefaultTileSize: 1 629 | metroTileForegroundText: 2 630 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 631 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 632 | metroSplashScreenUseBackgroundColor: 0 633 | platformCapabilities: {} 634 | metroTargetDeviceFamilies: {} 635 | metroFTAName: 636 | metroFTAFileTypes: [] 637 | metroProtocolName: 638 | XboxOneProductId: 639 | XboxOneUpdateKey: 640 | XboxOneSandboxId: 641 | XboxOneContentId: 642 | XboxOneTitleId: 643 | XboxOneSCId: 644 | XboxOneGameOsOverridePath: 645 | XboxOnePackagingOverridePath: 646 | XboxOneAppManifestOverridePath: 647 | XboxOneVersion: 1.0.0.0 648 | XboxOnePackageEncryption: 0 649 | XboxOnePackageUpdateGranularity: 2 650 | XboxOneDescription: 651 | XboxOneLanguage: 652 | - enus 653 | XboxOneCapability: [] 654 | XboxOneGameRating: {} 655 | XboxOneIsContentPackage: 0 656 | XboxOneEnhancedXboxCompatibilityMode: 0 657 | XboxOneEnableGPUVariability: 1 658 | XboxOneSockets: {} 659 | XboxOneSplashScreen: {fileID: 0} 660 | XboxOneAllowedProductIds: [] 661 | XboxOnePersistentLocalStorageSize: 0 662 | XboxOneXTitleMemory: 8 663 | XboxOneOverrideIdentityName: 664 | XboxOneOverrideIdentityPublisher: 665 | vrEditorSettings: {} 666 | cloudServicesEnabled: 667 | UNet: 1 668 | luminIcon: 669 | m_Name: 670 | m_ModelFolderPath: 671 | m_PortalFolderPath: 672 | luminCert: 673 | m_CertPath: 674 | m_SignPackage: 1 675 | luminIsChannelApp: 0 676 | luminVersion: 677 | m_VersionCode: 1 678 | m_VersionName: 679 | apiCompatibilityLevel: 6 680 | activeInputHandler: 0 681 | cloudProjectId: 682 | framebufferDepthMemorylessMode: 0 683 | qualitySettingsNames: [] 684 | projectName: 685 | organizationId: 686 | cloudEnabled: 0 687 | legacyClampBlendShapeWeights: 0 688 | virtualTexturingSupportEnabled: 0 689 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2020.3.18f1 2 | m_EditorVersionWithRevision: 2020.3.18f1 (a7d1c678663c) 3 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | UnityAdsSettings: 27 | m_Enabled: 0 28 | m_InitializeOnStartup: 1 29 | m_TestMode: 0 30 | m_IosGameId: 31 | m_AndroidGameId: 32 | m_GameIds: {} 33 | m_GameId: 34 | PerformanceReportingSettings: 35 | m_Enabled: 0 36 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /Demo~/Regex/ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Jonas Bötel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e6710bef8c008042b0f83e44678c449 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # regex-composer 2 | Compose regular expressions using code 3 | 4 | ## Usage 5 | ```csharp 6 | // +1 555-555-5555 7 | // country code and separators optional 8 | 9 | var digit = Pattern.Digit; 10 | var dash = Pattern.Dash; 11 | var space = Pattern.Space; 12 | var separator = new Optional(dash | space); 13 | 14 | var optionalPlus = Pattern.Plus.Optional(); 15 | var someDigits = new OneOrMore(digit); 16 | 17 | var countryCode = new Optional(optionalPlus + someDigits); 18 | var phone = countryCode + separator + digit * 3 + separator + digit * 3 + separator + digit * 4; 19 | 20 | var regex = phone.ToRegex(); 21 | 22 | Assert.IsTrue(regex.IsMatch("+1 555-555-5555")); 23 | ``` 24 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e744f6cc3e8bb774c865d9e9f9a39a65 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a618c546da589fe448e59da43455cec4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Alternation.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Alternation : Pattern 8 | { 9 | private readonly Pattern[] patterns; 10 | 11 | public Alternation(params Pattern[] patterns) 12 | { 13 | this.patterns = patterns; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("(?:{0})", string.Join(")|(?:", patterns)); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/Alternation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0b838c15cc32f4c4ea2f0369f0122f73 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Anchor.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2023 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Anchor : Pattern 8 | { 9 | private readonly Pattern pattern; 10 | 11 | public Anchor(Pattern pattern) 12 | { 13 | this.pattern = pattern; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("^(?:{0})$", pattern); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/Anchor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b59da3befdee024589b67341a90aecf 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Literal.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using System.Text.RegularExpressions; 6 | 7 | namespace Lumpn.RegularExpressions 8 | { 9 | public sealed class Literal : Pattern 10 | { 11 | private readonly string literal; 12 | 13 | public Literal(string literal) 14 | { 15 | this.literal = Regex.Escape(literal); 16 | } 17 | 18 | public override string ToString() 19 | { 20 | return literal; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Runtime/Literal.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ea531a5dc5a2a234eb9cba6173a38e00 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Lumpn.Regex.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Lumpn.Regex", 3 | "rootNamespace": "", 4 | "references": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [], 12 | "versionDefines": [], 13 | "noEngineReferences": false 14 | } -------------------------------------------------------------------------------- /Runtime/Lumpn.Regex.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 67c4666f2ae832746b6ad98fcaf54aa1 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime/NamedCapture.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using System.Text.RegularExpressions; 6 | 7 | namespace Lumpn.RegularExpressions 8 | { 9 | public sealed class NamedCapture : Pattern 10 | { 11 | private readonly string name; 12 | private readonly Pattern pattern; 13 | 14 | public NamedCapture(string name, Pattern pattern) 15 | { 16 | this.name = name; 17 | this.pattern = pattern; 18 | } 19 | 20 | public string GetValue(Match match) 21 | { 22 | return match.Groups[name].Value; 23 | } 24 | 25 | public override string ToString() 26 | { 27 | return string.Format("(?<{0}>{1})", name, pattern); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Runtime/NamedCapture.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 603261d06d578a742972b309a2d7e644 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/OneOrMore.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class OneOrMore : Pattern 8 | { 9 | private readonly Pattern pattern; 10 | 11 | public OneOrMore(Pattern pattern) 12 | { 13 | this.pattern = pattern; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("(?:{0})+", pattern); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/OneOrMore.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7828a8ac604736c4bb6f5fbb6ca71652 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Optional.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Optional : Pattern 8 | { 9 | private readonly Pattern pattern; 10 | 11 | public Optional(Pattern pattern) 12 | { 13 | this.pattern = pattern; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("(?:{0})?", pattern); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/Optional.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e82bfe3e6133c3d448c10f85b7909fbd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Pattern.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public abstract class Pattern 8 | { 9 | public abstract override string ToString(); 10 | 11 | public static Pattern operator +(Pattern a, Pattern b) 12 | { 13 | return new Sequence(a, b); 14 | } 15 | 16 | public static Pattern operator *(Pattern pattern, int count) 17 | { 18 | return new Repeat(pattern, count); 19 | } 20 | 21 | public static Pattern operator |(Pattern a, Pattern b) 22 | { 23 | return new Alternation(a, b); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Runtime/Pattern.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c5cfc218d6393bd4396fe101e1d3a817 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/PatternExtensions.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using System; 6 | using System.Text.RegularExpressions; 7 | 8 | namespace Lumpn.RegularExpressions 9 | { 10 | public static class PatternExtensions 11 | { 12 | public static Pattern FollowedBy(this Pattern a, Pattern b) 13 | { 14 | return new Sequence(a, b); 15 | } 16 | 17 | public static Pattern RepeatedTimes(this Pattern pattern, int count) 18 | { 19 | return new Repeat(pattern, count); 20 | } 21 | 22 | public static Pattern Optional(this Pattern pattern) 23 | { 24 | return new Optional(pattern); 25 | } 26 | 27 | public static Pattern ZeroOrMore(this Pattern pattern) 28 | { 29 | return new ZeroOrMore(pattern); 30 | } 31 | 32 | public static Pattern OneOrMore(this Pattern pattern) 33 | { 34 | return new OneOrMore(pattern); 35 | } 36 | 37 | public static Pattern Or(this Pattern a, Pattern b) 38 | { 39 | return new Alternation(a, b); 40 | } 41 | 42 | public static Pattern Anchored(this Pattern pattern) 43 | { 44 | return new Anchor(pattern); 45 | } 46 | 47 | public static Regex ToRegex(this Pattern pattern, RegexOptions options = RegexOptions.None) 48 | { 49 | return new Regex(pattern.ToString(), options); 50 | } 51 | 52 | public static Regex ToRegex(this Pattern pattern, RegexOptions options, TimeSpan timeout) 53 | { 54 | return new Regex(pattern.ToString(), options, timeout); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Runtime/PatternExtensions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1686cf7b94db4df499b08f36aeaaecdb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Patterns.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public static class Patterns 8 | { 9 | public static Pattern Digit = new Verbatim("\\d"); 10 | public static Pattern NonDigit = new Verbatim("\\D"); 11 | 12 | public static Pattern Whitespace = new Verbatim("\\s"); 13 | public static Pattern NonWhitespace = new Verbatim("\\S"); 14 | 15 | public static Pattern Word = new Verbatim("\\w"); 16 | public static Pattern NonWord = new Verbatim("\\W"); 17 | 18 | public static Pattern AnyCharacter = new Verbatim("."); 19 | public static Pattern Space = new Verbatim(" "); 20 | public static Pattern Tab = new Verbatim("\t"); 21 | public static Pattern Dash = new Verbatim("-"); 22 | public static Pattern Slash = new Verbatim("/"); 23 | public static Pattern Backslash = new Verbatim("\\"); 24 | public static Pattern CarriageReturn = new Verbatim("\r"); 25 | public static Pattern NewLine = new Verbatim("\n"); 26 | public static Pattern Plus = new Verbatim("\\+"); 27 | public static Pattern Dot = new Verbatim("\\."); 28 | 29 | public static Pattern UppercaseLetter = new Verbatim("[A-Z]"); 30 | public static Pattern LowercaseLetter = new Verbatim("[a-z]"); 31 | public static Pattern Letter = new Verbatim("[A-Za-z]"); 32 | public static Pattern NonLetter = new Verbatim("[^A-Za-z]"); 33 | public static Pattern LetterOrDigit = new Verbatim("[A-Za-z0-9]"); 34 | public static Pattern NonLetterOrDigit = new Verbatim("[^A-Za-z0-9]"); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Runtime/Patterns.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2f0f1c1de8dc3d45bb02bf17189d50b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Range.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Range : Pattern 8 | { 9 | private readonly char first; 10 | private readonly char last; 11 | 12 | public Range(char first, char last) 13 | { 14 | this.first = first; 15 | this.last = last; 16 | } 17 | 18 | public override string ToString() 19 | { 20 | return string.Format("[{0}-{1}]", first, last); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Runtime/Range.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 698e9a3841c7201458a8858d2ebee930 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Repeat.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Repeat : Pattern 8 | { 9 | private readonly Pattern pattern; 10 | private readonly int count; 11 | 12 | public Repeat(Pattern pattern, int count) 13 | { 14 | this.pattern = pattern; 15 | this.count = count; 16 | } 17 | 18 | public override string ToString() 19 | { 20 | return string.Format("(?:{0}){{{1}}}", pattern, count); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Runtime/Repeat.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c61694138bf6c53478bd90bccbb9ae5e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Sequence.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Sequence : Pattern 8 | { 9 | private readonly Pattern[] patterns; 10 | 11 | public Sequence(params Pattern[] patterns) 12 | { 13 | this.patterns = patterns; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("(?:{0})", string.Join(")(?:", patterns)); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/Sequence.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca75ce56ffac6f54fb6b5b195e193391 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Verbatim.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2023 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class Verbatim : Pattern 8 | { 9 | private readonly string pattern; 10 | 11 | public Verbatim(string pattern) 12 | { 13 | this.pattern = pattern; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return pattern; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/Verbatim.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ac59b495aa47c7e48afe41b438eacda7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ZeroOrMore.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | namespace Lumpn.RegularExpressions 6 | { 7 | public sealed class ZeroOrMore : Pattern 8 | { 9 | private readonly Pattern pattern; 10 | 11 | public ZeroOrMore(Pattern pattern) 12 | { 13 | this.pattern = pattern; 14 | } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("(?:{0})*", pattern); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Runtime/ZeroOrMore.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3872e8fb20524aa4c8f10c365b36d3e3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2ef43628ba469214e91490c129320986 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 83a22bc788c2f19449cd7a2e6edf7251 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Editor/AlternationTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public sealed class AlternationTest 11 | { 12 | [Test] 13 | public void TestAlternation() 14 | { 15 | var foo = new Literal("foo"); 16 | var bar = new Literal("bar"); 17 | 18 | var alt1 = foo | bar; 19 | var alt2 = new Alternation(foo, bar); 20 | var alt3 = foo.Or(bar); 21 | 22 | Assert.AreEqual("(?:foo)|(?:bar)", alt1.ToString()); 23 | Assert.AreEqual("(?:foo)|(?:bar)", alt2.ToString()); 24 | Assert.AreEqual("(?:foo)|(?:bar)", alt3.ToString()); 25 | 26 | var regex = alt1.ToRegex(); 27 | 28 | Assert.IsTrue(regex.IsMatch("foo")); 29 | Assert.IsTrue(regex.IsMatch("bar")); 30 | Assert.IsFalse(regex.IsMatch("baz")); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Tests/Editor/AlternationTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55c49ac84cd712b429d8fd3539ab81b9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/CaptureTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public sealed class CaptureTest 11 | { 12 | [Test] 13 | public void TestCapture() 14 | { 15 | // 555-555-5555 16 | var digit = Patterns.Digit; 17 | var dash = Patterns.Dash; 18 | 19 | var area = digit * 3; 20 | var exchange = digit * 3; 21 | var subscriber = digit * 4; 22 | 23 | var phone = area + dash + exchange + dash + subscriber; 24 | 25 | var capture = new NamedCapture("phone", phone); 26 | 27 | var regex = capture.ToRegex(); 28 | 29 | var match1 = regex.Match("555-555-5555"); 30 | var match2 = regex.Match("My phone number is 555-555-5555, and yours?"); 31 | var match3 = regex.Match("127.0.0.1"); 32 | 33 | Assert.IsTrue(match1.Success); 34 | Assert.IsTrue(match2.Success); 35 | Assert.IsFalse(match3.Success); 36 | 37 | Assert.AreEqual("555-555-5555", match1.Groups["phone"].ToString()); 38 | Assert.AreEqual("555-555-5555", match2.Groups["phone"].ToString()); 39 | Assert.AreEqual(string.Empty, match3.Groups["phone"].ToString()); 40 | } 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Tests/Editor/CaptureTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aae3f8b9c1f034942bdc097af36fb23d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/LiteralTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public class LiteralTest 11 | { 12 | [Test] 13 | public void PreservesSequence() 14 | { 15 | var literal = new Literal("foo"); 16 | var regex = literal.ToRegex(); 17 | 18 | Assert.IsTrue(regex.IsMatch("foo")); 19 | Assert.IsFalse(regex.IsMatch("f")); 20 | Assert.IsFalse(regex.IsMatch("fo")); 21 | Assert.IsFalse(regex.IsMatch("o")); 22 | Assert.IsFalse(regex.IsMatch("oo")); 23 | } 24 | 25 | [Test] 26 | public void EscapesDot() 27 | { 28 | var literal = new Literal("."); 29 | var regex = literal.ToRegex(); 30 | 31 | Assert.IsTrue(regex.IsMatch(".")); 32 | Assert.IsFalse(regex.IsMatch("a")); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Tests/Editor/LiteralTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04759b787b8c7ae438a8162829266acb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/Lumpn.Regex.Editor.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Lumpn.Regex.Editor.Tests", 3 | "rootNamespace": "", 4 | "references": [ 5 | "GUID:67c4666f2ae832746b6ad98fcaf54aa1" 6 | ], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": false, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [], 16 | "versionDefines": [], 17 | "noEngineReferences": false 18 | } -------------------------------------------------------------------------------- /Tests/Editor/Lumpn.Regex.Editor.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c5900f1f7f36cb49a79c2ca399ad753 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Tests/Editor/OperatorPrecedenceTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using System.Text.RegularExpressions; 6 | using NUnit.Framework; 7 | 8 | namespace Lumpn.RegularExpressions.Tests 9 | { 10 | /// 11 | /// Order of precedence in .NET: 12 | /// 1. Escape character 13 | /// 2. Groups and ranges 14 | /// 3. Quantifiers 15 | /// 4. Anchors and sequences 16 | /// 5. Alternation 17 | /// 18 | [TestFixture] 19 | public sealed class OperatorPrecedenceTest 20 | { 21 | private static readonly string[] inputs = 22 | { 23 | "a", 24 | "aa", 25 | "aab", 26 | "ab", 27 | "aba", 28 | "abab", 29 | "ababc", 30 | "abb", 31 | "abbc", 32 | "abc", 33 | "ac", 34 | "b", 35 | "c", 36 | "ca", 37 | "cb", 38 | }; 39 | 40 | [Test] 41 | public void AnchorsBeforeAlternation() 42 | { 43 | var precedence = "^a|b$"; 44 | var anchorsFirst = "(^a)|(b$)"; 45 | var alternationsFirst = "^(a|b)$"; 46 | var leftToRight = "((^a)|b)$"; 47 | var rightToLeft = "^(a|(b$))"; 48 | 49 | Assert.IsTrue(AreEqual(precedence, anchorsFirst)); 50 | Assert.IsFalse(AreEqual(precedence, alternationsFirst)); 51 | Assert.IsFalse(AreEqual(precedence, leftToRight)); 52 | Assert.IsFalse(AreEqual(precedence, rightToLeft)); 53 | } 54 | 55 | [Test] 56 | public void QuantifierBeforeSequence() 57 | { 58 | var precedence = "ab*c"; 59 | var quantifiersFirst = "a(b*)c"; 60 | var sequencesFirst = "(ab)*c"; 61 | 62 | Assert.IsTrue(AreEqual(precedence, quantifiersFirst)); 63 | Assert.IsFalse(AreEqual(precedence, sequencesFirst)); 64 | } 65 | 66 | 67 | [Test] 68 | public void QuantifierBeforeAnchors() 69 | { 70 | var precedence = "^a+b$"; 71 | var quantifiersFirst = "^(a+)b$"; 72 | var anchorsFirst = "(^a)+(b$)"; 73 | 74 | Assert.IsTrue(AreEqual(precedence, quantifiersFirst)); 75 | Assert.IsFalse(AreEqual(precedence, anchorsFirst)); 76 | } 77 | 78 | private static bool AreEqual(string pattern1, string pattern2) 79 | { 80 | var regex1 = new Regex(pattern1); 81 | var regex2 = new Regex(pattern2); 82 | 83 | foreach (var input in inputs) 84 | { 85 | var match1 = regex1.IsMatch(input); 86 | var match2 = regex2.IsMatch(input); 87 | 88 | if (match1 != match2) 89 | { 90 | return false; 91 | } 92 | } 93 | 94 | return true; 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Tests/Editor/OperatorPrecedenceTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f5cd22d793d7004c830fd7ac5f1ed49 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/QuantifierTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public class QuantifierTest 11 | { 12 | [Test] 13 | public void TestOneOrMore() 14 | { 15 | var digit = Patterns.Digit; 16 | var number = new OneOrMore(digit); 17 | var number2 = digit.OneOrMore(); 18 | 19 | Assert.AreEqual("(?:\\d)+", number.ToString()); 20 | Assert.AreEqual("(?:\\d)+", number2.ToString()); 21 | 22 | var regex = number.ToRegex(); 23 | Assert.IsTrue(regex.IsMatch("1")); 24 | Assert.IsTrue(regex.IsMatch("12")); 25 | Assert.IsFalse(regex.IsMatch("a")); 26 | } 27 | 28 | [Test] 29 | public void TestZeroOrMore() 30 | { 31 | var a = new Literal("a"); 32 | var b = new Literal("b"); 33 | var anything = Patterns.AnyCharacter.ZeroOrMore(); 34 | var pattern = new Sequence(a, anything, b); 35 | 36 | Assert.AreEqual("(?:a)(?:(?:.)*)(?:b)", pattern.ToString()); 37 | 38 | var regex = pattern.ToRegex(); 39 | Assert.IsTrue(regex.IsMatch("ab")); 40 | Assert.IsTrue(regex.IsMatch("a1b")); 41 | Assert.IsTrue(regex.IsMatch("a b")); 42 | Assert.IsFalse(regex.IsMatch("a")); 43 | Assert.IsFalse(regex.IsMatch("b")); 44 | } 45 | 46 | [Test] 47 | public void TestOptional() 48 | { 49 | // +1 555-555-5555 50 | // country code and separators optional 51 | 52 | var digit = Patterns.Digit; 53 | var dash = Patterns.Dash; 54 | var space = Patterns.Space; 55 | var separator = new Optional(dash | space); 56 | 57 | var optionalPlus = Patterns.Plus.Optional(); 58 | var someDigits = new OneOrMore(digit); 59 | 60 | var countryCode = new Optional(optionalPlus + someDigits); 61 | var phone = countryCode + separator + digit * 3 + separator + digit * 3 + separator + digit * 4; 62 | 63 | var regex = phone.ToRegex(); 64 | Assert.IsTrue(regex.IsMatch("+1 555-555-5555")); 65 | Assert.IsTrue(regex.IsMatch("1-555-555-5555")); 66 | Assert.IsTrue(regex.IsMatch("555-555-5555")); 67 | Assert.IsTrue(regex.IsMatch("555 555 5555")); 68 | Assert.IsTrue(regex.IsMatch("+911-555-555-5555")); 69 | Assert.IsFalse(regex.IsMatch("127.0.0.1")); 70 | } 71 | 72 | [Test] 73 | public void TestRepeat() 74 | { 75 | var a = new Literal("a"); 76 | 77 | var aaa = new Repeat(a, 3); 78 | var aaa2 = a * 3; 79 | var aaa3 = a.RepeatedTimes(3); 80 | 81 | Assert.AreEqual("(?:a){3}", aaa.ToString()); 82 | Assert.AreEqual("(?:a){3}", aaa2.ToString()); 83 | Assert.AreEqual("(?:a){3}", aaa3.ToString()); 84 | 85 | var regex = aaa.ToRegex(); 86 | Assert.IsFalse(regex.IsMatch("aa")); 87 | Assert.IsTrue(regex.IsMatch("aaa")); 88 | Assert.IsTrue(regex.IsMatch("aaaa")); 89 | Assert.IsTrue(regex.IsMatch("123 aaa 456")); 90 | Assert.IsFalse(regex.IsMatch("aba")); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Tests/Editor/QuantifierTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04ec6a00f99c90e4ca22f450a23d6d84 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/RangeTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public class RangeTest 11 | { 12 | [Test] 13 | public void TestRange() 14 | { 15 | var range = new Range('a', 'f'); 16 | 17 | Assert.AreEqual("[a-f]", range.ToString()); 18 | 19 | var regex = range.ToRegex(); 20 | Assert.IsTrue(regex.IsMatch("a")); 21 | Assert.IsTrue(regex.IsMatch("b")); 22 | Assert.IsFalse(regex.IsMatch("z")); 23 | } 24 | 25 | [Test] 26 | public void TestMetaCharacters() 27 | { 28 | Assert.IsTrue(IsMatch(Patterns.Word, "1")); 29 | Assert.IsTrue(IsMatch(Patterns.Word, "A")); 30 | Assert.IsTrue(IsMatch(Patterns.Word, "a")); 31 | Assert.IsTrue(IsMatch(Patterns.Word, "_")); 32 | Assert.IsFalse(IsMatch(Patterns.Word, "-")); 33 | 34 | Assert.IsTrue(IsMatch(Patterns.LetterOrDigit, "1")); 35 | Assert.IsTrue(IsMatch(Patterns.LetterOrDigit, "A")); 36 | Assert.IsTrue(IsMatch(Patterns.LetterOrDigit, "a")); 37 | Assert.IsFalse(IsMatch(Patterns.LetterOrDigit, "-")); 38 | Assert.IsFalse(IsMatch(Patterns.LetterOrDigit, "_")); 39 | } 40 | 41 | [Test] 42 | public void TestNegativeRange() 43 | { 44 | Assert.IsTrue(IsMatch(Patterns.NonLetter, "1")); 45 | Assert.IsFalse(IsMatch(Patterns.NonLetter, "a")); 46 | 47 | Assert.IsTrue(IsMatch(Patterns.NonDigit, "a")); 48 | Assert.IsFalse(IsMatch(Patterns.NonDigit, "1")); 49 | 50 | Assert.IsTrue(IsMatch(Patterns.NonLetterOrDigit, "!")); 51 | Assert.IsTrue(IsMatch(Patterns.NonLetterOrDigit, "_")); 52 | Assert.IsTrue(IsMatch(Patterns.NonLetterOrDigit, " ")); 53 | Assert.IsFalse(IsMatch(Patterns.NonLetterOrDigit, "a")); 54 | Assert.IsFalse(IsMatch(Patterns.NonLetterOrDigit, "1")); 55 | } 56 | 57 | private static bool IsMatch(Pattern pattern, string input) 58 | { 59 | return pattern.ToRegex().IsMatch(input); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Tests/Editor/RangeTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8d9e6a76a9b0880488738f73754089d4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests/Editor/SequenceTest.cs: -------------------------------------------------------------------------------- 1 | //---------------------------------------- 2 | // MIT License 3 | // Copyright(c) 2020 Jonas Boetel 4 | //---------------------------------------- 5 | using NUnit.Framework; 6 | 7 | namespace Lumpn.RegularExpressions.Tests 8 | { 9 | [TestFixture] 10 | public class SequenceTest 11 | { 12 | [Test] 13 | public void Sequence() 14 | { 15 | var a = new Literal("a"); 16 | var b = new Literal("b"); 17 | var c = new Literal("c"); 18 | 19 | var abc = new Sequence(a, b, c); 20 | var abc2 = a + b + c; 21 | var abc3 = a.FollowedBy(b).FollowedBy(c); 22 | 23 | Assert.AreEqual("(?:a)(?:b)(?:c)", abc.ToString()); 24 | Assert.AreEqual("(?:(?:a)(?:b))(?:c)", abc2.ToString()); 25 | Assert.AreEqual("(?:(?:a)(?:b))(?:c)", abc3.ToString()); 26 | 27 | var regex = abc.ToRegex(); 28 | Assert.IsTrue(regex.IsMatch("abc")); 29 | Assert.IsTrue(regex.IsMatch("123 abc 456")); 30 | Assert.IsFalse(regex.IsMatch("ab")); 31 | Assert.IsFalse(regex.IsMatch("bc")); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Tests/Editor/SequenceTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 692a4cb6f7a69204699b09f7c59f88ff 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "de.lumpn.unity-regex", 3 | "version": "0.1.1", 4 | "displayName": "Lumpn Regex Composer", 5 | "description": "Compose regular expressions using code.", 6 | "unity": "2017.1", 7 | "dependencies": { 8 | "com.unity.ext.nunit": "1.0.0" 9 | }, 10 | "keywords": [ 11 | "regex" 12 | ], 13 | "author": { 14 | "name": "Jonas Boetel", 15 | "url": "https://github.com/lumpn" 16 | } 17 | } -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a35d92d1ddf0bee488a285b2ffb596a4 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------