Hi Jean,

thank you very much, but sadly I have no idea what to do with these scripts to 
solve my problem.

Best,

Tibor


> On 2021. Apr 19., at 19:01, jj <[email protected]> wrote:
> 
> Hi all,
> 
> Here is a version that should not fail when encountering punctuation.
> 
> ```PHP
>     #!/usr/bin/env php
>     <?php
>     //---
>     function jj_ucwords($string) {
>         return preg_replace_callback('/\b(\w)/', function ($matches) { return 
> strtoupper($matches[0]); }, $string);
>     }
>     //---
>     function capitalize_skipping_inner_tags($string) {
>         $array = preg_split('/(<[^>]+?>)/iusx', $string, -1, 
> PREG_SPLIT_DELIM_CAPTURE);
>         $m = count($array);
>         $i = 0;
>         while($i < $m) {
>             if (strpos($array[$i], '<') === 0) {
>                 $i++;
>             } else {
>                 $array[$i] = jj_ucwords(strtolower($array[$i]));
>             }
>             $i++;
>         }
>         return implode($array);
>     }
>     //---
>     $input = file_get_contents('php://stdin');
>     $split_pattern = '/(<a[^>]+?>|<\/a>)/iusx';
>     $array = preg_split($split_pattern, $input, -1, PREG_SPLIT_DELIM_CAPTURE);
>     $m = count($array) - 1 ;
>     $i = 0;
>     while($i < $m) {
>         if (stripos($array[$i], '<a') === 0) {
>             $i++;
>             $array[$i] = capitalize_skipping_inner_tags($array[$i]);
>         }
>         $i++;
>     }
>     $output = implode($array);
>     file_put_contents('php://stdout', $output);
>     exit(0);
>     //---
> ```
> 
> And another version using NodeJS:
> 
> ```JavaScript
>     #!/usr/bin/env node
> 
>     process.stdin.resume();
>     process.stdin.setEncoding('utf8');
> 
>     // Capitalize words but leave inner tags untouched.
>     function capitalize(text) {
>         const splits = text.split(/(<[^>]+?>)/i);
>         const n = splits.length;
>         let i = 0;
>         while (i < n) {
>             if (!splits[i].startsWith('<')) {
>                 splits[i] = splits[i].toLowerCase().replace(/\w\S*/g, (w) => 
> (w.replace(/^\w/, (c) => c.toUpperCase())));
>             }
>             i++
>         }   
>         return splits.join('');
>     }
> 
>     process.stdin.on('data', function(text) {
>         const splits = text.split(/(<a[^>]+?>|<\/a>)/i);
>         const n = splits.length - 1; // Last item is itself an closing anchor 
> tag of not inside an anchor. Hence, no need to capitalize it.
>         let i = 0;
>         while (i < n) {
>             if (splits[i].toLowerCase().startsWith('<a')) {
>                 i++;
>                 splits[i] = capitalize(splits[i]);
>             }
>             i++
>         }   
>       process.stdout.write(splits.join(''));
>     })
> ```
> 
> BTW does anyone know how to add code highlighting to this posts ?
> 
> Best regards,
> 
> Jean Jourdain

-- 
This is the BBEdit Talk public discussion group. If you have a feature request 
or need technical support, please email "[email protected]" rather than 
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
--- 
You received this message because you are subscribed to the Google Groups 
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bbedit/1EA1C825-C766-4B93-BEB5-6AB1A2C867E1%40gmail.com.

Reply via email to