Method and data
What was measured, how, with which instruments, and what stays outside.
The sample
The sample frame holds 82 front pages, chosen to cover four groups: central public administration together with the autonomous authorities, the courts and the city halls of county seats; general-interest press with national reach; independent newsrooms funded by donations and grants; and a control group of publishers based outside Romania who publish in Romanian. The full list, with the identifiers used in the data, is in tools/targets.json.
It is not a random sample and it claims no statistical representativeness for the Romanian web. It is a frame built to answer one precise question: what do the institutions and publications a citizen actually opens serve them.
The count
From each page I stripped comments, scripts, styles and markup, resolved the HTML entities, and counted in the remaining text the occurrences of eight characters: Ș, ș, Ț, ț with a comma and Ş, ş, Ţ, ţ with a cedilla, plus the decomposed forms using a combining mark. I counted ă, â and î separately, as a measure of whether the page writes with diacritics at all.
Every page was requested once and saved compressed, so the measurement can be rerun against the same text. The instrument is tools/audit.py.
The two instruments
Twenty-five sites answered the plain request with a browser check rather than content. On those I ran the same counting rule in Chromium against the rendered document tree, walking every text node except script, style, noscript and template. The instrument column in the data says, for each row, which measurement was used.
To see whether the two instruments agree, I measured eight sites with both. The proportions line up: ANAF gave 91 to 60 in each, Ziarul Financiar 36 to 566 over HTTP and 64 to 572 in the browser, the Senate 972 to 91 and 1,179 to 93. Rendering brings in more text, because it also loads what arrives from JavaScript, and it does not move the proportion.
One site gave different answers. The Ministry of Internal Affairs served the plain request a response that was not valid UTF-8 text and that contained a single cedilla; in the browser the real page has 363 letters with a comma and 57 with a cedilla. The browser value is the one used.
What I took out of the count
A cedilla is evidence of a wrong character only if it sits inside a Romanian word. For each site I extracted the words containing a cedilla, ordered by frequency, and read them. One word in the entire sample is legitimately Turkish: the name Kurtulmuş, twice on the Senate front page. Those two occurrences are removed from the Senate total. Everything else is Romanian words.
Seven sites produced no measurement and enter no total. Five answered no request at all, browser included: the Chamber of Deputies, the High Court of Cassation and Justice, the Ministry of Justice, the Ministry of Development and the legislative portal. The Trade Register rejected the request through its own filter. Casa Jurnalistului never finishes loading its content.
The type bench
For 87 families I downloaded the static TrueType file Google Fonts serves to a legacy client and, separately, the latin and latin-ext woff2 subsets it serves to a current browser. From each file I read the character map, the components the glyph is built from, its outline and the substitution table.
The distance between letter and mark is computed from the outlines: the contour that ends lowest is the mark, the rest is the letter, and the distance is the difference between the foot of the letter and the top of the mark, divided by the em and multiplied by a thousand. For the Romanian localisation I did not stop at the presence of the feature: in every font I verified that the substitution links the glyph of U+015F to the glyph of U+0219. All 70 families that declare the feature do it correctly. The instrument is tools/fonts.py.
The three layers
The behaviour in the section on layers was verified in the browser rather than read from documentation. String equality, canonical and compatibility decomposition, comparison under Romanian collation at base, accent and variant sensitivity, comparison under Turkish collation, and matching with a case-insensitive regular expression. Romanian collation returns zero, meaning equivalence, at all three sensitivity levels.
What it does not cover
The measurement looks at the front page rather than the whole site, and at one moment rather than a series. It says nothing about documents published as attached files, which is where the administration actually keeps its text. It does not measure the databases behind the pages, where the effect described in the last section would show directly, because they are not public.
The data files are published exactly as they entered the page: character audit, type bench, chronology.
The data
- sites.json · the character audit, 75 sites measured of 82 attempted
- fonts.json · the type bench, 87 families
- timeline.json · the chronology, with the source for every date