Jump to content
You must now use your email address to sign in [click for more info] ×

Affinity Publisher: Union of Regex routines


Recommended Posts

Hello everyone,

I would like to create a Regex routine that replaces the offending spaces with a narrow no-break space <nbsp> (U+202F) in one pass in one routine instead of two.

Routine 1. Replace all erroneous spaces before colon (:), right-pointing double angle quotation mark (»), percent sign (%) with a narrow no-break space

Search for:
\s(?=(:|»|%))
Replacement:
<nnbsp>

Routine 2. Replace erroneous spaces after left-pointing double angle quotation mark («) with a narrow no-break space <NNBSP> (U+202F).

Search for:
(«)\s
Replacement:
\1<nnbsp>

Is this possible?

Is it possible to insert a unicode value into Regex formulas such as \u+202f, or to indicate a variable such as <nnbsp> that appears in the occurrence display?

Or, is it necessary to paste a narrow non-breaking space <nnbsp> (obtained by U+202F from the text)?

Thank you for your explanations.

regex.afpub

Edited by Pyanepsion
Correction of the English translation name error on («) and (»).

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Link to comment
Share on other sites

2 hours ago, Pyanepsion said:

left-pointing double angle quotation mark (»)

I would quibble that that is a right-pointing mark (though perhaps it appears at the left of a string that is quoted?) Similarly comment for your other mark, which "points" left.

But that's not relevant to the question. :) 

There are very few regular-expression implementations that are documented as supporting conditional processing in the replacement value, and Boost (used in Publisher) is not one of them. So I don't think you can do what you want, but I can't try it to confirm until later.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

19 hours ago, walt.farrell said:

I would quibble that that is a right-pointing mark (though perhaps it appears at the left of a string that is quoted?)

Yes, I had reversed the names of left-pointing double angle quotation mark («) and right-pointing double angle quotation mark (») in the English translation. That is corrected.

The important thing here is:

  • either to find a solution for the points raised in search and replace:
    • combine several Regex actions into one,
    • use \u+ for Unicode variables such as \u+202f,
    • use variables for constants such as <nnbsp>,
    • be able to save and load Regex scripts).
  • or suggest features to improve the use of Regex in the Affinity suite.

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Link to comment
Share on other sites

23 hours ago, Pyanepsion said:
Search for:
\s(?=(:|»|%))
Replacement:
<nnbsp>

I'm not a regex genius but I try to understand what I read…

Shouldn't we have <nnbsp>\1 ? or is it implicit ?

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

@laurent32Here is a step-by-step explanation to help understand this regex formula.

Search for:
\s(?=(:|»|%))
Replacement:
<nnbsp>

