Blogs

csspp 1.0.7 published

The CSS specification clearly says that the CSS language itself is case insensitive. Unfortunately, it will be applied to data representing things such as the name of a class which is case sensitive. For this reason, it is important for csspp to keep input identifiers in the same case as it is found in the input file.

Version 1.0.7 includes that fix with tests used to verify that the code matches as expected.

Note that csspp still transforms function names to lowercase. This can cause problems with CSS used for Internet Explorer older versions (6 and earlier, versions that are not supported ...

I just added version 1.5.0 to SourceForge.net. This newer version includes a new function that one can use to convert a URI to lowercase. This is important to call tld() because the URI is going to be compared to top level domain names that are all in lowercase.

The new function is called tld_domain_to_lowercase(). It takes a string as input and returns a copy in lowercase. The function understands encoded URIs and UTF-8 as expected by the standard.

The project also includes a new test to make sure I get all the versions bumped each time I do a new update.

P.S. I published 1.5.1 today ...

csspp 1.0.6 published

Got CSS Preprocessor version 1.0.6 published.

This fixes a crashing problem with the minus operator (the following: "field: -;" crashes version 1.0.5 and earlier.) But that was not the point, just a side effect of writing many more tests.

The new system supports the @return at-command which means user defined functions work.

I wrote the necessary tests to check the system defined external functions. They all get checked. The result is that a couple were moved to internal functions so they would work (unique_id() and percentage() which cannot otherwise be implemented) and I added ...

The CSS Preprocessor adds the capability to write complex expressions and functions to use in your CSS files.

One of the functions you can use is a system function named if. It is used to select one of two expressions as shown here:

if($color = white, 33px, 145px)

This says if $color represents the color white, then use 33px, otherwise use 145px.

This works great in all cases where the true and false expressions are both calculable. If one of the expressions is to generate an error, then the if() function cannot be used. In this case, you want to use the ?: operator instead.

In the ...

csspp 1.0.5 published

The first version of csspp which with 100% coverage tests is now out. The .tar.gz is not yet available because SourceForge.net still has a few problems... but you can grab the source from the GIT repository.

The library (and thus command line tool) include support for a very large number of internal functions, variables, user defined functions (without support for the @return yet), nested rules, nested attributes, C/C++ like expressions, arrays, maps, color operations, etc.

The expression support the following types:

  • Integer (numbers without a period)
  • Decimal number
  • ...

I looked around for a while and completely missed the fact that SASS actually offers an extension to compile CSS files from a C++ library. That being said, it was not really clear whether the feat still requires the Ruby scripting language running in the background. If so, I think that my solution: CSS Preprocessor, is going to be a lot faster and possibly easier to maintain long term.

Yes. The CSS Preprocessor project reads .scss files (i.e. files mostly compatible with SASS) and compiles them in CSS 3 that your browser can handle. Not only that, it will minify those files as much as ...

I just published libtld version 1.4.22 to include many new gTLDs and also mark a few as deprecated or correct some that were considered private and not defined by a country (or vice versa.)

This includes many of the INA accepted TLDs such as .site and .love.

It also includes many new TLDs that are in a language other than English (or at least using Latin letters.) Japan actually got 47 new domain names in Japanese. Several Arab countries and Pakistan got such domains too.

There are also many new brand extensions.

What would be required now is a better set of categories, and actually, a ...

Today, I again ran in a QASSERT(). The problem with an assert is that the software stops and voilà. Yes. The assert has a message telling me what happened (why it is asserting) and the location of the assert.

So I know it was a QList problem because of an out of range index. Good.

Only, to fix said problem, you need the location of the caller. Knowing that an assert was generated in qlist.h is hardly helpful.

Of course, most of you will say: just run your software in your debugger, then it will break when the assert happens. True, unless the assert happens in a child process you ...

Today I started work to switch from using log4cplus with files directly to using the loggingserver. Not only that, it is using the newest version (on the edge!) which is 1.2.0-rc3. Up to here, no major problem.

However, the newer version forces you to use a version of the log4cplus library which is multi-threaded. This causes a major problem because the server makes use of fork() to create child processes each time a connection is made. There are several reason to do so, but there are a couple that I think are certainly the most important ones:

  1. Having a child allocating resources can ...

The controlled_vars library allows you to define variables that you never initialize. This is very practical if you have a large number of variables or a large number of objects of a class.

The idea is pretty simple and once you remove the debug, the variable becomes 1 to 1 equivalent to a char, unsigned char, signed char, short, unsigned short, int, unsigned, long, unsigned long, etc. In other words, it goes really fast.

However, in debug mode, the class adds a bool to know whether the variable was initialized or not. If not yet initialized, you cannot read the value or you get an ...

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly