All checks were successful
/ test_checkout (push) Successful in 1m44s
57 lines
2.4 KiB
Typst
57 lines
2.4 KiB
Typst
#import "@local/template-thesis-matisse:0.0.1": *
|
|
// Notations:
|
|
#import "0_preamble/notations.typ": *
|
|
|
|
// Format number.
|
|
// Following https://www.mit.edu/course/21/21.guide/numbers.htm
|
|
#let num(n, decimal: ".", thousands: " ") = {
|
|
let n = if type(n) == str {
|
|
float(n)
|
|
} else {
|
|
n
|
|
}
|
|
assert(type(n) == int or type(n) == float, message: "must be a number")
|
|
|
|
let parts = str(n).split(".")
|
|
let decimal_p = if parts.len() == 2 { parts.at(1) }
|
|
let integer_p = parts.at(0)
|
|
let integer_p = if integer_p.len() <= 4 {
|
|
integer_p
|
|
} else {
|
|
let nb_cluster = calc.div-euclid(integer_p.len(), 3)
|
|
let first_cluster_size = calc.rem-euclid(integer_p.len(), 3)
|
|
let clusters = ()
|
|
if first_cluster_size != 0 {
|
|
clusters.push(integer_p.slice(0, count: first_cluster_size))
|
|
}
|
|
for i in range(0, nb_cluster) {
|
|
clusters.push(integer_p.slice(first_cluster_size + i*3, count: 3))
|
|
}
|
|
clusters.join(thousands)
|
|
}
|
|
let formated = integer_p + if decimal_p != none { decimal + decimal_p }
|
|
[#formated]
|
|
}
|
|
|
|
|
|
#let mypercent(numerator, denominator, digits: 2) = [#num(calc.round((100 * numerator) / denominator, digits: digits))%]
|
|
|
|
#let jm-note = note.with(stroke: purple + 1pt)
|
|
#let jfl-note = note.with(stroke: green + 1pt)
|
|
|
|
#let à-maj = "À"
|
|
|
|
#let pb1 = link(<pb-1>)[*Pb1*]
|
|
#let pb1-text = [_To what extent are previously published Android analysis tools still usable today, and what factors impact their reusability?_]
|
|
#let pb1-text-fr = [_#à-maj quel point les outils d'analyse Android préalablement publiés sont-ils utilisables aujourd'hui, et quels facteurs impactent leur réutilisabilité?_]
|
|
|
|
#let pb2 = link(<pb-2>)[*Pb2*]
|
|
#let pb2-text = [_What is the default Android class loading algorithm, and does it impact static analysis?_]
|
|
#let pb2-text-fr = [_Quel est l'algorithme de chargement de classe utilisé par défaut par Android, et est-ce qu'il impacte l'analyse statique?_]
|
|
|
|
#let pb3 = link(<pb-3>)[*Pb3*]
|
|
#let pb3-text = [_Can we use instrumentation to provide dynamic code loading and reflection data collected dynamically to static analysis tools and improve their results?_]
|
|
#let pb3-text-fr = [_Peut-on utiliser l'instrumentation pour fournir le code chargé dynamiquement et les informations de réflexion collectées dynamiquement aux outils d'analyse statique pour améliorer leurs résultats?_]
|
|
|
|
//#let midskip = align(center, line(length: 80%))
|
|
#let midskip = align(center, sym.therefore)
|