The regex formula is used to search and replace characters in a text string. Here is a step-by-step explanation of this formula:

  • Search for:
    1. \s stands for ‘space’. It looks for a space in the text.
    2. (?=(:|"|%)) is a ‘positive look ahead’. It looks at what follows the space and checks if it is one of the characters (:), (;), (%).
    3. If a space is found and the following characters match one of the specified characters, the replacement of this space will be performed.
  • Replacement:
    1. <nnbsp> defines the replacement that will be performed. In this case, the space will be replaced with the character ‘narrow no-break space’ (<nnbsp>).

End result:

The sentence ‘Il lui dit : « je sais. C’est 15 %. ».’ will be changed to ‘Il lui dit<nnbsp>: « je sais. C’est 15<nnbsp>%.<nnbsp>».’.

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Link to comment
Share on other sites

21 minutes ago, Pyanepsion said:

(?=(:|"|%)) is a ‘positive look ahead’. It looks at what follows the space and checks if it is one of the characters (:), (;), (%).

For the sake of clarity, I believe you meant to type:

Quote

(?=(:|»|%)) is a ‘positive look ahead’. It looks at what follows the space and checks if it is one of the characters (:), (»), (%).

 

Alfred spacer.png
Affinity Designer/Photo/Publisher 2 for Windows • Windows 10 Home/Pro
Affinity Designer/Photo/Publisher 2 for iPad • iPadOS 17.4.1 (iPad 7th gen)

Link to comment
Share on other sites

1 hour ago, laurent32 said:

Shouldn't we have <nnbsp>\1 ? or is it implicit ?

My question here was :

Since we use parentheses…

\s(?=(:|»|%))

Shouldn't we have <nnbsp>\1 for the replace part ?

I thought \1 referred to what is between () ?

But, maybe because we have only one () we don't need to say \1 ?

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

43 minutes ago, Andreas CH said:

\s(?=(:|»|%))|(?<=«)\s

That seems quite interesting… like having an "or" between 2 lookups…

Looks like what you're looking for @Pyanepsion ?

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

49 minutes ago, laurent32 said:

Shouldn't we have <nnbsp>\1 for the replace part ?

No, as this particular use of () does not indicate a capture group. It indicates, because of the added the ?=,  that it is instead a positive look-ahead group. You would only use a replacement like \1 with a capture group.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

@Pyanepsion's request for a union of the two expressions can be accomplished, in some regular expression engines. It requires that they support a replacement function called conditional replacement, in which the replacement string can handle a kind of if-then-else processing. If conditional replacement is supported, the syntax is different for it among the different engines, so I can't show a definite syntax for it. But in one possible form it looks something like: ?1true:false

In that replacement syntax:

  • ?1 signifies a conditional replacement, to be applied based on whether the search/match process set capture group #1. 
  • The "true" text is the replacement if capture group 1 was set.
  • The : separates the true/false values
  • the "false" text is the replacement if capture group 1 was not set.
     

Thus, you can have a search like (y)|n and a replacement like ?\1yes:no and if you apply it to the string yyn the result would be yesyesno

After some research, I have found that:

  • The Boost regex engine says that it has support for conditional replacement.
  • However, the application (e.g., Publisher) that is using Boost must specifically enable the conditional replacement support when it calls the replace function.

So: It might work, if Serif coded Publisher to enable the conditional replacement.

However, when I tried both of the forms of conditional replacement that I could find documented for Boost, neither worked. This should mean that either:

  • Publisher does not enable the support for conditional replacement; or
  • I have not found the right format for the conditional replacement function in Boost; or
  • This rarely used function is broken in Boost.

My research continues.

But if anyone from Serif is reading this, and can check with the developers whether the format_all option is passed to regex_replace that would be useful to know. And, if it is not passed, that would be a useful addition to the regex capabilities provided by Publisher, as a future enhancement (possibly via an option in the Find and Replace regex options).

 

Edited by walt.farrell
Corrected syntax so it matches one version of what Boost allows

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

38 minutes ago, walt.farrell said:

My research continues

@walt.farrell, I love the way you dive deep into things !

I must say = "respect" and thanks for sharing all that knowledge !

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

You're welcome, @laurent32.

Further research notes:

  1. The format for conditional replacement strings in Boost is specified at https://www.boost.org/doc/libs/1_81_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html
  2. I have tried that format (and edited my message above to show a correct format) in another application which uses Boost (Notepad++) and the conditional replacement works there.
  3. I have again tried it in Publisher, using a correct format, and it does not work. Therefore, it is most likely that Publisher does not enable this formatting option when issuing the regex_replace call to process the replacement string. Thus ends the research, with the answer that what @Pyanepsion wants to accomplish does not seem to be possible, currently, in Publisher.

 

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

@walt.farrell, What search and replace routines do you use in Notepad++?

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Link to comment
Share on other sites

5 hours ago, Pyanepsion said:

What search and replace routines do you use in Notepad++?

I didn't actually try your case, but I think it should be:

Find: (\s(?=(:|»|%)))|(«)\s

Replace: (?1<nnbsp>:\2<nnbsp>)

(But you would probably need the actual nnbsp character in the replacement string.)

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

Hallo Walt

16 minutes ago, walt.farrell said:

I didn't actually try your case, but I think it should be:

Find: (\s(?=(:|»|%)))|(«)\s

Replace: (?1<nnbsp>:\2<nnbsp>)

(But you would probably need the actual nnbsp character in the replacement string.)

Bei deinem Ausdruck wird zu viel markiert.

Il lui dit : « je sais. C’est 15 %. »

Es braucht ?<= vor «

 

richtig ist:

(\s(?=(:|»|%)))|(?<=«)\s

Il lui dit : « je sais. C’est 15 %. »

 

Das Ersetzen (Replace: (?1<nnbsp>:\2<nnbsp>) ) funktioniert bei mir nicht. Ich muss immer das Zeichen im Dokument markieren, kopieren und dann im Ersetzen-Dialog einfügen.

 

 

Link to comment
Share on other sites

@Pyanepsion -- are you looking specifically a solution to be performed at late stage (in page layout)? These kinds of changes could easily be applied in text editor like Word or LibreOffice Writer using macros, before importing text.

That would allow you to e.g. add binding thin spaces preceding the colon, question and exclamation mark and other punctuation symbols requiring it in French typography, and if necessary replace regular spaces with binding thin space, in one go.

Link to comment
Share on other sites

41 minutes ago, Andreas CH said:

Bei deinem Ausdruck wird zu viel markiert.

I think my specifications match what @Pyanepsion showed in his first post.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

48 minutes ago, Andreas CH said:

Das Ersetzen (Replace: (?1<nnbsp>:\2<nnbsp>) ) funktioniert bei mir nicht. Ich muss immer das Zeichen im Dokument markieren, kopieren und dann im Ersetzen-Dialog einfügen.

english = The replace (Replace: (?1<nnbsp>:\2<nnbsp>) ) doesn't work for me. I always have to select the character in the document, copy it and then paste it in the replace dialog

=> It doesn't work for me either.

I think that is what @walt.farrell has found :

21 hours ago, walt.farrell said:

I have again tried it in Publisher, using a correct format, and it does not work. Therefore, it is most likely that Publisher does not enable this formatting option when issuing the regex_replace call to process the replacement string. Thus ends the research, with the answer that what @Pyanepsion wants to accomplish does not seem to be possible, currently, in Publisher.

 

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

4 minutes ago, laurent32 said:

english = The replace (Replace: (?1<nnbsp>:\2<nnbsp>) ) doesn't work for me. I always have to select the character in the document, copy it and then paste it in the replace dialog

I think @Pyanepsion showed what the Find/Replace fields contain when you paste in the actual character. Or when you use the pull-down for the field to insert special characters. So, click on the pull-down, and you'll find a way to insert the space. And it will look like what @Pyanepsion showed.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

On 2/5/2023 at 10:37 AM, Pyanepsion said:

Is this possible?

Is it possible to insert a unicode value into Regex formulas such as \u+202f, or to indicate a variable such as <nnbsp> that appears in the occurrence display?

Or, is it necessary to paste a narrow non-breaking space <nnbsp> (obtained by U+202F from the text)?

If I'm correct, question still unanswered ?

 

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

20 minutes ago, walt.farrell said:

I think @Pyanepsion showed what the Find/Replace fields contain when you paste in the actual character. Or when you use the pull-down for the field to insert special characters. So, click on the pull-down, and you'll find a way to insert the space. And it will look like what @Pyanepsion showed.

We don't have <nnbsp> in the pull down, we only have access to <nbsp> :

image.png.310998fdf2d697317e6349c7ef5e086a.png

And I tried the replace formula with <nbsp>, I can't make it work… ?

MacBook Pro 16 pouces (3456 × 2234), 2021 / Apple M1 Pro / 16 Go / macOS Ventura Version 13.4.1 (22F82)
+ 31,5 pouces (2560 × 1440) + 27 pouces (1080 × 1920) + iPad (8th generation) / iPadOS 17.2 + Apple Pencil + 

Macmini6,2 Quad-Core Intel Core i7 16 Go / macOS Catalina version 10.15.7 (19H2026)
MacBookAir6,2 Intel Core i5 double cœur 4 Go / macOS Big Sur version 11.7.7 (20G1345)

Licence Universelle Affinity V2 updated to 2.3.0

Link to comment
Share on other sites

Here is my take, but I may have understood incorrectly OP's intentions:

regexbuddy_boost_extended.thumb.png.572de0bdd887a79b670448961c9625ff.png

RegEx Buddy explanation for search and replace clauses helps to figure out the syntax -- though as mentioned, I might have misunderstood the goal:

regexbuddy_explanation.thumb.png.089c863995c6ba412f0a6016647192bc.png

In Notepad++:

626989377_notepad_boost_extended.thumb.png.31cb8ba958923d97c759f0a0b54bcec8.png

 

Note: I have only InDesign CS6 and QXP2018 at the moment and neither supports extended boost expressions like conditional replacements. I have no idea if the later versions do. But having scripting support (and ability to chain regex searches in case multiple simple find & replace operations are not wanted to be used), or even just an ability to save regex searches naturally makes need for such advanced searches less necessary.

EDIT: <nnbsp> is here simply just a placeholder. If it is used literatlly, it needs to be find + replaced using the actual thin space that the client app understands.

Link to comment
Share on other sites

19 minutes ago, laurent32 said:

And I tried the replace formula with <nbsp>, I can't make it work… ?

Did you try it with the character inserted from the dropdown (which would show as <nbsp>), or with a pasted non-breaking space, or with the text <nbsp>?

The pulldown or pasting would be required. But even then, if you're trying the conditional replacement, that does not work in Publisher.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

21 minutes ago, laurent32 said:

We don't have <nnbsp> in the pull down, we only have access to <nbsp> :

Thanks. Then you would need to paste in the proper character or use the \u or \x notation, I think.

-- Walt
Designer, Photo, and Publisher V1 and V2 at latest retail and beta releases
PC:
    Desktop:  Windows 11 Pro, version 23H2, 64GB memory, AMD Ryzen 9 5900 12-Core @ 3.00 GHz, NVIDIA GeForce RTX 3090 

    Laptop:  Windows 11 Pro, version 23H2, 32GB memory, Intel Core i7-10750H @ 2.60GHz, Intel UHD Graphics Comet Lake GT2 and NVIDIA GeForce RTX 3070 Laptop GPU.
iPad:  iPad Pro M1, 12.9": iPadOS 17.4.1, Apple Pencil 2, Magic Keyboard 
Mac:  2023 M2 MacBook Air 15", 16GB memory, macOS Sonoma 14.4.1

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.