From 21907f65fea99fd87dfccc9140e1884abe97db60 Mon Sep 17 00:00:00 2001 From: KalybosPro Date: Sat, 14 Jun 2025 03:00:54 +0100 Subject: [PATCH 1/4] first commit --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e8df46d..55a10af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ php: - 7.0 - 7.1 - 7.2 + - 8.4 env: matrix: From 209eda993d9e9569bd58d8f66cf02fe1df596268 Mon Sep 17 00:00:00 2001 From: KalybosPro Date: Mon, 30 Jun 2025 23:48:00 +0100 Subject: [PATCH 2/4] Convert all class="..." to className="..." for JSX/React output. --- output.css | 1 + src.zip | Bin 0 -> 10797 bytes src/Converter.php | 25 ++++++++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 output.css create mode 100644 src.zip diff --git a/output.css b/output.css new file mode 100644 index 0000000..16f905c --- /dev/null +++ b/output.css @@ -0,0 +1 @@ +Converted Code: input.css diff --git a/src.zip b/src.zip new file mode 100644 index 0000000000000000000000000000000000000000..562e70c844147fbbd2786d424ffc2f471cc89824 GIT binary patch literal 10797 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 literal 0 HcmV?d00001 diff --git a/src/Converter.php b/src/Converter.php index 9d2c325..df904c9 100644 --- a/src/Converter.php +++ b/src/Converter.php @@ -35,6 +35,7 @@ public function setContent(string $content): self $this->lastSearches = []; $this->components = []; + $this->convertClassToClassName(); return $this; } @@ -44,6 +45,7 @@ public function setFramework(string $framework): self $this->framework = new $framework(); + $this->convertClassToClassName(); return $this; } @@ -59,6 +61,7 @@ public function classesOnly(bool $value): self { $this->isCssClassesOnly = $value; + $this->convertClassToClassName(); return $this; } @@ -69,6 +72,7 @@ public function setGenerateComponents(bool $value): self { $this->generateComponents = $value; + $this->convertClassToClassName(); return $this; } @@ -86,6 +90,7 @@ public function setPrefix(string $prefix): self $this->prefix = $prefix; } + $this->convertClassToClassName(); return $this; } @@ -97,6 +102,7 @@ public function convert(): self } } + $this->convertClassToClassName(); return $this; } @@ -264,4 +270,21 @@ function ($match) use ($replace) { } } } -} + + /** + * Convert all class="..." to className="..." for JSX/React output. + */ + public function convertClassToClassName(): self + { + $this->givenContent = preg_replace_callback( + '/class=([\\"\'])(.*?)\1/', + function ($matches) { + return 'className=' . $matches[1] . $matches[2] . $matches[1]; + }, + $this->givenContent + ); + + return $this; + } + +} \ No newline at end of file From 993e7f051d704b094bc5715a475c926ee515c2c9 Mon Sep 17 00:00:00 2001 From: KalybosPro Date: Wed, 2 Jul 2025 01:21:44 +0100 Subject: [PATCH 3/4] executable on windows --- README.md | 4 ++ src.zip | Bin 10797 -> 0 bytes src/ConsoleHelper.php | 137 ++++++++++++++++++++++++++++++++++++------ src/Converter.php | 1 - tailwindo | 7 ++- tailwindo.bat | 2 + 6 files changed, 132 insertions(+), 19 deletions(-) delete mode 100644 src.zip create mode 100644 tailwindo.bat diff --git a/README.md b/README.md index 0e6c34a..2cfaba8 100644 --- a/README.md +++ b/README.md @@ -31,3 +31,7 @@ This tool can **convert Your CSS framework (currently Bootstrap) classes** in HT - [Introduction](docs/1_introduction.md) - [Installation](docs/2_installation.md) - [Quick start](docs/3_quick-start.md) + + +chmod +x tailwindo +sudo ln -s $(pwd)/tailwindo /usr/local/bin/tailwindo \ No newline at end of file diff --git a/src.zip b/src.zip deleted file mode 100644 index 562e70c844147fbbd2786d424ffc2f471cc89824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10797 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 diff --git a/src/ConsoleHelper.php b/src/ConsoleHelper.php index 8bb5809..34880da 100644 --- a/src/ConsoleHelper.php +++ b/src/ConsoleHelper.php @@ -31,7 +31,7 @@ public function __construct(OutputInterface $output, array $settings) $this->folderConvert = $settings['folderConvert'] ?? false; } - public function folderConvert(string $folderPath) + public function folderConvert(string $folderPath, string $outputDir) { [$frameworkVersion, $TailwindVersion] = $this->converter->getFramework()->supportedVersion(); @@ -41,6 +41,10 @@ public function folderConvert(string $folderPath) $frameworkVersion.' to Tailwind '.$TailwindVersion ); + if (!file_exists($outputDir)) { + mkdir($outputDir, 0777, true); + } + if ($this->recursive) { $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( @@ -62,18 +66,117 @@ public function folderConvert(string $folderPath) $extensions = explode('.', $directory); $extension = end($extensions); if ($directory->isFile() && $this->isConvertibleFile($extension)) { - $this->fileConvert($directory->getRealPath()); + $relativePath = substr($directory->getRealPath(), strlen(realpath($folderPath))); + $outputPath = rtrim($outputDir, '/') . '/' . ltrim($relativePath, '/'); + + if (!file_exists(dirname($outputPath))) { + mkdir(dirname($outputPath), 0777, true); + } + + $this->fileConvert($directory->getRealPath(), $outputPath); } } } - public function fileConvert($filePath) + // public function folderConvert(string $folderPath) + // { + // [$frameworkVersion, $TailwindVersion] = $this->converter->getFramework()->supportedVersion(); + + // $this->output->writeln('Converting Folder'.($this->components ? ' (extracted to tailwindo-components.css)' : '').': '.realpath($folderPath)); + // $this->output->writeln( + // 'Converting from '.$this->converter->getFramework()->frameworkName().' '. + // $frameworkVersion.' to Tailwind '.$TailwindVersion + // ); + + // if ($this->recursive) { + // $iterator = new \RecursiveIteratorIterator( + // new \RecursiveDirectoryIterator( + // $folderPath, + // \RecursiveDirectoryIterator::SKIP_DOTS + // ), + // \RecursiveIteratorIterator::SELF_FIRST, + // \RecursiveIteratorIterator::CATCH_GET_CHILD + // ); + // } else { + // $iterator = new \DirectoryIterator($folderPath); + // } + + // if ($this->folderConvert && $this->components) { + // $this->newComponentsFile(realpath($folderPath)); + // } + + // foreach ($iterator as $_ => $directory) { + // $extensions = explode('.', $directory); + // $extension = end($extensions); + // if ($directory->isFile() && $this->isConvertibleFile($extension)) { + // $this->fileConvert($directory->getRealPath()); + // } + // } + // } + + // public function fileConvert($filePath) + // { + // //just in case + // $filePath = realpath($filePath); + + // if (!$this->folderConvert) { + // $this->output->writeln('Converting FIle: '.($this->components ? '(extracted to tailwindo-components.css)' : '').' '.$filePath); + + // [$frameworkVersion, $TailwindVersion] = $this->converter->getFramework()->supportedVersion(); + // $this->output->writeln( + // 'Converting from '.$this->converter->getFramework()->frameworkName().' '. + // $frameworkVersion.' to Tailwind '.$TailwindVersion.PHP_EOL + // ); + // } + + // if (!is_file($filePath)) { + // $this->output->writeln('Couldn\'t convert: '.basename($filePath)); + + // return; + // } + + // $content = file_get_contents($filePath); + + // $lastDotPosition = strrpos($filePath, '.'); + + // if ($lastDotPosition !== false && !$this->overwrite) { + // $newFilePath = substr_replace($filePath, '.tw', $lastDotPosition, 0); + // } elseif (!$this->overwrite) { + // $newFilePath = $filePath.'.tw'; + // } else { + // // Set the new path to the old path to make sure we overwrite it + // $newFilePath = $filePath; + // } + + // $newContent = $this->converter + // ->setContent($content) + // ->convert() + // ->get($this->components); + + // if ($content !== $newContent) { + // $this->output->writeln('processed: '.basename($newFilePath)); + + // if ($this->components) { + // if (!$this->folderConvert) { + // $this->newComponentsFile(dirname($filePath)); + // } + + // $this->writeComponentsToFile($newContent, dirname($filePath)); + // } else { + // file_put_contents($newFilePath, $newContent); + // } + // } else { + // $this->output->writeln('Nothing to convert: '.basename($filePath)); + // } + // } + + public function fileConvert($filePath, $outputPath = null) { //just in case $filePath = realpath($filePath); if (!$this->folderConvert) { - $this->output->writeln('Converting FIle: '.($this->components ? '(extracted to tailwindo-components.css)' : '').' '.$filePath); + $this->output->writeln('Converting File: '.($this->components ? '(extracted to tailwindo-components.css)' : '').' '.$filePath); [$frameworkVersion, $TailwindVersion] = $this->converter->getFramework()->supportedVersion(); $this->output->writeln( @@ -84,21 +187,21 @@ public function fileConvert($filePath) if (!is_file($filePath)) { $this->output->writeln('Couldn\'t convert: '.basename($filePath)); - return; } $content = file_get_contents($filePath); - $lastDotPosition = strrpos($filePath, '.'); + if ($outputPath === null) { + $lastDotPosition = strrpos($filePath, '.'); - if ($lastDotPosition !== false && !$this->overwrite) { - $newFilePath = substr_replace($filePath, '.tw', $lastDotPosition, 0); - } elseif (!$this->overwrite) { - $newFilePath = $filePath.'.tw'; - } else { - // Set the new path to the old path to make sure we overwrite it - $newFilePath = $filePath; + if ($lastDotPosition !== false && !$this->overwrite) { + $outputPath = substr_replace($filePath, '.tw', $lastDotPosition, 0); + } elseif (!$this->overwrite) { + $outputPath = $filePath.'.tw'; + } else { + $outputPath = $filePath; // overwrite original + } } $newContent = $this->converter @@ -107,16 +210,16 @@ public function fileConvert($filePath) ->get($this->components); if ($content !== $newContent) { - $this->output->writeln('processed: '.basename($newFilePath)); + $this->output->writeln('processed: '.basename($outputPath)); if ($this->components) { if (!$this->folderConvert) { - $this->newComponentsFile(dirname($filePath)); + $this->newComponentsFile(dirname($outputPath)); } - $this->writeComponentsToFile($newContent, dirname($filePath)); + $this->writeComponentsToFile($newContent, dirname($outputPath)); } else { - file_put_contents($newFilePath, $newContent); + file_put_contents($outputPath, $newContent); } } else { $this->output->writeln('Nothing to convert: '.basename($filePath)); diff --git a/src/Converter.php b/src/Converter.php index df904c9..464b813 100644 --- a/src/Converter.php +++ b/src/Converter.php @@ -286,5 +286,4 @@ function ($matches) { return $this; } - } \ No newline at end of file diff --git a/tailwindo b/tailwindo index 1d3c118..123a1d4 100755 --- a/tailwindo +++ b/tailwindo @@ -32,6 +32,8 @@ if (file_exists(__DIR__.'/vendor/autoload.php')) { ->addOption('prefix', 'p', InputOption::VALUE_REQUIRED, 'This allows you to add a custom prefix to all of Tailwind\'s generated utility classes', '') + ->addOption('output', 'o', InputOption::VALUE_REQUIRED, 'Output directory for converted files', 'converted') + ->setCode(function (InputInterface $input, OutputInterface $output) { // output arguments and options $arg = trim($input->getFirstArgument()); @@ -69,11 +71,14 @@ if (file_exists(__DIR__.'/vendor/autoload.php')) { return $consoleHelper->fileConvert($arg); } + //folder ? if (is_dir($arg)) { - return $consoleHelper->folderConvert($arg); + $outputDir = $input->getOption('output'); + $consoleHelper->folderConvert($arg,$outputDir); } + //any html/css classes return $consoleHelper->codeConvert($arg); }) diff --git a/tailwindo.bat b/tailwindo.bat new file mode 100644 index 0000000..87fe34c --- /dev/null +++ b/tailwindo.bat @@ -0,0 +1,2 @@ +@echo off +php "%~dp0tailwindo" %* From 223b1227106b7cee3231a5d96b7100e6089b45ad Mon Sep 17 00:00:00 2001 From: KalybosPro Date: Tue, 22 Jul 2025 21:28:19 +0100 Subject: [PATCH 4/4] ok --- output.css | 1 - 1 file changed, 1 deletion(-) delete mode 100644 output.css diff --git a/output.css b/output.css deleted file mode 100644 index 16f905c..0000000 --- a/output.css +++ /dev/null @@ -1 +0,0 @@ -Converted Code: input.css